Fixed misc QEMU & Xen bugs
This commit is contained in:
parent
c003690dfc
commit
a05e64b718
15
libvirt-0.2.2-disable-xm.patch
Normal file
15
libvirt-0.2.2-disable-xm.patch
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
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;
|
23
libvirt-0.2.2-dnsmasq-order.patch
Normal file
23
libvirt-0.2.2-dnsmasq-order.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
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");
|
70
libvirt-0.2.2-graphics-hvm.patch
Normal file
70
libvirt-0.2.2-graphics-hvm.patch
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
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
|
128
libvirt-0.2.2-qemu-noreboot.patch
Normal file
128
libvirt-0.2.2-qemu-noreboot.patch
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
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, µ) != 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
|
19
libvirt-0.2.2-sync-daemon-restart.patch
Normal file
19
libvirt-0.2.2-sync-daemon-restart.patch
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
--- 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@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
|
19
libvirt.spec
19
libvirt.spec
@ -9,10 +9,15 @@
|
|||||||
Summary: Library providing a simple API virtualization
|
Summary: Library providing a simple API virtualization
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 0.2.2
|
Version: 0.2.2
|
||||||
Release: 2%{?_extra_release}
|
Release: 3%{?_extra_release}
|
||||||
License: LGPL
|
License: LGPL
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Source: libvirt-%{version}.tar.gz
|
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
|
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
||||||
URL: http://libvirt.org/
|
URL: http://libvirt.org/
|
||||||
BuildRequires: python python-devel
|
BuildRequires: python python-devel
|
||||||
@ -59,6 +64,11 @@ of recent versions of Linux (and other OSes).
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure --with-init-script=redhat --with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid
|
%configure --with-init-script=redhat --with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid
|
||||||
@ -170,6 +180,13 @@ fi
|
|||||||
%doc docs/examples/python
|
%doc docs/examples/python
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu May 3 2007 Daniel P. Berrange <berrange@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@redhat.com> - 0.2.2-2.fc7
|
* Fri Apr 21 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.2-2.fc7
|
||||||
- Added Requires on dnsmasq for virtual networking
|
- Added Requires on dnsmasq for virtual networking
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user