[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] netbsd: Add boot-time init scripts.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1276064310 -3600 # Node ID 87fe942a90b1d96b5e378fa5b221fd8eeba439da # Parent f52479f044c0d466bca3480754761982816c575b netbsd: Add boot-time init scripts. Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> --- tools/hotplug/NetBSD/Makefile | 12 ++- tools/hotplug/NetBSD/rc.d/xencommons | 124 ++++++++++++++++++++++++++++++++ tools/hotplug/NetBSD/rc.d/xend | 21 +++++ tools/hotplug/NetBSD/rc.d/xendomains | 133 +++++++++++++++++++++++++++++++++++ 4 files changed, 289 insertions(+), 1 deletion(-) diff -r f52479f044c0 -r 87fe942a90b1 tools/hotplug/NetBSD/Makefile --- a/tools/hotplug/NetBSD/Makefile Wed Jun 09 06:59:52 2010 +0100 +++ b/tools/hotplug/NetBSD/Makefile Wed Jun 09 07:18:30 2010 +0100 @@ -8,6 +8,7 @@ XEN_SCRIPTS += vif-ip XEN_SCRIPTS += vif-ip XEN_SCRIPT_DATA = +XEN_RCD_PROG = rc.d/xencommons rc.d/xend rc.d/xendomains .PHONY: all all: @@ -16,7 +17,7 @@ build: build: .PHONY: install -install: all install-scripts +install: all install-scripts install-rcd .PHONY: install-scripts install-scripts: @@ -30,5 +31,14 @@ install-scripts: $(INSTALL_DATA) $$i $(DESTDIR)$(XEN_SCRIPT_DIR); \ done +.PHONY: install-rcd +install-rcd: + $(INSTALL_DIR) $(DESTDIR)$(CONFIG_DIR)/rc.d + set -e; for i in $(XEN_RCD_PROG); \ + do \ + $(INSTALL_PROG) $$i $(DESTDIR)$(CONFIG_DIR)/rc.d; \ + done + $(INSTALL_DATA) ../common/hotplugpath.sh $(DESTDIR)$(CONFIG_DIR)/rc.d/xen-hotplugpath.sh + .PHONY: clean clean: diff -r f52479f044c0 -r 87fe942a90b1 tools/hotplug/NetBSD/rc.d/xencommons --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xencommons Wed Jun 09 07:18:30 2010 +0100 @@ -0,0 +1,124 @@ +#!/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" + +xen_precmd() +{ + mkdir -p /var/run/xend || exit 1 + mkdir -p /var/run/xend/boot || exit 1 + mkdir -p /var/run/xenstored || exit 1 +} + +xen_startcmd() +{ + printf "Starting xenservices: xenstored, xenconsoled, xenbackendd.\n" + 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} + sleep 5 + + XENCONSOLED_ARGS="" + if [ -n "${XENCONSOLED_TRACE}" ]; then + XENCONSOLED_ARGS="${XENCONSOLED_ARGS} --log=${XENCONSOLED_TRACE}" + fi + + ${SBINDIR}/xenconsoled ${XENCONSOLED_ARGS} + + XENBACKENDD_ARGS="" + if [ -n "${XENBACKENDD_DEBUG}" ]; then + XENBACKENDD_ARGS="${XENBACKENDD_ARGS} -d" + fi + + ${SBINDIR}/xenbackendd ${XENBACKENDD_ARGS} +} + +xen_stop() +{ + pids="" + printf "Stopping xencommons" + + rc_pid=$(check_pidfile ${XENBACKENDD_PIDFILE} ${SBINDIR}/xenbackendd) + pids="$pids $rc_pid" + rc_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled) + pids="$pids $rc_pid" + rc_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored) + pids="$pids $rc_pid" + + kill -${sig_stop:-TERM} $pids + wait_for_pids $pids + + printf ".\n" +} + +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 + + xenbackend_pid=$(check_pidfile ${XENBACKENDD_PIDFILE} ${SBINDIR}/xenbackendd) + if test -n ${xenbackend_pid}; then + pids="$pids $xenbackend_pid" + fi + + if test -n "$xenbackend_pid" -a -n "$xenconsoled_pid" -a -n "$xenstored_pid"; + then + echo "xencommons are running as pids $pids." + return 0 + fi + if test -z "$xenbackend_pid" -a -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 + if test -n $xenbackend_pid; then + echo "xenbackendd is running as pid $xenbackend_pid." + else + echo "xenbackendd is not running." + fi +} + +load_rc_config $name +run_rc_command "$1" diff -r f52479f044c0 -r 87fe942a90b1 tools/hotplug/NetBSD/rc.d/xend --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xend Wed Jun 09 07:18:30 2010 +0100 @@ -0,0 +1,21 @@ +#!/bin/sh +# +# PROVIDE: xend +# REQUIRE: xencommons + +. /etc/rc.subr + +DIR=$(dirname "$0") +. "${DIR}/xen-hotplugpath.sh" + +LD_LIBRARY_PATH="${LIBDIR}" +export LD_LIBRARY_PATH PYTHONPATH + +name="xend" +rcvar=$name +command="${SBINDIR}/xend" +start_cmd="echo Starting ${name}. && PATH=${PATH}:${SBINDIR} ${command} start" +pidfile="/var/run/xend.pid" + +load_rc_config $name +run_rc_command "$1" diff -r f52479f044c0 -r 87fe942a90b1 tools/hotplug/NetBSD/rc.d/xendomains --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xendomains Wed Jun 09 07:18:30 2010 +0100 @@ -0,0 +1,133 @@ +#!/bin/sh +# +# PROVIDE: xendomains +# REQUIRE: xend +# KEYWORD: shutdown +# +# xendomains This required variable is a whitespace-separated +# list of domains, e.g., xendomains="dom1 dom2 dom3". +# +# xendomains_config This optional variable is a format string that +# represents the path to the configuration file for +# each domain. "%s" is substituted with the name of +# the domain. The default is "@PKG_SYSCONFDIR@/%s". +# +# xendomains_prehook This optional variable is a format string that +# represents the command to run, if it exists, before +# starting each domain. "%s" is substituted with the +# name of the domain. The default is +# "@PKG_SYSCONFDIR@/%s-pre". +# +# xendomains_posthook This optional variable is a format string that +# represents the command to run, if it exists, after +# stopping each domain. "%s" is substituted with the +# name of the domain. The default is +# "@PKG_SYSCONFDIR@/%s-post". +# + +. /etc/rc.subr + +DIR=$(dirname "$0") +. "${DIR}/xen-hotplugpath.sh" + +LD_LIBRARY_PATH="${LIBDIR}" +export LD_LIBRARY_PATH + +name="xendomains" +ctl_command="${SBINDIR}/xl" +start_cmd="xendomains_start" +stop_cmd="xendomains_stop" +list_cmd="xendomains_list" +extra_commands="list" +required_files="/kern/xen/privcmd" + +xendomains_start() +{ + [ -n "$xendomains" ] || return + + echo "Starting xen domains." + for domain in $xendomains; do + case "$domain" in + "") continue ;; + esac + + # Start off by running the pre-hook script if it's present. + if [ -n "${xendomains_prehook}" ]; then + cmdline=`printf "${xendomains_prehook}" $domain` + cmd="${cmdline%% *}" + if [ -x "$cmd" ]; then + $cmdline || echo "Pre-hook \`\`$cmdline'' failed... skipping $domain." + continue + fi + fi + + # Ask xend to create the domain. + if [ -n "${xendomains_config}" ]; then + file=`printf "${xendomains_config}" $domain` + if [ -f "$file" ]; then + ${ctl_command} create "$file" + fi + fi + done +} + +xendomains_list() { + # Output a whitespace-separated list of live guest domains. + ${ctl_command} list | awk ' + (FNR <= 2) { next } + ($5 !~ /s/) { s = s " " $1 } + END { sub(" *", "", s); print s }' +} + +xendomains_stop() +{ + # Determine an appropriate timeout waiting for all domains to + # stop -- always wait at least 60s, and add 5s per active domain. + # + numdomains=$(xendomains_list | awk '{ print NF }') + [ $numdomains -gt 0 ] || return + timeout=$((60 + numdomains * 5)) + + # Ask xend to stop every domain, and poll xend every 10s up to the + # timeout period to check if all the domains are stopped. We + # consider a domain in the "s" (shutdown) state to be stopped. + # + echo "Stopping xen domains." + for domain in $(xendomains_list); do + ${ctl_command} shutdown --halt $domain + done + while [ $timeout -gt 0 ]; do + livedomains=$(xendomains_list) + [ -n "$livedomains" ] || break + timeout=$((timeout - 10)) + sleep 10 + done + livedomains=$(xendomains_list) + if [ -n "$livedomains" ]; then + echo "Failed to stop: $livedomains" + else + echo "All domains stopped." + fi + + # Finish off by running the post-hook script if it's present. + for domain in $xendomains; do + case "$domain" in + "") continue ;; + esac + if [ -n "${xendomains_posthook}" ]; then + cmdline=`printf "${xendomains_posthook}" $domain` + cmd="${cmdline%% *}" + if [ -x "$cmd" ]; then + $cmdline || echo "Post-hook \`\`$cmdline'' failed." + fi + fi + done +} + +load_rc_config $name + +: ${xendomains_config="${XEN_CONFIG_DIR}/%s"} +: ${xendomains_prehook="${XEN_CONFIG_DIR}/%s-pre"} +: ${xendomains_posthook="${XEN_CONFIG_DIR}/%s-post"} + +run_rc_command "$1" _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |