diff -up xen-3.4.0/tools/misc/xend.fix xen-3.4.0/tools/misc/xend
--- xen-3.4.0/tools/misc/xend.fix 2009-05-20 15:39:12.000000000 +0200
+++ xen-3.4.0/tools/misc/xend 2009-05-20 15:40:32.000000000 +0200
@@ -8,140 +8,16 @@
"""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_xenstored():
- pidfname = "/var/run/xenstore.pid"
- try:
- f = open(pidfname, "a")
- try:
- fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
- rootdir = os.getenv("XENSTORED_ROOTDIR") or "/var/lib/xenstored"
- for i in glob.glob(rootdir + "/tdb*"):
- try:
- os.unlink(i)
- except:
- pass
- os.unlink(pidfname)
- except:
- pass
- f.close()
- except:
- pass
- XENSTORED_TRACE = os.getenv("XENSTORED_TRACE")
- cmd = "xenstored --pid-file /var/run/xenstore.pid"
- if XENSTORED_TRACE:
- cmd += " -T /var/log/xen/xenstored-trace.log"
- s,o = commands.getstatusoutput(cmd)
-
-def start_consoled():
- XENCONSOLED_TRACE = os.getenv("XENCONSOLED_TRACE")
- args = ""
- if XENCONSOLED_TRACE:
- args += "--log=" + XENCONSOLED_TRACE
- start_daemon("xenconsoled", 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_xenstored()
- start_consoled()
- start_blktapctrl()
- return daemon.start()
- elif sys.argv[1] == 'trace_start':
- start_xenstored()
- start_consoled()
- 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_xenstored()
- start_consoled()
- start_blktapctrl()
- return daemon.stop() or daemon.start()
- elif 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