--- xen-4.2.1/tools/misc/xend.orig 2012-12-17 15:01:18.000000000 +0000 +++ xen-4.2.1/tools/misc/xend 2013-01-22 21:26:39.387953003 +0000 @@ -8,103 +8,18 @@ """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. - On Solaris, the daemons are SMF managed, and you should not attempt - to start xend by hand. """ -import fcntl -import glob -import os -import os.path import sys -import socket -import signal -import time -import commands - 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_daemon(daemon, *args): - if os.fork() == 0: - os.execvp(daemon, (daemon,) + args) - -def start_blktapctrl(): - start_daemon("blktapctrl", "") - 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|reload|restart}' % sys.argv[0] - elif sys.argv[1] == 'start': - if os.uname()[0] != "SunOS": - start_blktapctrl() - return daemon.start() - elif sys.argv[1] == 'trace_start': - start_blktapctrl() - return daemon.start(trace=1) - elif sys.argv[1] == 'stop': - return daemon.stop() - elif sys.argv[1] == 'reload': - return daemon.reloadConfig() - elif sys.argv[1] == 'restart': - start_blktapctrl() - return daemon.stop() or daemon.start() - elif sys.argv[1] == 'status': + if sys.argv[1:] and sys.argv[1] == 'status': return daemon.status() - else: - print 'not an option:', sys.argv[1] - return 1 + return daemon.start() if __name__ == '__main__': sys.exit(main()) diff -up xen-3.4.0/tools/python/xen/xend/osdep.py.fix xen-3.4.0/tools/python/xen/xend/osdep.py --- xen-3.4.0/tools/python/xen/xend/osdep.py.fix 2009-05-18 13:05:38.000000000 +0200 +++ xen-3.4.0/tools/python/xen/xend/osdep.py 2009-05-20 15:39:18.000000000 +0200 @@ -27,7 +27,7 @@ _scripts_dir = { _xend_autorestart = { "NetBSD": True, - "Linux": True, + "Linux": False, "SunOS": False, } diff -up xen-3.4.0/tools/python/xen/xend/server/SrvDaemon.py.fix xen-3.4.0/tools/python/xen/xend/server/SrvDaemon.py --- xen-3.4.0/tools/python/xen/xend/server/SrvDaemon.py.fix 2009-05-18 13:05:38.000000000 +0200 +++ xen-3.4.0/tools/python/xen/xend/server/SrvDaemon.py 2009-05-20 15:39:18.000000000 +0200 @@ -110,7 +110,14 @@ class Daemon: # Fork, this allows the group leader to exit, # which means the child can never again regain control of the # terminal - if os.fork(): + child = os.fork() + if child: + if not osdep.xend_autorestart: + pidfile = open(XEND_PID_FILE, 'w') + try: + pidfile.write(str(child)) + finally: + pidfile.close() os._exit(0) # Detach from standard file descriptors, and redirect them to