[Pkg-xen-changes] r955 - in trunk/xen/debian: . templates
Bastian Blank
waldi at alioth.debian.org
Tue Jan 31 13:09:31 UTC 2012
Author: waldi
Date: Tue Jan 31 13:09:30 2012
New Revision: 955
Log:
* debian/changelog: Update.
* debian/rules.real
- Call dh_installexamples always.
- Install xen-utils-common.
* debian/templates/control.main.in: Add xen-utils-common.
* debian/xen-utils-common.*: Add.
Added:
trunk/xen/debian/xen-utils-common.README.Debian
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.README.Debian
trunk/xen/debian/xen-utils-common.examples
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.examples
trunk/xen/debian/xen-utils-common.install
- copied, changed from r937, trunk/xen-common/debian/xen-utils-common.install
trunk/xen/debian/xen-utils-common.postinst
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.postinst
trunk/xen/debian/xen-utils-common.postrm
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.postrm
trunk/xen/debian/xen-utils-common.preinst
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.preinst
trunk/xen/debian/xen-utils-common.xen.default
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.xen.default
trunk/xen/debian/xen-utils-common.xend.default
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.xend.default
trunk/xen/debian/xen-utils-common.xend.init
- copied unchanged from r944, trunk/xen-common/debian/xen-utils-common.xend.init
trunk/xen/debian/xen-utils-common.xendomains.default
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.xendomains.default
trunk/xen/debian/xen-utils-common.xendomains.init
- copied unchanged from r937, trunk/xen-common/debian/xen-utils-common.xendomains.init
Modified:
trunk/xen/debian/changelog
trunk/xen/debian/rules.real
trunk/xen/debian/templates/control.main.in
Modified: trunk/xen/debian/changelog
==============================================================================
--- trunk/xen/debian/changelog Tue Jan 31 13:06:27 2012 (r954)
+++ trunk/xen/debian/changelog Tue Jan 31 13:09:30 2012 (r955)
@@ -1,3 +1,11 @@
+xen (4.1.2-3) UNRELEASED; urgency=low
+
+ * Merge xen-common source package.
+ * Remove xend wrapper, it should not be called by users.
+ * Support xl in init script.
+
+ -- Bastian Blank <waldi at debian.org> Tue, 31 Jan 2012 14:07:41 +0100
+
xen (4.1.2-2) unstable; urgency=low
[ Jon Ludlam ]
Modified: trunk/xen/debian/rules.real
==============================================================================
--- trunk/xen/debian/rules.real Tue Jan 31 13:06:27 2012 (r954)
+++ trunk/xen/debian/rules.real Tue Jan 31 13:09:30 2012 (r955)
@@ -25,6 +25,7 @@
binary-arch-flavour: install-hypervisor_$(ARCH)_$(FLAVOUR)
binary-indep: install-docs
+binary-indep: install-utils-common
build-arch: $(STAMPS_DIR)/build-utils_$(ARCH)
build-flavour: $(STAMPS_DIR)/build-hypervisor_$(ARCH)_$(FLAVOUR)
@@ -96,6 +97,7 @@
install-base:
dh_installchangelogs -XChangelog
dh_installdocs
+ dh_installexamples
dh_compress
dh_fixperms
dh_installdeb
@@ -213,6 +215,21 @@
dh_shlibdeps
+$(MAKE_SELF) install-base
+install-utils-common: SOURCE_DIR = $(BUILD_DIR)/build-docs
+install-utils-common: DIR = $(BUILD_DIR)/install-utils-common
+install-utils-common: PACKAGE_NAME = xen-utils-common
+install-utils-common: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-utils-common: export DESTDIR = $(CURDIR)/$(DIR)
+install-utils-common: $(STAMPS_DIR)/build-docs
+ dh_testdir
+ dh_testroot
+ dh_prep
+ $(MAKE) -C $(SOURCE_DIR)/tools/examples install-configs
+ $(MAKE) -C $(SOURCE_DIR)/tools/hotplug/common install-scripts
+ $(MAKE) -C $(SOURCE_DIR)/tools/hotplug/Linux install-udev install-scripts UDEV_RULES_DIR=/lib/udev
+ dh_install --sourcedir=$(DIR)
+ +$(MAKE_SELF) install-base
+
install-xenstore-utils_$(ARCH): DIR = $(BUILD_DIR)/install-utils_$(ARCH)
install-xenstore-utils_$(ARCH): PACKAGE_NAME = xenstore-utils
install-xenstore-utils_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
Modified: trunk/xen/debian/templates/control.main.in
==============================================================================
--- trunk/xen/debian/templates/control.main.in Tue Jan 31 13:06:27 2012 (r954)
+++ trunk/xen/debian/templates/control.main.in Tue Jan 31 13:09:30 2012 (r955)
@@ -49,3 +49,10 @@
This package contains the ocaml findlib packages for compiling applications
that are designed to control the Xen hypervisor.
+Package: xen-utils-common
+Architecture: all
+Depends: gawk, lsb-base, udev, xenstore-utils, ${misc:Depends}
+Description: Xen administrative tools - common files
+ The userspace tools to manage a system virtualized through the Xen virtual
+ machine monitor.
+
Copied: trunk/xen/debian/xen-utils-common.README.Debian (from r937, trunk/xen-common/debian/xen-utils-common.README.Debian)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.README.Debian Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.README.Debian)
@@ -0,0 +1,53 @@
+Xen for Debian
+==============
+
+Config behaviour
+----------------
+
+The Debian packages changes the behaviour of some config options.
+
+The options "kernel", "initrd" and "loader" searches in the Xen private boot
+directory (/usr/lib/xen-$version/boot) first. "bootloader" and "device_model"
+also searches the Xen private bin directory (/usr/lib/xen-$version/bin). This
+means that the following entries will properly find anything:
+ loader = 'hvmloader'
+ bootloader = 'pygrub'
+
+Network setup
+-------------
+
+The Debian package of Xen don't change the network setup in any way. This
+differs from the upstream version, which overwrites the main network card
+(eth0) with a bridge setup and may break the network at this point..
+
+To setup a bridge please follow the instructions in the manpage for
+bridge-utils-interfaces(5).
+
+You can also change the /etc/xen/xend-config.sxp file and re-enable the Xen
+included network setup by adding
+ (network-script network-bridge)
+to the file. But please note that this may or may not work.
+
+Loop devices
+------------
+
+If you plan hosting virtual domains with file backed block devices (ie. the
+ones xen-tools creates by default) be careful about two issues:
+
+1. Maximum number of loop devices
+ By default the loop driver supports a maximum of 8 loop devices. Of
+ course since every Xen domain uses at least two (one for the data and one
+ for the swap) this number is absolutely insufficient. You should increase
+ it by adding a file named local-loop in /etc/modprobe.d containing the
+ string "options loop max_loop=128", if the loop driver is compiled as a
+ module, or by appending the string max_loop=128 to your kernel parameters
+ if the driver is in-kernel. Of course you can increase or decrease the
+ number 128 as you see fit.
+
+2. Driver loading (only if loop is compiled as a module)
+ Normally the loop driver gets loaded when the first loop device is
+ accessed. When using udev, though, the loop devices get created only
+ after the driver gets loaded. This means that Xen will fail if the loop
+ driver is not already loaded when it tries to start a file-backed virtual
+ domain. To fix this just add "loop" in your /etc/modules file, thus
+ forcing it to be loaded at boot time.
Copied: trunk/xen/debian/xen-utils-common.examples (from r937, trunk/xen-common/debian/xen-utils-common.examples)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.examples Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.examples)
@@ -0,0 +1,2 @@
+debian/tmp/etc/xen/cpupool*
+debian/tmp/etc/xen/xm*
Copied and modified: trunk/xen/debian/xen-utils-common.install (from r937, trunk/xen-common/debian/xen-utils-common.install)
==============================================================================
--- trunk/xen-common/debian/xen-utils-common.install Wed Oct 26 23:11:27 2011 (r937, copy source)
+++ trunk/xen/debian/xen-utils-common.install Tue Jan 31 13:09:30 2012 (r955)
@@ -2,5 +2,5 @@
etc/xen/xl*
etc/xen/xend*
lib/udev/rules.d/*.rules
-usr/lib/xen-common
-usr/sbin
+#usr/lib/xen-common
+#usr/sbin
Copied: trunk/xen/debian/xen-utils-common.postinst (from r937, trunk/xen-common/debian/xen-utils-common.postinst)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.postinst Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.postinst)
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+configure)
+ install -d -m 0700 /var/lib/xenstored
+ install -d -m 2750 -g adm /var/log/xen
+ ;;
+
+abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+
+*)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0
Copied: trunk/xen/debian/xen-utils-common.postrm (from r937, trunk/xen-common/debian/xen-utils-common.postrm)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.postrm Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.postrm)
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+purge)
+ # Remove udev rules symlink
+ L="/etc/udev/rules.d/z60_xen-backend.rules"
+ [ -L "$L" ] && rm "$L"
+
+ XENSTORED_DIR="/var/lib/xenstored"
+ [ -d "${XENSTORED_DIR}" ] && rm -r "${XENSTORED_DIR}"
+ ;;
+
+remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+ ;;
+
+*)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0
Copied: trunk/xen/debian/xen-utils-common.preinst (from r937, trunk/xen-common/debian/xen-utils-common.preinst)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.preinst Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.preinst)
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+case "$1" in
+install|upgrade)
+ if [ -L "/etc/udev/rules.d/z60_xen-backend.rules" ]; then
+ rm -f "/etc/udev/rules.d/z60_xen-backend.rules"
+ fi
+ ;;
+
+abort-upgrade)
+ ;;
+
+*)
+ echo "preinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0
Copied: trunk/xen/debian/xen-utils-common.xen.default (from r937, trunk/xen-common/debian/xen-utils-common.xen.default)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.xen.default Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.xen.default)
@@ -0,0 +1,7 @@
+# Configuration for Xen system
+# ----------------------------
+
+# There exists several tool stacks to configure a Xen system.
+# …
+# Attention: You need to reboot after changing this!
+TOOLSTACK=
Copied: trunk/xen/debian/xen-utils-common.xend.default (from r937, trunk/xen-common/debian/xen-utils-common.xend.default)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.xend.default Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.xend.default)
@@ -0,0 +1,2 @@
+XENCONSOLED_ARGS=
+XENSTORED_ARGS=
Copied: trunk/xen/debian/xen-utils-common.xend.init (from r944, trunk/xen-common/debian/xen-utils-common.xend.init)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.xend.init Tue Jan 31 13:09:30 2012 (r955, copy of r944, trunk/xen-common/debian/xen-utils-common.xend.init)
@@ -0,0 +1,178 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: xend
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: XEN control daemon
+# Description: XEN control daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DESC="Xen daemons"
+
+. /lib/init/vars.sh
+. /lib/lsb/init-functions
+
+ROOT=$(/usr/lib/xen-common/bin/xen-dir 2>/dev/null)
+if [ $? -ne 0 ]; then
+ log_warning_msg "Not running within Xen or no compatible utils"
+ exit 0
+fi
+TOOLSTACK=$(/usr/lib/xen-common/bin/xen-toolstack 2>/dev/null)
+if [ $? -ne 0 ]; then
+ log_warning_msg "No usable Xen toolstack selected"
+ exit 0
+fi
+
+[ -e "$ROOT"/bin/xend ] && XEND="$ROOT"/bin/xend
+XENCONSOLED="$ROOT"/bin/xenconsoled
+XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid"
+XENSTORED="$ROOT"/bin/xenstored
+XENSTORED_DIR="/var/run/xenstored"
+XENSTORED_PIDFILE="/var/run/xenstore.pid"
+
+[ -r /etc/default/xend ] && . /etc/default/xend
+
+modules_setup()
+{
+ modprobe xenfs 2>/dev/null
+ modprobe xen-evtchn 2>/dev/null
+}
+
+xenfs_setup()
+{
+ [ -e "/proc/xen/capabilities" ] && return 0
+ log_progress_msg "xenfs"
+ [ -d "/proc/xen" ] || return 1
+ mount -t xenfs xenfs /proc/xen || return 1
+ return 0
+}
+
+capability_check()
+{
+ [ -e "/proc/xen/capabilities" ] || return 1
+ grep -q "control_d" /proc/xen/capabilities || return 1
+ return 0
+}
+
+xend_start()
+{
+ if [ -z "$XEND" ] || [ "$(basename "$TOOLSTACK")" != xm ]; then
+ return 0
+ fi
+
+ log_progress_msg "xend"
+ $XEND status && return 1
+ $XEND start || return 2
+
+ i=0
+ while [ $i -lt 10 ]; do
+ $XEND status && return 0 || true
+ i=$(($i + 1))
+ sleep 1
+ done
+ return 2
+}
+
+xend_stop()
+{
+ [ -z "$XEND" ] && return 0
+ log_progress_msg "xend"
+ $XEND status || return 0
+ $XEND stop || return 1
+}
+
+xenconsoled_start()
+{
+ log_progress_msg "xenconsoled"
+ start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --pidfile "$XENCONSOLED_PIDFILE" --exec "$XENCONSOLED" -- \
+ $XENCONSOLED_ARGS --pid-file="$XENCONSOLED_PIDFILE" \
+ || return 2
+}
+
+xenstored_start()
+{
+ log_progress_msg "xenstored"
+ start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" --test > /dev/null \
+ || return 1
+ [ -d "$XENSTORED_DIR" ] || mkdir -p "$XENSTORED_DIR"
+ export XENSTORED_ROOTDIR="$XENSTORED_DIR"
+ start-stop-daemon --start --quiet --pidfile "$XENSTORED_PIDFILE" --exec "$XENSTORED" -- \
+ $XENSTORED_ARGS --pid-file="$XENSTORED_PIDFILE" \
+ || return 2
+}
+
+case "$1" in
+ start)
+ log_daemon_msg "Starting $DESC"
+ modules_setup
+ xenfs_setup
+ case "$?" in
+ 0) ;;
+ *) log_end_msg 1; exit ;;
+ esac
+ capability_check
+ case "$?" in
+ 0) ;;
+ *) log_end_msg 255; exit ;;
+ esac
+ xenstored_start
+ case "$?" in
+ 0|1) ;;
+ *) log_end_msg 1; exit ;;
+ esac
+ xenconsoled_start
+ case "$?" in
+ 0|1) ;;
+ *) log_end_msg 1; exit ;;
+ esac
+ xend_start
+ case "$?" in
+ 0|1) ;;
+ *) log_end_msg 1; exit ;;
+ esac
+ log_end_msg 0
+ ;;
+ stop)
+ capability_check
+ case "$?" in
+ 0) ;;
+ *) exit ;;
+ esac
+ log_daemon_msg "Stopping $DESC"
+ xend_stop
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ *) log_end_msg 1 ;;
+ esac
+ ;;
+ restart|force-reload)
+ capability_check
+ case "$?" in
+ 0) ;;
+ *) exit ;;
+ esac
+ log_daemon_msg "Restarting $DESC"
+ xend_stop
+ case "$?" in
+ 0|1)
+ xend_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ *) log_end_msg 1 ;;
+ esac
+ ;;
+ *) log_end_msg 1 ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+exit 0
Copied: trunk/xen/debian/xen-utils-common.xendomains.default (from r937, trunk/xen-common/debian/xen-utils-common.xendomains.default)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.xendomains.default Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.xendomains.default)
@@ -0,0 +1,137 @@
+## Path: System/xen
+## Description: xen domain start/stop on boot
+## Type: string
+## Default:
+#
+# The xendomains script can send SysRq requests to domains on shutdown.
+# If you don't want to MIGRATE, SAVE, or SHUTDOWN, this may be a possibility
+# to do a quick and dirty shutdown ("s e i u o") or at least sync the disks
+# of the domains ("s").
+#
+XENDOMAINS_SYSRQ=""
+
+## Type: integer
+## Default: 100000
+#
+# If XENDOMAINS_SYSRQ is set, this variable determines how long to wait
+# (in microseconds) after each SysRq, so the domain has a chance to react.
+# If you want to a quick'n'dirty shutdown via SysRq, you may want to set
+# it to a relatively high value (1200000).
+#
+XENDOMAINS_USLEEP=100000
+
+## Type: integer
+## Default: 5000000
+#
+# When creating a guest domain, it is sensible to allow a little time for it
+# to get started before creating another domain or proceeding through the
+# boot process. Without this, the booting guests will thrash the disk as they
+# start up. This timeout (in microseconds) specifies the delay after guest
+# domain creation.
+#
+XENDOMAINS_CREATE_USLEEP=5000000
+
+## Type: string
+## Default: ""
+#
+# Set this to a non-empty string if you want to migrate virtual machines
+# on shutdown. The string will be passed to the xm migrate DOMID command
+# as is: It should contain the target IP address of the physical machine
+# to migrate to and optionally parameters like --live. Leave empty if
+# you don't want to try virtual machine relocation on shutdown.
+# If migration succeeds, neither SAVE nor SHUTDOWN will be executed for
+# that domain.
+#
+XENDOMAINS_MIGRATE=""
+
+## Type: string
+## Default: /var/lib/xen/save
+#
+# Directory to save running domains to when the system (dom0) is
+# shut down. Will also be used to restore domains from if # XENDOMAINS_RESTORE
+# is set (see below). Leave empty to disable domain saving on shutdown
+# (e.g. because you rather shut domains down).
+# If domain saving does succeed, SHUTDOWN will not be executed.
+#
+XENDOMAINS_SAVE=/var/lib/xen/save
+
+## Type: string
+## Default: "--halt --wait"
+#
+# If neither MIGRATE nor SAVE were enabled or if they failed, you can
+# try to shut down a domain by sending it a shutdown request. To do this,
+# set this to "--halt --wait". Omit the "--wait" flag to avoid waiting
+# for the domain to be really down. Leave empty to skip domain shutdown.
+#
+XENDOMAINS_SHUTDOWN="--halt --wait"
+
+## Type: string
+## Default: "--all --halt --wait"
+#
+# After we have gone over all virtual machines (resp. all automatically
+# started ones, see XENDOMAINS_AUTO_ONLY below) in a loop and sent SysRq,
+# migrated, saved and/or shutdown according to the settings above, we
+# might want to shutdown the virtual machines that are still running
+# for some reason or another. To do this, set this variable to
+# "--all --halt --wait", it will be passed to xm shutdown.
+# Leave it empty not to do anything special here.
+# (Note: This will hit all virtual machines, even if XENDOMAINS_AUTO_ONLY
+# is set.)
+#
+XENDOMAINS_SHUTDOWN_ALL="--all --halt --wait"
+
+## Type: boolean
+## Default: true
+#
+# This variable determines whether saved domains from XENDOMAINS_SAVE
+# will be restored on system startup.
+#
+XENDOMAINS_RESTORE=true
+
+## Type: string
+## Default: /etc/xen/auto
+#
+# This variable sets the directory where domains configurations
+# are stored that should be started on system startup automatically.
+# Leave empty if you don't want to start domains automatically
+# (or just don't place any xen domain config files in that dir).
+# Note that the script tries to be clever if both RESTORE and AUTO are
+# set: It will first restore saved domains and then only start domains
+# in AUTO which are not running yet.
+# Note that the name matching is somewhat fuzzy.
+#
+XENDOMAINS_AUTO=/etc/xen/auto
+
+## Type: boolean
+## Default: false
+#
+# If this variable is set to "true", only the domains started via config
+# files in XENDOMAINS_AUTO will be treated according to XENDOMAINS_SYSRQ,
+# XENDOMAINS_MIGRATE, XENDOMAINS_SAVE, XENDMAINS_SHUTDOWN; otherwise
+# all running domains will be.
+# Note that the name matching is somewhat fuzzy.
+#
+XENDOMAINS_AUTO_ONLY=false
+
+## Type: integer
+## Default: 300
+#
+# On xendomains stop, a number of xm commands (xm migrate, save, shutdown,
+# shutdown --all) may be executed. In the worst case, these commands may
+# stall forever, which will prevent a successful shutdown of the machine.
+# If this variable is non-zero, the script will set up a watchdog timer
+# for every of these xm commands and time it out after the number of seconds
+# specified by this variable.
+# Note that SHUTDOWN_ALL will not be called if no virtual machines or only
+# zombies are still running, so you don't need to enable this timeout just
+# for the zombie case.
+# The setting should be large enough to make sure that migrate/save/shutdown
+# can succeed. If you do live migrations, keep in mind that live migration
+# of a 1GB machine over Gigabit ethernet may actually take something like
+# 100s (assuming that live migration uses 10% of the network # bandwidth).
+# Depending on the virtual machine, a shutdown may also require a significant
+# amount of time. So better setup this variable to a huge number and hope the
+# watchdog never fires.
+#
+XENDOMAINS_STOP_MAXWAIT=300
+
Copied: trunk/xen/debian/xen-utils-common.xendomains.init (from r937, trunk/xen-common/debian/xen-utils-common.xendomains.init)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xen/debian/xen-utils-common.xendomains.init Tue Jan 31 13:09:30 2012 (r955, copy of r937, trunk/xen-common/debian/xen-utils-common.xendomains.init)
@@ -0,0 +1,454 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides: xendomains
+# Required-Start: $syslog $remote_fs xend
+# Should-Start:
+# Required-Stop: $syslog $remote_fs xend
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start/stop secondary xen domains
+# Description: Start / stop domains automatically when domain 0
+# boots / shuts down.
+### END INIT INFO
+# Default-Enabled: yes
+
+PATH=/usr/lib/xen-common/bin:/sbin:/bin:/usr/sbin:/usr/bin
+VERSION=$(xen-version)
+ROOT=/usr/lib/xen-$VERSION
+
+test "$VERSION" || exit 0
+test -e /proc/xen/privcmd || exit 0
+grep -q "control_d" /proc/xen/capabilities || exit 0
+
+LOCKFILE=/var/lock/xendomains
+XENDOM_CONFIG=/etc/default/xendomains
+
+test -r $XENDOM_CONFIG || { echo "$XENDOM_CONFIG not existing";
+ if [ "$1" = "stop" ]; then exit 0;
+ else exit 6; fi; }
+
+. $XENDOM_CONFIG
+
+_cmd=$1
+declare -a _SMSG
+if test "${_cmd}" = "status"; then
+ _SMSG=(running dead dead unused unknown)
+ _RC_UNUSED=3
+else
+ _SMSG=(done failed failed missed failed skipped unused failed failed)
+ _RC_UNUSED=6
+fi
+. /lib/lsb/init-functions
+echo_rc()
+{
+ if test ${_RC_RV} = 0; then
+ log_success_msg " [${_SMSG[${_RC_RV}]}] "
+ else
+ log_failure_msg " [${_SMSG[${_RC_RV}]}] "
+ fi
+}
+rc_reset() { _RC_RV=0; }
+rc_failed()
+{
+ if test -z "$1"; then
+ _RC_RV=1;
+ elif test "$1" != "0"; then
+ _RC_RV=$1;
+ fi
+ return ${_RC_RV}
+}
+rc_check()
+{
+ return rc_failed $?
+}
+rc_status()
+{
+ rc_failed $?
+ if test "$1" = "-r"; then _RC_RV=0; shift; fi
+ if test "$1" = "-s"; then rc_failed 5; echo_rc; rc_failed 3; shift; fi
+ if test "$1" = "-u"; then rc_failed ${_RC_UNUSED}; echo_rc; rc_failed 3; shift; fi
+ if test "$1" = "-v"; then echo_rc; shift; fi
+ if test "$1" = "-r"; then _RC_RV=0; shift; fi
+ return ${_RC_RV}
+}
+rc_exit() { exit ${_RC_RV}; }
+
+if ! which usleep >&/dev/null
+then
+ usleep()
+ {
+ if [ -n "$1" ]
+ then
+ sleep $(( $1 / 1000000 ))
+ fi
+ }
+fi
+
+# Reset status of this service
+rc_reset
+
+##
+# Returns 0 (success) if the given parameter names a directory, and that
+# directory is not empty.
+#
+contains_something()
+{
+ if [ -d "$1" ] && [ `/bin/ls $1 | wc -l` -gt 0 ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# read name from xen config file
+rdname()
+{
+ NM=$(xm create --quiet --dryrun --defconfig "$1" |
+ sed -n 's/^.*(name \(.*\))$/\1/p')
+}
+
+rdnames()
+{
+ NAMES=
+ if ! contains_something "$XENDOMAINS_AUTO"
+ then
+ return
+ fi
+ for dom in $XENDOMAINS_AUTO/*; do
+ rdname $dom
+ if test -z $NAMES; then
+ NAMES=$NM;
+ else
+ NAMES="$NAMES|$NM"
+ fi
+ done
+}
+
+parseln()
+{
+ name=`echo $1 | cut -d\ -f1`
+ name=${name%% *}
+ rest=`echo $1 | cut -d\ -f2-`
+ read id mem cpu vcpu state tm < <(echo "$rest")
+}
+
+is_running()
+{
+ rdname $1
+ RC=1
+ while read LN; do
+ parseln "$LN"
+ if test $id = 0; then continue; fi
+ case $name in
+ ($NM)
+ RC=0
+ ;;
+ esac
+ done < <(xm list | tail -n +2)
+ return $RC
+}
+
+start()
+{
+ if [ -f $LOCKFILE ]; then
+ echo -n "xendomains already running (lockfile exists)"
+ return;
+ fi
+
+ if [ "$XENDOMAINS_RESTORE" = "true" ] &&
+ contains_something "$XENDOMAINS_SAVE"
+ then
+ mkdir -p $(dirname "$LOCKFILE")
+ touch $LOCKFILE
+ echo -n "Restoring Xen domains:"
+ for dom in $XENDOMAINS_SAVE/*; do
+ echo -n " ${dom##*/}"
+ xm restore $dom
+ if [ $? -ne 0 ]; then
+ rc_failed $?
+ echo -n '!'
+ else
+ # mv $dom ${dom%/*}/.${dom##*/}
+ rm $dom
+ fi
+ done
+ echo .
+ fi
+
+ if contains_something "$XENDOMAINS_AUTO"
+ then
+ touch $LOCKFILE
+ echo -n "Starting auto Xen domains:"
+ # We expect config scripts for auto starting domains to be in
+ # XENDOMAINS_AUTO - they could just be symlinks to files elsewhere
+
+ # Create all domains with config files in XENDOMAINS_AUTO.
+ # TODO: We should record which domain name belongs
+ # so we have the option to selectively shut down / migrate later
+ for dom in $XENDOMAINS_AUTO/*; do
+ echo -n " ${dom##*/}"
+ if is_running $dom; then
+ echo -n "(skip)"
+ else
+ xm create --quiet --defconfig $dom
+ if [ $? -ne 0 ]; then
+ rc_failed $?
+ echo -n '!'
+ else
+ usleep $XENDOMAINS_CREATE_USLEEP
+ fi
+ fi
+ done
+ fi
+}
+
+all_zombies()
+{
+ while read LN; do
+ parseln "$LN"
+ if test $id = 0; then continue; fi
+ if test "$state" != "-b---d" -a "$state" != "-----d"; then
+ return 1;
+ fi
+ done < <(xm list | tail -n +2)
+ return 0
+}
+
+# Wait for max $XENDOMAINS_STOP_MAXWAIT for xm $1 to finish;
+# if it has not exited by that time kill it, so the init script will
+# succeed within a finite amount of time; if $2 is nonnull, it will
+# kill the command as well as soon as no domain (except for zombies)
+# are left (used for shutdown --all).
+watchdog_xm()
+{
+ if test -z "$XENDOMAINS_STOP_MAXWAIT" -o "$XENDOMAINS_STOP_MAXWAIT" = "0"; then
+ exit
+ fi
+ usleep 20000
+ for no in `seq 0 $XENDOMAINS_STOP_MAXWAIT`; do
+ # exit if xm save/migrate/shutdown is finished
+ PSAX=`ps axlw | grep "xm $1" | grep -v grep`
+ if test -z "$PSAX"; then exit; fi
+ echo -n "."; sleep 1
+ # go to kill immediately if there's only zombies left
+ if all_zombies && test -n "$2"; then break; fi
+ done
+ sleep 1
+ read PSF PSUID PSPID PSPPID < <(echo "$PSAX")
+ # kill xm $1
+ kill $PSPID >/dev/null 2>&1
+}
+
+stop()
+{
+ # Collect list of domains to shut down
+ if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
+ rdnames
+ fi
+ echo -n "Shutting down Xen domains:"
+ while read LN; do
+ parseln "$LN"
+ if test $id = 0; then continue; fi
+ echo -n " $name"
+ if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
+ case $name in
+ ($NAMES)
+ # nothing
+ ;;
+ (*)
+ echo -n "(skip)"
+ continue
+ ;;
+ esac
+ fi
+ # XENDOMAINS_SYSRQ chould be something like just "s"
+ # or "s e i u" or even "s e s i u o"
+ # for the latter, you should set XENDOMAINS_USLEEP to 1200000 or so
+ if test -n "$XENDOMAINS_SYSRQ"; then
+ for sysrq in $XENDOMAINS_SYSRQ; do
+ echo -n "(SR-$sysrq)"
+ xm sysrq $id $sysrq
+ if test $? -ne 0; then
+ rc_failed $?
+ echo -n '!'
+ fi
+ # usleep just ignores empty arg
+ usleep $XENDOMAINS_USLEEP
+ done
+ fi
+ if test "$state" = "-b---d" -o "$state" = "-----d"; then
+ echo -n "(zomb)"
+ continue
+ fi
+ if test -n "$XENDOMAINS_MIGRATE"; then
+ echo -n "(migr)"
+ watchdog_xm migrate &
+ WDOG_PID=$!
+ xm migrate $id $XENDOMAINS_MIGRATE
+ if test $? -ne 0; then
+ rc_failed $?
+ echo -n '!'
+ kill $WDOG_PID >/dev/null 2>&1
+ else
+ kill $WDOG_PID >/dev/null 2>&1
+ continue
+ fi
+ fi
+ if test -n "$XENDOMAINS_SAVE"; then
+ echo -n "(save)"
+ watchdog_xm save &
+ WDOG_PID=$!
+ mkdir -p "$XENDOMAINS_SAVE"
+ xm save $id $XENDOMAINS_SAVE/$name
+ if test $? -ne 0; then
+ rc_failed $?
+ echo -n '!'
+ kill $WDOG_PID >/dev/null 2>&1
+ else
+ kill $WDOG_PID >/dev/null 2>&1
+ continue
+ fi
+ fi
+ if test -n "$XENDOMAINS_SHUTDOWN"; then
+ # XENDOMAINS_SHUTDOWN should be "--halt --wait"
+ echo -n "(shut)"
+ watchdog_xm shutdown &
+ WDOG_PID=$!
+ xm shutdown $id $XENDOMAINS_SHUTDOWN
+ if test $? -ne 0; then
+ rc_failed $?
+ echo -n '!'
+ fi
+ kill $WDOG_PID >/dev/null 2>&1
+ fi
+ done < <(xm list | tail -n +2)
+
+ # NB. this shuts down ALL Xen domains (politely), not just the ones in
+ # AUTODIR/*
+ # This is because it's easier to do ;-) but arguably if this script is run
+ # on system shutdown then it's also the right thing to do.
+ if ! all_zombies && test -n "$XENDOMAINS_SHUTDOWN_ALL"; then
+ # XENDOMAINS_SHUTDOWN_ALL should be "--all --halt --wait"
+ echo -n " SHUTDOWN_ALL "
+ watchdog_xm shutdown 1 &
+ WDOG_PID=$!
+ xm shutdown $XENDOMAINS_SHUTDOWN_ALL
+ if test $? -ne 0; then
+ rc_failed $?
+ echo -n '!'
+ fi
+ kill $WDOG_PID >/dev/null 2>&1
+ fi
+
+ # Unconditionally delete lock file
+ rm -f $LOCKFILE
+}
+
+check_domain_up()
+{
+ while read LN; do
+ parseln "$LN"
+ if test $id = 0; then continue; fi
+ case $name in
+ ($1)
+ return 0
+ ;;
+ esac
+ done < <(xm list | tail -n +2)
+ return 1
+}
+
+check_all_auto_domains_up()
+{
+ if ! contains_something "$XENDOMAINS_AUTO"
+ then
+ return 0
+ fi
+ missing=
+ for nm in $XENDOMAINS_AUTO/*; do
+ rdname $nm
+ found=0
+ if check_domain_up "$NM"; then
+ echo -n " $name"
+ else
+ missing="$missing $NM"
+ fi
+ done
+ if test -n "$missing"; then
+ echo -n " MISS AUTO:$missing"
+ return 1
+ fi
+ return 0
+}
+
+check_all_saved_domains_up()
+{
+ if ! contains_something "$XENDOMAINS_SAVE"
+ then
+ return 0
+ fi
+ missing=`/bin/ls $XENDOMAINS_SAVE`
+ echo -n " MISS SAVED: " $missing
+ return 1
+}
+
+# This does NOT necessarily restart all running domains: instead it
+# stops all running domains and then boots all the domains specified in
+# AUTODIR. If other domains have been started manually then they will
+# not get restarted.
+# Commented out to avoid confusion!
+
+restart()
+{
+ stop
+ start
+}
+
+reload()
+{
+ restart
+}
+
+
+case "$1" in
+ start)
+ start
+ rc_status
+ if test -f $LOCKFILE; then rc_status -v; fi
+ ;;
+
+ stop)
+ stop
+ rc_status -v
+ ;;
+
+ restart)
+ restart
+ ;;
+ force-reload|reload)
+ reload
+ ;;
+
+ status)
+ echo -n "Checking for xendomains:"
+ if test ! -f $LOCKFILE; then
+ rc_failed 3
+ else
+ check_all_auto_domains_up
+ rc_status
+ check_all_saved_domains_up
+ rc_status
+ fi
+ rc_status -v
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|force-reload|status}"
+ rc_failed 3
+ rc_status -v
+ ;;
+esac
+
+rc_exit
More information about the Pkg-xen-changes
mailing list