Mailing List Archive

[xen-unstable] netbsd: Add boot-time init scripts.
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1276064310 -3600
# Node ID 87fe942a90b1d96b5e378fa5b221fd8eeba439da
# Parent f52479f044c0d466bca3480754761982816c575b
netbsd: Add boot-time init scripts.

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
---
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@lists.xensource.com
http://lists.xensource.com/xen-changelog