[Pkg-xen-devel] Bug#770456: Please start a qemu process in domain 0.
Ian Campbell
ijc at debian.org
Fri Nov 21 12:50:44 UTC 2014
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 <ijc at 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 <ijc at 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) ;;
More information about the Pkg-xen-devel
mailing list