--- 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