#!/sbin/runscript # Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/files/xendomains.initd,v 1.3 2008/09/01 00:41:08 rbu Exp $ opts="start stop status restart" depend() { need xend after dhcp } get_domname() { local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" | tail -n 1) if [[ -z ${name_from_file} ]] ; then basename "${1}" else echo ${name_from_file} fi } is_running() { /usr/sbin/xm list "${1}" >/dev/null 2>&1 } using_screen() { [[ "${SCREEN}" == "yes" || "${SCREEN}" == "YES" ]] } set_screen_cmd() { screen_cmd="screen -q -r ${SCREEN_NAME:=xen} -X" } start() { set_screen_cmd einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}" if using_screen ; then ebegin "Creating screen session to hold domain consoles" ( screen -d -m -S ${SCREEN_NAME} -t dom0 \ && ${screen_cmd} zombie dr \ && logrotate -f /etc/xen/xen-consoles.logrotate \ && ${screen_cmd} logfile /var/log/xen-consoles/%t.log \ && ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ && ${screen_cmd} log on \ && ${screen_cmd} deflog on ) >/dev/null if [[ $? -ne 0 ]] ; then eend 1 return 1 else eend fi fi # Create all domains with config files in AUTODIR. for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do name=$(get_domname ${dom}) if ! is_running ${name} ; then ebegin " Starting domain ${name}" if using_screen ; then ${screen_cmd} screen -t ${name} xm create ${dom} -c else xm create --quiet ${dom} fi eend $? else einfo " Not starting domain ${name} - already running" fi done } stop() { set_screen_cmd einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}" # Stop all domains with config files in AUTODIR. DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)" if [[ "$PARALLEL_SHUTDOWN" = "yes" ]] ; then for dom in $DOMAINS ; do name=$(get_domname ${dom}) if is_running ${name} ; then ebegin " Asking domain ${name} to shutdown..." xm shutdown ${name} >/dev/null eend $? fi done fi for dom in $DOMAINS ; do name=$(get_domname ${dom}) if is_running ${name} ; then ebegin " Waiting for domain ${name} to shutdown" xm shutdown --wait ${name} >/dev/null eend $? else einfo " Not stopping domain ${name} - not running" fi done if using_screen ; then ebegin "Closing screen session ${SCREEN_NAME}" ${screen_cmd} quit eend $? fi } status() { /usr/sbin/xm list }