Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: remoting/tools/me2me_virtual_host.py

Issue 8863010: Store the host config in a per-host config file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix relaunching of host if it crashes. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # Virtual Me2Me implementation. This script runs and manages the processes 6 # Virtual Me2Me implementation. This script runs and manages the processes
7 # required for a Virtual Me2Me desktop, which are: X server, X desktop 7 # required for a Virtual Me2Me desktop, which are: X server, X desktop
8 # session, and Host process. 8 # session, and Host process.
9 # This script is intended to run continuously as a background daemon 9 # This script is intended to run continuously as a background daemon
10 # process, running under an ordinary (non-root) user account. 10 # process, running under an ordinary (non-root) user account.
(...skipping 11 matching lines...) Expand all
22 import time 22 import time
23 import urllib2 23 import urllib2
24 import uuid 24 import uuid
25 25
26 # Local modules 26 # Local modules
27 import gaia_auth 27 import gaia_auth
28 import keygen 28 import keygen
29 29
30 REMOTING_COMMAND = "remoting_me2me_host" 30 REMOTING_COMMAND = "remoting_me2me_host"
31 31
32 # Command-line switch for passing the config path to remoting_me2me_host.
33 HOST_CONFIG_SWITCH_NAME = "host-config"
34
32 SCRIPT_PATH = os.path.dirname(sys.argv[0]) 35 SCRIPT_PATH = os.path.dirname(sys.argv[0])
33 if not SCRIPT_PATH: 36 if not SCRIPT_PATH:
34 SCRIPT_PATH = os.getcwd() 37 SCRIPT_PATH = os.getcwd()
35 38
36 # These are relative to SCRIPT_PATH. 39 # These are relative to SCRIPT_PATH.
37 EXE_PATHS_TO_TRY = [ 40 EXE_PATHS_TO_TRY = [
38 ".", 41 ".",
39 "../../out/Debug", 42 "../../out/Debug",
40 "../../out/Release" 43 "../../out/Release"
41 ] 44 ]
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 logging.info("Xvfb is active.") 256 logging.info("Xvfb is active.")
254 257
255 def launch_x_session(self): 258 def launch_x_session(self):
256 # Start desktop session 259 # Start desktop session
257 session_proc = subprocess.Popen("/etc/X11/Xsession", 260 session_proc = subprocess.Popen("/etc/X11/Xsession",
258 cwd=os.environ["HOME"], 261 cwd=os.environ["HOME"],
259 env=self.child_env) 262 env=self.child_env)
260 if not session_proc.pid: 263 if not session_proc.pid:
261 raise Exception("Could not start X session") 264 raise Exception("Could not start X session")
262 265
263 def launch_host(self): 266 def launch_host(self, host):
264 # Start remoting host 267 # Start remoting host
265 command = locate_executable(REMOTING_COMMAND) 268 args = [locate_executable(REMOTING_COMMAND),
266 self.host_proc = subprocess.Popen(command, env=self.child_env) 269 "--%s=%s" % (HOST_CONFIG_SWITCH_NAME, host.config_file)]
Wez 2011/12/10 00:00:09 Is it possible for |config_file| to contain anythi
Lambros 2011/12/10 02:00:31 This shouldn't confuse popen(), because the whole
270 self.host_proc = subprocess.Popen(args, env=self.child_env)
267 if not self.host_proc.pid: 271 if not self.host_proc.pid:
268 raise Exception("Could not start remoting host") 272 raise Exception("Could not start remoting host")
269 273
270 274
271 def main(): 275 def main():
272 atexit.register(cleanup) 276 atexit.register(cleanup)
273 277
274 for s in [signal.SIGINT, signal.SIGTERM]: 278 for s in [signal.SIGINT, signal.SIGTERM]:
275 signal.signal(s, signal_handler) 279 signal.signal(s, signal_handler)
276 280
277 # Ensure full path to config directory exists. 281 # Ensure full path to config directory exists.
278 if not os.path.exists(CONFIG_DIR): 282 if not os.path.exists(CONFIG_DIR):
279 os.makedirs(CONFIG_DIR, mode=0700) 283 os.makedirs(CONFIG_DIR, mode=0700)
280 284
281 auth = Authentication(os.path.join(CONFIG_DIR, "auth.json")) 285 auth = Authentication(os.path.join(CONFIG_DIR, "auth.json"))
282 if not auth.load_config(): 286 if not auth.load_config():
283 try: 287 try:
284 auth.refresh_tokens() 288 auth.refresh_tokens()
285 except: 289 except:
286 logging.error("Authentication failed.") 290 logging.error("Authentication failed.")
287 return 1 291 return 1
288 auth.save_config() 292 auth.save_config()
289 293
290 host = Host(os.path.join(CONFIG_DIR, "host.json")) 294 host = Host(os.path.join(CONFIG_DIR, "host#%s.json" % socket.gethostname()))
Wez 2011/12/10 00:00:09 Is socket.gethostname() reliable, e.g. if the host
Lambros 2011/12/10 02:00:31 Python doc isn't helpful here, it says only that i
291 295
292 if not host.load_config(): 296 if not host.load_config():
293 host.create_config(auth) 297 host.create_config(auth)
294 host.save_config() 298 host.save_config()
295 299
296 logging.info("Using host_id: " + host.host_id) 300 logging.info("Using host_id: " + host.host_id)
297 301
298 desktop = Desktop() 302 desktop = Desktop()
299 desktop.launch_x_server() 303 desktop.launch_x_server()
300 desktop.launch_x_session() 304 desktop.launch_x_session()
301 desktop.launch_host() 305 desktop.launch_host(host)
302 306
303 while True: 307 while True:
304 pid, status = os.wait() 308 pid, status = os.wait()
305 logging.info("wait() returned (%s,%s)" % (pid, status)) 309 logging.info("wait() returned (%s,%s)" % (pid, status))
306 310
307 if pid == desktop.x_proc.pid: 311 if pid == desktop.x_proc.pid:
308 logging.info("X server process terminated with code %d", status) 312 logging.info("X server process terminated with code %d", status)
309 break 313 break
310 314
311 if pid == desktop.host_proc.pid: 315 if pid == desktop.host_proc.pid:
312 logging.info("Host process terminated, relaunching") 316 logging.info("Host process terminated, relaunching")
313 desktop.launch_host() 317 desktop.launch_host(host)
314 318
315 if __name__ == "__main__": 319 if __name__ == "__main__":
316 logging.basicConfig(level=logging.DEBUG) 320 logging.basicConfig(level=logging.DEBUG)
317 sys.exit(main()) 321 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698