diff -r 10776eef6fd9 Config.mk --- a/Config.mk Tue Jun 08 10:09:24 2010 +0200 +++ b/Config.mk Tue Jun 08 17:56:22 2010 +0200 @@ -29,7 +29,7 @@ include $(XEN_ROOT)/config/$(XEN_TARGET_ SHAREDIR ?= $(PREFIX)/share DOCDIR ?= $(SHAREDIR)/doc/xen MANDIR ?= $(SHAREDIR)/man -BASH_COMPLETION_DIR ?= /etc/bash_completion.d +BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d ifneq ($(EXTRA_PREFIX),) EXTRA_INCLUDES += $(EXTRA_PREFIX)/include @@ -111,7 +111,9 @@ define buildmakevars2file-closure echo "PRIVATE_BINDIR=\"$(PRIVATE_BINDIR)\"" >> $(1); \ echo "XENFIRMWAREDIR=\"$(XENFIRMWAREDIR)\"" >> $(1); \ echo "XEN_CONFIG_DIR=\"$(XEN_CONFIG_DIR)\"" >> $(1); \ - echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> $(1) + echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> $(1); \ + echo "XEN_RCD_DIR=\"$(XEN_RCD_DIR)\"" >> $(1); \ + echo "PYTHONPATH=\"$(LIBDIR)/$(PYTHON)/site-packages\"" >> $(1) endef ifeq ($(debug),y) diff -r 10776eef6fd9 config/Linux.mk --- a/config/Linux.mk Tue Jun 08 10:09:24 2010 +0200 +++ b/config/Linux.mk Tue Jun 08 17:56:22 2010 +0200 @@ -10,3 +10,7 @@ endif XKERNELS := $(foreach kernel, $(KERNELS), \ $(patsubst buildconfigs/mk.%,%, \ $(wildcard buildconfigs/mk.$(kernel))) ) + +# Some distros have /etc/rc.d (e.g. Slackware) while others +# have /etc/init.d (e.g. SuSE) +XEN_RCD_DIR = $(CONFIG_DIR)/$(shell test -d /etc/rc.d && echo "rc.d" || echo "init.d") diff -r 10776eef6fd9 config/NetBSD.mk --- a/config/NetBSD.mk Tue Jun 08 10:09:24 2010 +0200 +++ b/config/NetBSD.mk Tue Jun 08 17:56:22 2010 +0200 @@ -7,6 +7,8 @@ LIBLEAFDIR_x86_64 = lib LIBEXEC = $(PREFIX)/libexec PRIVATE_BINDIR = $(BINDIR) +XEN_RCD_DIR = $(CONFIG_DIR)/rc.d + WGET = ftp diff -r 10776eef6fd9 tools/blktap2/control/Makefile --- a/tools/blktap2/control/Makefile Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/blktap2/control/Makefile Tue Jun 08 17:56:22 2010 +0200 @@ -2,7 +2,6 @@ XEN_ROOT := ../../../ include $(XEN_ROOT)/tools/Rules.mk IBIN = tap-ctl -INST_DIR = /usr/sbin CFLAGS += -Werror CFLAGS += -Wno-unused @@ -45,8 +44,8 @@ libblktapctl.a: $(CTL_OBJS) ar r $@ $^ install: all - $(INSTALL_DIR) -p $(DESTDIR)$(INST_DIR) - $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(INST_DIR) + $(INSTALL_DIR) -p $(DESTDIR)$(SBINDIR) + $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(SBINDIR) clean: rm -f $(OBJS) $(DEPS) $(IBIN) $(LIBS) diff -r 10776eef6fd9 tools/blktap2/control/tap-ctl-allocate.c --- a/tools/blktap2/control/tap-ctl-allocate.c Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/blktap2/control/tap-ctl-allocate.c Tue Jun 08 17:56:22 2010 +0200 @@ -36,7 +36,6 @@ #include #include #include -#include #include "tap-ctl.h" #include "blktap2.h" @@ -140,7 +139,7 @@ tap_ctl_check_environment(void) while (fscanf(f, "%d %256s", &minor, name) == 2) if (!strcmp(name, BLKTAP2_CONTROL_NAME)) { err = tap_ctl_make_device(BLKTAP2_CONTROL_DEVICE, - MISC_MAJOR, + 0, minor, S_IFCHR | 0600); goto out; } diff -r 10776eef6fd9 tools/blktap2/include/blktaplib.h --- a/tools/blktap2/include/blktaplib.h Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/blktap2/include/blktaplib.h Tue Jun 08 17:56:22 2010 +0200 @@ -33,6 +33,7 @@ #define __BLKTAPLIB_H__ #include +#include #include #include diff -r 10776eef6fd9 tools/hotplug/Linux/Makefile --- a/tools/hotplug/Linux/Makefile Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/hotplug/Linux/Makefile Tue Jun 08 17:56:22 2010 +0200 @@ -64,12 +64,12 @@ install: all install-initd install-scrip .PHONY: install-initd install-initd: - [ -d $(DESTDIR)$(CONFIG_DIR)/init.d ] || $(INSTALL_DIR) $(DESTDIR)$(CONFIG_DIR)/init.d + [ -d $(DESTDIR)$(XEN_RCD_DIR) ] || $(INSTALL_DIR) $(DESTDIR)$(XEN_RCD_DIR) [ -d $(DESTDIR)$(CONFIG_DIR)/sysconfig ] || $(INSTALL_DIR) $(DESTDIR)$(CONFIG_DIR)/sysconfig - $(INSTALL_PROG) $(XEND_INITD) $(DESTDIR)$(CONFIG_DIR)/init.d - $(INSTALL_PROG) $(XENDOMAINS_INITD) $(DESTDIR)$(CONFIG_DIR)/init.d + $(INSTALL_PROG) $(XEND_INITD) $(DESTDIR)$(CONFIG_DIR)/$(XEN_RCD_DIR) + $(INSTALL_PROG) $(XENDOMAINS_INITD) $(DESTDIR)$(CONFIG_DIR)/$(XEN_RCD_DIR) $(INSTALL_PROG) $(XENDOMAINS_SYSCONFIG) $(DESTDIR)$(CONFIG_DIR)/sysconfig/xendomains - $(INSTALL_PROG) $(XENCOMMONS_INITD) $(DESTDIR)$(CONFIG_DIR)/init.d + $(INSTALL_PROG) $(XENCOMMONS_INITD) $(DESTDIR)$(CONFIG_DIR)/$(XEN_RCD_DIR) $(INSTALL_PROG) $(XENCOMMONS_SYSCONFIG) $(DESTDIR)$(CONFIG_DIR)/sysconfig/xencommons .PHONY: install-scripts diff -r 10776eef6fd9 tools/hotplug/Linux/vif-setup --- a/tools/hotplug/Linux/vif-setup Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/hotplug/Linux/vif-setup Tue Jun 08 17:56:22 2010 +0200 @@ -1,9 +1,12 @@ #!/bin/bash +DIR=$(dirname "$0") +. "${DIR}/hotplugpath.sh" + if test "$script" then exec "$script" $* else - exec /etc/xen/scripts/vif-bridge $* + exec "${XEN_SCRIPT_DIR}/vif-bridge $* fi diff -r 10776eef6fd9 tools/hotplug/NetBSD/Makefile --- a/tools/hotplug/NetBSD/Makefile Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/hotplug/NetBSD/Makefile Tue Jun 08 17:56:22 2010 +0200 @@ -8,6 +8,7 @@ XEN_SCRIPTS += vif-bridge 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 @@ all: 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)$(XEN_RCD_DIR) + set -e; for i in $(XEN_RCD_PROG); \ + do \ + $(INSTALL_PROG) $$i $(DESTDIR)$(XEN_RCD_DIR); \ + done + $(INSTALL_DATA) ../common/hotplugpath.sh $(DESTDIR)$(XEN_RCD_DIR)/xen-hotplugpath.sh + .PHONY: clean clean: diff -r 10776eef6fd9 tools/hotplug/NetBSD/rc.d/xencommons --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xencommons Tue Jun 08 17:56:22 2010 +0200 @@ -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 10776eef6fd9 tools/hotplug/NetBSD/rc.d/xend --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xend Tue Jun 08 17:56:22 2010 +0200 @@ -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 10776eef6fd9 tools/hotplug/NetBSD/rc.d/xendomains --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/hotplug/NetBSD/rc.d/xendomains Tue Jun 08 17:56:22 2010 +0200 @@ -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" diff -r 10776eef6fd9 tools/misc/Makefile --- a/tools/misc/Makefile Tue Jun 08 10:09:24 2010 +0200 +++ b/tools/misc/Makefile Tue Jun 08 17:56:22 2010 +0200 @@ -39,10 +39,10 @@ build: $(TARGETS) install: build $(INSTALL_DIR) $(DESTDIR)$(BINDIR) $(INSTALL_DIR) $(DESTDIR)$(SBINDIR) - $(INSTALL_DIR) $(DESTDIR)$(CONFIG_DIR)/init.d + $(INSTALL_DIR) $(DESTDIR)$(XEN_RCD_DIR) $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(BINDIR) $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(SBINDIR) - $(INSTALL_PROG) xen-watchdog $(DESTDIR)$(CONFIG_DIR)/init.d + $(INSTALL_PROG) xen-watchdog $(DESTDIR)$(XEN_RCD_DIR) set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d install-recurse; done .PHONY: clean