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

Reply via email to