Start a qemu process in dom0 to service the toolstacks loopback disk attaches.
authorIan Campbell <ijc@debian.org>
Fri, 21 Nov 2014 11:27:45 +0000 (11:27 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 18 Apr 2017 15:01:10 +0000 (16:01 +0100)
This is used to e.g. run pygrub on a VM with a qcow2 disk image.

(Closes: #770456)

Also, remove correct pidfile when stopping xenconsoled.

(cherry picked from commit fcdd6e3c9596e900748e93ae3be4e6a3dc278f26)
(from alioth alioth/feature/bug770456)

Signed-off-by: Ian Jackson <ian.jackson@citrix.com>
debian/changelog
debian/xen-utils-common.xen.init

index f5ce033379481d8822a8b40e44371d0bc29b53d2..ffd5da5fe6fd974d43e27b40e7875632b3d5c1b3 100644 (file)
@@ -3,6 +3,11 @@ xen (4.8.0~rc5-2~) unstable; urgency=medium
   * Drop -lcrypto search from upstream configure, and from our
     Build-Depends.  Closes:#844419.
 
+  [ Ian Campbell ]
+  * Start a qemu process in dom0 to service the toolstacks loopback disk
+    attaches. (Closes: #770456)
+  * Remove correct pidfile when stopping xenconsoled.
+
  --
 
 xen (4.8.0~rc5-1) unstable; urgency=medium
index fe5d6f3453a5dfc2799f4988cbe3fdc29855adf5..252ddc0e440ea674cdf46fd4b1442ac9b0892d3b 100644 (file)
@@ -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" --exec "$QEMU"
+       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"
@@ -241,6 +299,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)
@@ -251,6 +314,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) ;;
@@ -271,6 +339,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) ;;