#!/usr/bin/env python # -*- mode: python; -*- #============================================================================ # Copyright (C) 2004 Mike Wray # Copyright (C) 2005 XenSource Ltd #============================================================================ """Xen management daemon. Provides console server and HTTP management api. Run: xend start Restart: xend restart The daemon is stopped with: xend stop The daemon should reconnect to device control interfaces and recover its state when restarted. """ import os import sys import socket import signal import time import commands # add fallback path for non-native python path installs if needed sys.path.append('/usr/lib/python') sys.path.append('/usr/lib64/python') from xen.xend.server import SrvDaemon class CheckError(ValueError): pass def hline(): print >>sys.stderr, "*" * 70 def msg(message): print >>sys.stderr, "*" * 3, message def check_logging(): """Check python logging is installed and raise an error if not. Logging is standard from Python 2.3 on. """ try: import logging except ImportError: hline() msg("Python logging is not installed.") msg("Use 'make install-logging' at the xen root to install.") msg("") msg("Alternatively download and install from") msg("http://www.red-dove.com/python_logging.html") hline() raise CheckError("logging is not installed") def check_user(): """Check that the effective user id is 0 (root). """ if os.geteuid() != 0: hline() msg("Xend must be run as root.") hline() raise CheckError("invalid user") def start_xenstored(): XENSTORED_TRACE = os.getenv("XENSTORED_TRACE") cmd = "xenstored --pid-file=/var/run/xenstore.pid" if XENSTORED_TRACE: cmd += " -T /var/log/xenstored-trace.log" s,o = commands.getstatusoutput(cmd) def start_consoled(): if os.fork() == 0: os.execvp('xenconsoled', ['xenconsoled']) def main(): try: check_logging() check_user() except CheckError: sys.exit(1) daemon = SrvDaemon.instance() if not sys.argv[1:]: print 'usage: %s {start|stop|restart}' % sys.argv[0] elif sys.argv[1] == 'start': start_xenstored() start_consoled() return daemon.start() elif sys.argv[1] == 'trace_start': start_xenstored() start_consoled() return daemon.start(trace=1) elif sys.argv[1] == 'stop': return daemon.stop() elif sys.argv[1] == 'restart': start_xenstored() start_consoled() return daemon.stop() or daemon.start() elif sys.argv[1] == 'status': return daemon.status() else: print 'not an option:', sys.argv[1] return 1 if __name__ == '__main__': sys.exit(main())