diff -rup xen-3.1.0-src/tools/examples/init.d/xend xen-3.1.0-src.new/tools/examples/init.d/xend --- xen-3.1.0-src/tools/examples/init.d/xend 2007-05-31 12:14:19.000000000 -0400 +++ xen-3.1.0-src.new/tools/examples/init.d/xend 2007-05-31 17:53:29.000000000 -0400 @@ -19,48 +19,161 @@ # Description: Starts and stops the Xen control daemon. ### END INIT INFO +# Source function library. +. /etc/rc.d/init.d/functions + +if [ ! -d /proc/xen ]; then + exit 0 +fi if ! grep -q "control_d" /proc/xen/capabilities ; then exit 0 fi -# Wait for Xend to be up -function await_daemons_up -{ - i=1 - rets=10 - xend status - while [ $? -ne 0 -a $i -lt $rets ]; do - sleep 1 - echo -n . - i=$(($i + 1)) - xend status - done +# Default config params +XENSTORED_PID="/var/run/xenstore.pid" +XENSTORED_ARGS= + +XENCONSOLED_LOG_HYPERVISOR=yes +XENCONSOLED_LOG_GUESTS=yes +XENCONSOLED_LOG_DIR=/var/log/xen/console +XENCONSOLED_ARGS= + +BLKTAPCTRL_ARGS= + +# User customized params +test -f /etc/sysconfig/xend && . /etc/sysconfig/xend + +XENCONSOLED_LOG=none +if [ "$XENCONSOLED_LOG_HYPERVISOR" = "yes" ] +then + if [ "$XENCONSOLED_LOG_GUESTS" = "yes" ] + then + XENCONSOLED_LOG=all + else + XENCONSOLED_LOG=hv + fi +else + if [ "$XENCONSOLED_LOG_GUESTS" = "yes" ] + then + XENCONSOLED_LOG=guest + fi +fi + +start() { + echo -n $"Starting xen daemons: " + + echo -n "xenstored " + /usr/sbin/xenstored --pid-file $XENSTORED_PID $XENSTORED_ARGS + rc=$? + test $rc = 0 || RETVAL=$rc + + echo -n "blktapctrl " + /usr/sbin/blktapctrl $BLKTAPCTRL_ARGS + rc=$? + test $rc = 0 || RETVAL=$rc + + echo -n "xenconsoled " + /usr/sbin/xenconsoled --log=$XENCONSOLED_LOG --log-dir=$XENCONSOLED_LOG_DIR $XENCONSOLED_ARGS + rc=$? + test $rc = 0 || RETVAL=$rc + + echo -n "xend" + /usr/sbin/xend + rc=$? + test $rc = 0 || RETVAL=$rc + + test $RETVAL = 0 && echo_success || echo_failure + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/xend } +stop() { + echo -n $"Stopping xen daemons: " + + # NB not safe to stop xenstored, or blktapctrl if guests are active + # or backend driver modules are loaded, so we skip them + + echo -n "xenconsoled " + killproc xenconsoled > /dev/null + rc=$? + test $rc = 0 || RETVAL=$rc + + echo -n "xend " + killproc xend > /dev/null + rc=$? + test $rc = 0 || RETVAL=$rc + + test $RETVAL = 0 && echo_success || echo_failure + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/xend +} + +rcstatus() { + status xenstored + rc=$? + test $rc != 0 && RETVAL=$rc + + status blktapctrl + rc=$? + test $rc != 0 && RETVAL=$rc + + status xenconsoled + rc=$? + test $rc != 0 && RETVAL=$rc + + status xend + rc=$? + test $rc != 0 && RETVAL=$rc + test $RETVAL = 0 && echo_success || echo_failure + echo +} + +reload() { + echo -n $"Reloading xen daemons: " + + echo -n "xenconsoled " + killproc xenconsoled -HUP > /dev/null + rc=$? + test $rc = 0 || RETVAL=$rc + + echo -n "xend " + killproc xend -HUP > /dev/null + rc=$? + test $rc = 0 || RETVAL=$rc + + test $RETVAL = 0 && echo_success || echo_failure + echo +} + +RETVAL=0 case "$1" in start) - xend start - await_daemons_up + start ;; stop) - xend stop + stop ;; status) - xend status + rcstatus ;; reload) - xend reload + reload ;; restart|force-reload) - xend restart - await_daemons_up + stop + start ;; + condrestart) + if [ -f /var/lock/subsys/xend ] + then + stop + start + fi + ;; *) - # do not advertise unreasonable commands that there is no reason - # to use with this device - echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" + echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload}" exit 1 esac -exit $? +exit $RETVAL diff -rup xen-3.1.0-src/tools/misc/xend xen-3.1.0-src.new/tools/misc/xend --- xen-3.1.0-src/tools/misc/xend 2007-05-31 13:10:49.000000000 -0400 +++ xen-3.1.0-src.new/tools/misc/xend 2007-05-31 13:44:14.000000000 -0400 @@ -8,123 +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 os -import os.path import sys -import socket -import signal -import time -import commands - -result = commands.getstatusoutput(os.path.join(os.path.dirname(sys.argv[0]), - 'xen-python-path')) -if result[0] != 0: - print >>sys.stderr, result[1] - sys.exit(1) - -sys.path.append(result[1]) 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/xen/xenstored-trace.log" - s,o = commands.getstatusoutput(cmd) - -def start_consoled(): - if os.fork() == 0: - os.execvp('xenconsoled', ['xenconsoled']) - -def start_blktapctrl(): - if os.fork() == 0: - os.execvp('blktapctrl', ['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 -rup xen-3.1.0-src/tools/python/xen/xend/osdep.py xen-3.1.0-src.new/tools/python/xen/xend/osdep.py --- xen-3.1.0-src/tools/python/xen/xend/osdep.py 2007-05-18 10:45:21.000000000 -0400 +++ xen-3.1.0-src.new/tools/python/xen/xend/osdep.py 2007-05-31 13:13:07.000000000 -0400 @@ -25,7 +25,7 @@ _scripts_dir = { } _xend_autorestart = { - "Linux": True, + "Linux": False, "SunOS": False, } diff -rup xen-3.1.0-src/tools/python/xen/xend/server/SrvDaemon.py xen-3.1.0-src.new/tools/python/xen/xend/server/SrvDaemon.py --- xen-3.1.0-src/tools/python/xen/xend/server/SrvDaemon.py 2007-05-18 10:45:21.000000000 -0400 +++ xen-3.1.0-src.new/tools/python/xen/xend/server/SrvDaemon.py 2007-05-31 14:36:23.000000000 -0400 @@ -109,7 +109,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