[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.