Files
xen/tools/misc/xend
T
emellor@ewan af1b5637f4 Allow parallel 32- and 64-bit Xen installations. Move xc_save, xc_restore,
and xenconsole out of /usr/libexec/xen and into one of /usr/lib/xen/bin or
/usr/lib64/xen/bin.  Remove all the PATH hacking inside Xend, and rely upon
the PATH being set correctly from outside.  Added an auxbin module for
handling the hacky stuff.

Replace the few /usr/bin/python bang paths with /usr/bin/env python.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
2005-10-11 14:55:12 +01:00

112 lines
2.9 KiB
Python

#!/usr/bin/env python
# -*- mode: python; -*-
#============================================================================
# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
# 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())