rpms/libvirt/devel libvirt-0.2.2-disable-xm.patch, NONE, 1.1 libvirt-0.2.2-dnsmasq-order.patch, NONE, 1.1 libvirt-0.2.2-graphics-hvm.patch, NONE, 1.1 libvirt-0.2.2-qemu-noreboot.patch, NONE, 1.1 libvirt-0.2.2-sync-daemon-restart.patch, NONE, 1.1 libvirt.spec, 1.53, 1.54

Daniel P. Berrange (berrange) fedora-extras-commits at redhat.com
Fri May 4 14:18:47 UTC 2007


Author: berrange

Update of /cvs/pkgs/rpms/libvirt/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17492

Modified Files:
	libvirt.spec 
Added Files:
	libvirt-0.2.2-disable-xm.patch 
	libvirt-0.2.2-dnsmasq-order.patch 
	libvirt-0.2.2-graphics-hvm.patch 
	libvirt-0.2.2-qemu-noreboot.patch 
	libvirt-0.2.2-sync-daemon-restart.patch 
Log Message:
Fixed misc QEMU & Xen bugs

libvirt-0.2.2-disable-xm.patch:

--- NEW FILE libvirt-0.2.2-disable-xm.patch ---
diff -rup libvirt-0.2.2/src/xen_unified.c libvirt-0.2.2.new/src/xen_unified.c
--- libvirt-0.2.2/src/xen_unified.c	2007-04-17 04:38:52.000000000 -0400
+++ libvirt-0.2.2.new/src/xen_unified.c	2007-05-01 16:49:54.000000000 -0400
@@ -112,6 +112,11 @@ xenUnifiedOpen (virConnectPtr conn, cons
     for (i = 0; i < nb_drivers; ++i) {
         int failed_to_open = 1;
 
+        /* Only use XM driver for Xen <= 3.0.3 (ie xendConfigVersion <= 2) */
+        if (drivers[i] == &xenXMDriver &&
+            priv->xendConfigVersion > 2)
+            continue;
+
         /* Ignore proxy for root */
         if (i == proxy_offset && getuid() == 0)
             continue;

libvirt-0.2.2-dnsmasq-order.patch:

--- NEW FILE libvirt-0.2.2-dnsmasq-order.patch ---
diff -rup libvirt-0.2.2/qemud/qemud.c libvirt-0.2.2.new/qemud/qemud.c
--- libvirt-0.2.2/qemud/qemud.c	2007-04-11 10:13:36.000000000 -0400
+++ libvirt-0.2.2.new/qemud/qemud.c	2007-05-01 16:51:15.000000000 -0400
@@ -1110,6 +1110,7 @@ qemudBuildDnsmasqArgv(struct qemud_serve
     len =
         1 + /* dnsmasq */
         1 + /* --keep-in-foreground */
+        1 + /* --strict-order */
         1 + /* --bind-interfaces */
         2 + /* --pid-file "" */
         2 + /* --conf-file "" */
@@ -1133,6 +1134,11 @@ qemudBuildDnsmasqArgv(struct qemud_serve
     APPEND_ARG(*argv, i++, "dnsmasq");
 
     APPEND_ARG(*argv, i++, "--keep-in-foreground");
+    /*
+     * Needed to ensure dnsmasq uses same algorithm for processing
+     * multiple nameserver entries in /etc/resolv.conf as GLibC.
+     */
+    APPEND_ARG(*argv, i++, "--strict-order");
     APPEND_ARG(*argv, i++, "--bind-interfaces");
 
     APPEND_ARG(*argv, i++, "--pid-file");

libvirt-0.2.2-graphics-hvm.patch:

--- NEW FILE libvirt-0.2.2-graphics-hvm.patch ---
diff -rup libvirt-0.2.2.new/src/xend_internal.c libvirt-0.2.2/src/xend_internal.c
--- libvirt-0.2.2.new/src/xend_internal.c	2007-04-15 16:09:10.000000000 -0400
+++ libvirt-0.2.2/src/xend_internal.c	2007-05-03 14:52:42.000000000 -0400
@@ -1676,35 +1676,38 @@ xend_parse_sexp_desc(virConnectPtr conn,
         }
     }
 
-    /* Graphics device (HVM <= 3.0.4, or PV <= 3.0.4) vnc config */
-    tmp = sexpr_fmt_node(root, "domain/image/%s/vnc", hvm ? "hvm" : "linux");
-    if (tmp != NULL) {
-        if (tmp[0] == '1') {
-            int port = xenStoreDomainGetVNCPort(conn, domid);
-            const char *listenAddr = sexpr_fmt_node(root, "domain/image/%s/vnclisten", hvm ? "hvm" : "linux");
-            const char *keymap = sexpr_fmt_node(root, "domain/image/%s/keymap", hvm ? "hvm" : "linux");
-            /* For Xen >= 3.0.3, don't generate a fixed port mapping
-             * because it will almost certainly be wrong ! Just leave
-             * it as -1 which lets caller see that the VNC server isn't
-             * present yet. Subsquent dumps of the XML will eventually
-             * find the port in XenStore once VNC server has started
-             */
-            if (port == -1 && xendConfigVersion < 2)
-                port = 5900 + domid;
-            virBufferVSprintf(&buf, "    <graphics type='vnc' port='%d'", port);
-            if (listenAddr)
-                virBufferVSprintf(&buf, " listen='%s'", listenAddr);
-            if (keymap)
-                virBufferVSprintf(&buf, " keymap='%s'", keymap);
-            virBufferAdd(&buf, "/>\n", 3);
+    /* Graphics device (HVM <= 3.0.4, or PV <= 3.0.3) vnc config */
+    if ((hvm && xendConfigVersion < 4) ||
+        (!hvm && xendConfigVersion < 3)) {
+        tmp = sexpr_fmt_node(root, "domain/image/%s/vnc", hvm ? "hvm" : "linux");
+        if (tmp != NULL) {
+            if (tmp[0] == '1') {
+                int port = xenStoreDomainGetVNCPort(conn, domid);
+                const char *listenAddr = sexpr_fmt_node(root, "domain/image/%s/vnclisten", hvm ? "hvm" : "linux");
+                const char *keymap = sexpr_fmt_node(root, "domain/image/%s/keymap", hvm ? "hvm" : "linux");
+                /* For Xen >= 3.0.3, don't generate a fixed port mapping
+                 * because it will almost certainly be wrong ! Just leave
+                 * it as -1 which lets caller see that the VNC server isn't
+                 * present yet. Subsquent dumps of the XML will eventually
+                 * find the port in XenStore once VNC server has started
+                 */
+                if (port == -1 && xendConfigVersion < 2)
+                    port = 5900 + domid;
+                virBufferVSprintf(&buf, "    <graphics type='vnc' port='%d'", port);
+                if (listenAddr)
+                    virBufferVSprintf(&buf, " listen='%s'", listenAddr);
+                if (keymap)
+                    virBufferVSprintf(&buf, " keymap='%s'", keymap);
+                virBufferAdd(&buf, "/>\n", 3);
+            }
         }
-    }
 
-    /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */
-    tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux");
-    if (tmp != NULL) {
-        if (tmp[0] == '1')
-            virBufferAdd(&buf, "    <graphics type='sdl'/>\n", 27 );
+        /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */
+        tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux");
+        if (tmp != NULL) {
+            if (tmp[0] == '1')
+                virBufferAdd(&buf, "    <graphics type='sdl'/>\n", 27 );
+        }
     }
 
     tty = xenStoreDomainGetConsolePath(conn, domid);
Only in libvirt-0.2.2/src: xend_internal.c.orig

libvirt-0.2.2-qemu-noreboot.patch:

--- NEW FILE libvirt-0.2.2-qemu-noreboot.patch ---
diff -rup libvirt-0.2.2/qemud/conf.c libvirt-0.2.2.new/qemud/conf.c
--- libvirt-0.2.2/qemud/conf.c	2007-04-17 04:34:42.000000000 -0400
+++ libvirt-0.2.2.new/qemud/conf.c	2007-05-01 18:16:46.000000000 -0400
@@ -245,21 +245,25 @@ static int qemudExtractVersionInfo(const
     cleanup1:
         _exit(-1); /* Just in case */
     } else { /* Parent */
-        char help[4096]; /* Ought to be enough to hold QEMU help screen */
+        char help[8192]; /* Ought to be enough to hold QEMU help screen */
         int got, ret = -1;
         int major, minor, micro;
 
         if (close(newstdout[1]) < 0)
             goto cleanup2;
 
-    reread:
-        if ((got = read(newstdout[0], help, sizeof(help)-1)) < 0) {
-            if (errno == EINTR)
-                goto reread;
-            goto cleanup2;
+        while (got < (sizeof(help)-1)) {
+            int len;
+            if ((len = read(newstdout[0], help+got, sizeof(help)-got-1)) <= 0) {
+                if (!len)
+                    break;
+                if (errno == EINTR)
+                    continue;
+                goto cleanup2;
+            }
+            got += len;
         }
         help[got] = '\0';
-
         if (sscanf(help, "QEMU PC emulator version %d.%d.%d", &major,&minor, &micro) != 3) {
             goto cleanup2;
         }
@@ -267,6 +271,8 @@ static int qemudExtractVersionInfo(const
         *version = (major * 1000 * 1000) + (minor * 1000) + micro;
         if (strstr(help, "-no-kqemu"))
             *flags |= QEMUD_CMD_FLAG_KQEMU;
+        if (strstr(help, "-no-reboot"))
+            *flags |= QEMUD_CMD_FLAG_NO_REBOOT;
         if (*version >= 9000)
             *flags |= QEMUD_CMD_FLAG_VNC_COLON;
         ret = 0;
@@ -858,6 +864,22 @@ static struct qemud_vm_def *qemudParseXM
     }
     xmlXPathFreeObject(obj);
 
+
+    /* See if we disable reboots */
+    obj = xmlXPathEval(BAD_CAST "string(/domain/on_reboot)", ctxt);
+    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
+        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+        def->noReboot = 0;
+    } else {
+        if (!strcmp((char*)obj->stringval, "destroy"))
+            def->noReboot = 1;
+        else
+            def->noReboot = 0;
+    }
+    if (obj)
+        xmlXPathFreeObject(obj);
+
+
     /* Extract OS type info */
     obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
     if ((obj == NULL) || (obj->type != XPATH_STRING) ||
@@ -1220,6 +1242,8 @@ int qemudBuildCommandLine(struct qemud_s
         2 + /* cpus */
         2 + /* boot device */
         2 + /* monitor */
+        (server->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
+         vm->def->noReboot ? 1 : 0) + /* no-reboot */
         (vm->def->features & QEMUD_FEATURE_ACPI ? 0 : 1) + /* acpi */
         (vm->def->os.kernel[0] ? 2 : 0) + /* kernel */
         (vm->def->os.initrd[0] ? 2 : 0) + /* initrd */
@@ -1255,6 +1279,11 @@ int qemudBuildCommandLine(struct qemud_s
         goto no_memory;
     if (!((*argv)[++n] = strdup("pty")))
         goto no_memory;
+    if (server->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
+        vm->def->noReboot) {
+        if (!((*argv)[++n] = strdup("-no-reboot")))
+            goto no_memory;
+    }
 
     if (!(vm->def->features & QEMUD_FEATURE_ACPI)) {
         if (!((*argv)[++n] = strdup("-no-acpi")))
@@ -2517,6 +2546,17 @@ char *qemudGenerateXML(struct qemud_serv
             goto no_memory;
     }
 
+    if (bufferAdd(buf, "  <on_poweroff>destroy</on_poweroff>\n", -1) < 0)
+        goto no_memory;
+    if (def->noReboot) {
+        if (bufferAdd(buf, "  <on_reboot>destroy</on_reboot>\n", -1) < 0)
+            goto no_memory;
+    } else {
+        if (bufferAdd(buf, "  <on_reboot>restart</on_reboot>\n", -1) < 0)
+            goto no_memory;
+    }
+    if (bufferAdd(buf, "  <on_crash>destroy</on_crash>\n", -1) < 0)
+        goto no_memory;
 
     if (bufferAdd(buf, "  <devices>\n", -1) < 0)
         goto no_memory;
diff -rup libvirt-0.2.2/qemud/internal.h libvirt-0.2.2.new/qemud/internal.h
--- libvirt-0.2.2/qemud/internal.h	2007-04-11 10:13:36.000000000 -0400
+++ libvirt-0.2.2.new/qemud/internal.h	2007-05-01 17:53:42.000000000 -0400
@@ -161,6 +161,7 @@ enum qemud_vm_grapics_type {
 enum qemud_cmd_flags {
     QEMUD_CMD_FLAG_KQEMU = 1,
     QEMUD_CMD_FLAG_VNC_COLON = 2,
+    QEMUD_CMD_FLAG_NO_REBOOT = 4,
 };
 
 
@@ -191,6 +192,8 @@ struct qemud_vm_def {
     int maxmem;
     int vcpus;
 
+    int noReboot;
+
     struct qemud_vm_os_def os;
 
     int features;
Only in libvirt-0.2.2.new/qemud: libvirt-0.2.2-qemu-noreboot.patch

libvirt-0.2.2-sync-daemon-restart.patch:

--- NEW FILE libvirt-0.2.2-sync-daemon-restart.patch ---
--- libvirt-0.2.2/ChangeLog.sync-restart	2007-05-02 13:07:21.719425000 -0400
+++ libvirt-0.2.2/ChangeLog	2007-05-02 13:08:23.204879000 -0400
@@ -0,0 +1,5 @@
+Wed May  2 17:55:12 IST 2007 Mark McLoughlin <markmc at redhat.com>
+
+	* qemud/libvirtd.in: synchronously restart the daemon in
+	order to avoid https://bugzilla.redhat.com/238492
+	
--- libvirt-0.2.2/qemud/libvirtd.in.sync-restart	2007-02-23 07:50:58.000000000 -0500
+++ libvirt-0.2.2/qemud/libvirtd.in	2007-05-02 13:08:23.209868000 -0400
@@ -34,7 +34,7 @@
 stop() {
     echo -n $"Stopping $SERVICE daemon: "
 
-    killproc $PROCESS -TERM
+    killproc $PROCESS
     RETVAL=$?
     echo
     if [ $RETVAL -eq 0 ]; then


Index: libvirt.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libvirt/devel/libvirt.spec,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- libvirt.spec	27 Apr 2007 18:30:54 -0000	1.53
+++ libvirt.spec	4 May 2007 14:18:11 -0000	1.54
@@ -9,10 +9,15 @@
 Summary: Library providing a simple API virtualization
 Name: libvirt
 Version: 0.2.2
-Release: 2%{?_extra_release}
+Release: 3%{?_extra_release}
 License: LGPL
 Group: Development/Libraries
 Source: libvirt-%{version}.tar.gz
+Patch1: libvirt-0.2.2-disable-xm.patch
+Patch2: libvirt-0.2.2-dnsmasq-order.patch
+Patch3: libvirt-0.2.2-qemu-noreboot.patch
+Patch4: libvirt-0.2.2-sync-daemon-restart.patch
+Patch5: libvirt-0.2.2-graphics-hvm.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
 URL: http://libvirt.org/
 BuildRequires: python python-devel
@@ -54,11 +59,16 @@
 %description python
 The libvirt-python package contains a module that permits applications
 written in the Python programming language to use the interface
-supplied by the libvirt library to use the the virtualization capabilities 
+supplied by the libvirt library to use the the virtualization capabilities
 of recent versions of Linux (and other OSes).
 
 %prep
 %setup -q
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 
 %build
 %configure --with-init-script=redhat --with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid
@@ -170,6 +180,13 @@
 %doc docs/examples/python
 
 %changelog
+* Thu May  3 2007 Daniel P. Berrange <berrange at redhat.com> - 0.2.2-3.fc7
+- Fixed init script restart race
+- Remove duplicate <graphics> tag for HVM
+- Support -no-reboot in qemu for installs
+- Disable xm config file driver for 3.0.5
+- Force dnsmasq ordering for resolv.conf
+
 * Fri Apr 21 2007 Daniel P. Berrange <berrange at redhat.com> - 0.2.2-2.fc7
 - Added Requires on dnsmasq for virtual networking
 




More information about the fedora-extras-commits mailing list