mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
libvchan's init_xs_srv (server-side xenstore-related initialization) expects to find the current domain's domid at this xenstore key. libxl (and xend) write this for domains they create. Do the same for domain 0, allowing the use of libvchan in dom0. Signed-off-by: Matthew Daley <mattjd@gmail.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
126 lines
2.9 KiB
Bash
126 lines
2.9 KiB
Bash
#!/bin/sh
|
|
#
|
|
# PROVIDE: xencommons
|
|
# REQUIRE: DAEMON
|
|
|
|
. /etc/rc.subr
|
|
|
|
DIR=$(dirname "$0")
|
|
. "${DIR}/xen-hotplugpath.sh"
|
|
|
|
LD_LIBRARY_PATH="${LIBDIR}"
|
|
export LD_LIBRARY_PATH
|
|
|
|
name="xencommons"
|
|
rcvar=xend
|
|
start_precmd="xen_precmd"
|
|
start_cmd="xen_startcmd"
|
|
stop_cmd="xen_stop"
|
|
status_cmd="xen_status"
|
|
extra_commands="status"
|
|
required_files="/kern/xen/privcmd"
|
|
|
|
XENSTORED_PIDFILE="/var/run/xenstored.pid"
|
|
XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid"
|
|
XENBACKENDD_PIDFILE="/var/run/xenbackendd.pid"
|
|
#XENBACKENDD_DEBUG=1
|
|
#XENCONSOLED_TRACE="/var/log/xen/xenconsole-trace.log"
|
|
#XENSTORED_TRACE="/var/log/xen/xenstore-trace.log"
|
|
|
|
xen_precmd()
|
|
{
|
|
mkdir -p /var/run/xenstored || exit 1
|
|
}
|
|
|
|
xen_startcmd()
|
|
{
|
|
local time=0
|
|
local timeout=30
|
|
|
|
xenstored_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
|
|
if test -z "$xenstored_pid"; then
|
|
printf "Cleaning xenstore database.\n"
|
|
if [ -z "${XENSTORED_ROOTDIR}" ]; then
|
|
XENSTORED_ROOTDIR="/var/lib/xenstored"
|
|
fi
|
|
rm -f ${XENSTORED_ROOTDIR}/tdb* >/dev/null 2>&1
|
|
printf "Starting xenservices: xenstored, xenconsoled."
|
|
XENSTORED_ARGS=" --pid-file ${XENSTORED_PIDFILE}"
|
|
if [ -n "${XENSTORED_TRACE}" ]; then
|
|
XENSTORED_ARGS="${XENSTORED_ARGS} -T /var/log/xen/xenstored-trace.log"
|
|
fi
|
|
${SBINDIR}/xenstored ${XENSTORED_ARGS}
|
|
while [ $time -lt $timeout ] && ! `${BINDIR}/xenstore-read -s / >/dev/null 2>&1` ; do
|
|
printf "."
|
|
time=$(($time+1))
|
|
sleep 1
|
|
done
|
|
else
|
|
printf "Starting xenservices: xenconsoled."
|
|
fi
|
|
|
|
XENCONSOLED_ARGS=""
|
|
if [ -n "${XENCONSOLED_TRACE}" ]; then
|
|
XENCONSOLED_ARGS="${XENCONSOLED_ARGS} --log=${XENCONSOLED_TRACE}"
|
|
fi
|
|
|
|
${SBINDIR}/xenconsoled ${XENCONSOLED_ARGS}
|
|
|
|
printf "\n"
|
|
|
|
printf "Setting domain 0 name and domid.\n"
|
|
${BINDIR}/xenstore-write "/local/domain/0/name" "Domain-0"
|
|
${BINDIR}/xenstore-write "/local/domain/0/domid" 0
|
|
}
|
|
|
|
xen_stop()
|
|
{
|
|
pids=""
|
|
printf "Stopping xencommons.\n"
|
|
printf "WARNING: Not stopping xenstored, as it cannot be restarted.\n"
|
|
|
|
rc_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
|
|
pids="$pids $rc_pid"
|
|
|
|
kill -${sig_stop:-TERM} $pids
|
|
wait_for_pids $pids
|
|
}
|
|
|
|
xen_status()
|
|
{
|
|
xenstored_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
|
|
if test -n ${xenstored_pid}; then
|
|
pids="$pids $xenstored_pid"
|
|
fi
|
|
|
|
xenconsoled_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
|
|
if test -n ${xenconsoled_pid}; then
|
|
pids="$pids $xenconsoled_pid"
|
|
fi
|
|
|
|
if test -n "$xenconsoled_pid" -a -n "$xenstored_pid";
|
|
then
|
|
echo "xencommons are running as pids $pids."
|
|
return 0
|
|
fi
|
|
if test -z "$xenconsoled_pid" -a -z "$xenstored_pid";
|
|
then
|
|
echo "xencommons are not running."
|
|
return 0
|
|
fi
|
|
|
|
if test -n $xenstored_pid; then
|
|
echo "xenstored is running as pid $xenstored_pid."
|
|
else
|
|
echo "xenstored is not running."
|
|
fi
|
|
if test -n $xenconsoled_pid; then
|
|
echo "xenconsoled is running as pid $xenconsoled_pid."
|
|
else
|
|
echo "xenconsoled is not running."
|
|
fi
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|