Package: xen-utils-common Version: 4.4.0-1 Severity: important Tags: patch Under some circumstances the xl toolstack needs to create a loopback mount of a guest disk in dom0 (e.g. in order to run pygrub). Depending on the nature of the guest disk (e.g. qcow2 or raw file image based) this can require a qemu instance in dom0.
The upstream xencommons starts such a qemu on boot. The following patch adds this to the Debian packages init script as well. Once I have a bug number for this I will add it to debian/changelog and push the result to feature/bugNNNN as usual. Thanks, Ian. commit 26cce2a65c77f731e23a1395f1fe4a5da47287a4 Author: Ian Campbell <i...@debian.org> Date: Fri Nov 21 11:27:45 2014 +0000 Start a qemu process in dom0 to service the toolstacks loopback disk attaches. This is used to e.g. run pygrub on a VM with a qcow2 disk image. Also, remove correct pidfile when stopping xenconsoled. diff --git a/debian/changelog b/debian/changelog index 484583f..ff48d6a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +xen (4.4.1-4) UNRELEASED; urgency=medium + + [ Ian Campbell ] + * Start a qemu process in dom0 to service the toolstacks loopback disk + attaches. + * Remove correct pidfile when stopping xenconsoled. + + -- Ian Campbell <i...@debian.org> Fri, 21 Nov 2014 11:26:40 +0000 + xen (4.4.1-3) unstable; urgency=medium [ Bastian Blank ] diff --git a/debian/xen-utils-common.xen.init b/debian/xen-utils-common.xen.init index b903877..e5f1702 100644 --- a/debian/xen-utils-common.xen.init +++ b/debian/xen-utils-common.xen.init @@ -37,6 +37,9 @@ XENCONSOLED="$ROOT"/bin/xenconsoled XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid" XENSTORED="$ROOT"/bin/xenstored XENSTORED_PIDFILE="/var/run/xenstore.pid" +QEMU=/usr/bin/qemu-system-i386 +QEMU_PIDFILE="/var/run/qemu-dom0.pid" +QEMU_ARGS="-xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null" modules_setup() { @@ -179,10 +182,65 @@ xenconsoled_stop_real() [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$XENCONSOLED" [ "$?" = 2 ] && return 2 - rm -f $PIDFILE + rm -f $XENCONSOLED_PIDFILE return "$RETVAL" } +qemu_start() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_start_real + return $? +} + +qemu_stop() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_stop_real + return $? +} + +qemu_restart() +{ + [ -x $QEMU ] || return 0 + log_progress_msg "qemu" + qemu_stop_real + case "$?" in + 0|1) + qemu_start_real + case "$?" in + 0) ;; + *) return 2 ;; + esac + ;; + *) return 2 ;; + esac + return 0 +} + +qemu_start_real() +{ + start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile "$QEMU_PIDFILE" --exec "$QEMU" -- \ + $QEMU_ARGS -pidfile "$QEMU_PIDFILE" \ + || return 2 +} + +qemu_stop_real() +{ + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$QEMU_PIDFILE" --name xenconsoled + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$QEMU" + [ "$?" = 2 ] && return 2 + rm -f $QEMU_PIDFILE + return "$RETVAL" +} + + xenstored_start() { log_progress_msg "xenstored" @@ -227,6 +285,11 @@ case "$1" in 0|1) ;; *) log_end_msg 1; exit ;; esac + qemu_start + case "$?" in + 0|1) ;; + *) log_end_msg 1; exit ;; + esac log_end_msg 0 ;; stop) @@ -237,6 +300,11 @@ case "$1" in esac log_daemon_msg "Stopping $DESC" ret=0 + qemu_stop + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac xend_stop case "$?" in 0|1) ;; @@ -257,6 +325,11 @@ case "$1" in esac log_daemon_msg "Restarting $DESC" ret=0 + qemu_restart + case "$?" in + 0|1) ;; + *) ret=1 ;; + esac xend_restart case "$?" in 0|1) ;; -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org