From 21b5b71da6aedc8d11da0d207275a666d53a3f62 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Fri, 15 Jun 2012 17:29:11 -0400 Subject: [PATCH] Rebased to version 0.9.6.1 Various stream fixes and improvements (bz 743900) Fix state syncing when xen domain shuts down (bz 746007) Don't show for xen dom0 (bz 752271) Fix selinux denial on /usr/libexec/pt_chown from LXC (bz 785411) Don't flood LXC log file (bz 785431) Fix several double close bugs (bz 827127) Fix PCI assignment for USB2.0 controllers (bz 822160) --- libvirt-add-default-spice-channel.patch | 184 ++++++++++++++++ libvirt-add-usbredir-spice-channel.patch | 196 ++++++++++++++++++ libvirt-emit-spice-events.patch | 136 ++++++++++++ ...replace-deprecated-fedora-13-machine.patch | 156 ++++++++++++++ libvirt.spec | 87 ++++---- sources | 2 +- 6 files changed, 709 insertions(+), 52 deletions(-) create mode 100644 libvirt-add-default-spice-channel.patch create mode 100644 libvirt-add-usbredir-spice-channel.patch create mode 100644 libvirt-emit-spice-events.patch create mode 100644 libvirt-qemu-replace-deprecated-fedora-13-machine.patch diff --git a/libvirt-add-default-spice-channel.patch b/libvirt-add-default-spice-channel.patch new file mode 100644 index 0000000..5ac6966 --- /dev/null +++ b/libvirt-add-default-spice-channel.patch @@ -0,0 +1,184 @@ +From a9311c363defcba7479fdabfb4862bcf851a6b7c Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Tue, 8 May 2012 20:42:44 +0300 +Subject: [PATCH] domain_conf: add "default" to list of valid spice channels + +qemu's behavior in this case is to change the spice server behavior to +require secure connection to any channel not otherwise specified as +being in plaintext mode. libvirt doesn't currently allow requesting this +(via plaintext-channel=). + +RHBZ: 819499 + +Signed-off-by: Alon Levy +(cherry picked from commit ba97e4edc6aa439a4f1e70855cf4503181efdb7f) + +Conflicts: + + src/conf/domain_conf.c +Signed-off-by: Cole Robinson +--- + docs/formatdomain.html.in | 7 +++++++ + docs/schemas/domaincommon.rng | 9 +++++++++ + src/conf/domain_conf.c | 20 ++++++++++++++++++++ + src/conf/domain_conf.h | 1 + + src/qemu/qemu_command.c | 13 +++++++++++++ + .../qemuxml2argv-graphics-spice.args | 2 +- + .../qemuxml2argv-graphics-spice.xml | 2 +- + 7 files changed, 52 insertions(+), 2 deletions(-) + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index d082697..db5fa9b 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -2308,6 +2308,13 @@ qemu-kvm -net nic,model=? /dev/null + Since 0.9.3 + NB, this may not be supported by all hypervisors. + "spice" since 0.8.6. ++ The defaultMode attribute sets the default channel ++ security policy, valid values are secure, ++ insecure and the default any ++ (which is secure if possible, but falls back to insecure ++ rather than erroring out if no secure path is ++ available). "defaultMode" since ++ 0.9.12. +

+

+ When SPICE has both a normal and TLS secured TCP port +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index fe81c26..0d6edc8 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -1388,6 +1388,15 @@ + + + ++ ++ ++ ++ any ++ secure ++ insecure ++ ++ ++ + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 9cc1644..963768e 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -4689,6 +4689,8 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, + char *port = virXMLPropString(node, "port"); + char *tlsPort; + char *autoport; ++ char *defaultMode; ++ int defaultModeVal; + + if (port) { + if (virStrToLong_i(port, NULL, 10, &def->data.spice.port) < 0) { +@@ -4726,6 +4728,20 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, + VIR_FREE(autoport); + } + ++ def->data.spice.defaultMode = VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY; ++ ++ if ((defaultMode = virXMLPropString(node, "defaultMode")) != NULL) { ++ if ((defaultModeVal = virDomainGraphicsSpiceChannelModeTypeFromString(defaultMode)) < 0) { ++ virDomainReportError(VIR_ERR_INTERNAL_ERROR, ++ _("unknown default spice channel mode %s"), ++ defaultMode); ++ VIR_FREE(defaultMode); ++ goto error; ++ } ++ def->data.spice.defaultMode = defaultModeVal; ++ VIR_FREE(defaultMode); ++ } ++ + def->data.spice.keymap = virXMLPropString(node, "keymap"); + + if (virDomainGraphicsAuthDefParseXML(node, &def->data.spice.auth, +@@ -10311,6 +10327,10 @@ virDomainGraphicsDefFormat(virBufferPtr buf, + virBufferEscapeString(buf, " keymap='%s'", + def->data.spice.keymap); + ++ if (def->data.spice.defaultMode != VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY) ++ virBufferAsprintf(buf, " defaultMode='%s'", ++ virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode)); ++ + virDomainGraphicsAuthDefFormatAttr(buf, &def->data.spice.auth, flags); + break; + +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index d40fda6..f6df0ea 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -921,6 +921,7 @@ struct _virDomainGraphicsDef { + virDomainGraphicsAuthDef auth; + unsigned int autoport :1; + int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST]; ++ int defaultMode; /* enum virDomainGraphicsSpiceChannelMode */ + int image; + int jpeg; + int zlib; +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 366913b..ee192d3 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -4720,6 +4720,7 @@ qemuBuildCommandLine(virConnectPtr conn, + const char *listenAddr = NULL; + char *netAddr = NULL; + int ret; ++ int defaultMode = def->graphics[0]->data.spice.defaultMode; + + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", +@@ -4781,6 +4782,18 @@ qemuBuildCommandLine(virConnectPtr conn, + virBufferAsprintf(&opt, ",x509-dir=%s", + driver->spiceTLSx509certdir); + ++ switch (defaultMode) { ++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE: ++ virBufferAsprintf(&opt, ",tls-channel=default"); ++ break; ++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE: ++ virBufferAsprintf(&opt, ",plaintext-channel=default"); ++ break; ++ case VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY: ++ /* nothing */ ++ break; ++ } ++ + for (i = 0 ; i < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST ; i++) { + int mode = def->graphics[0]->data.spice.channels[i]; + switch (mode) { +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args +index c9fdb99..698e39c 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.args +@@ -2,7 +2,7 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \ + /usr/bin/qemu -S -M pc -m 214 -smp 1 -nodefaults -monitor \ + unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda \ + /dev/HostVG/QEMUGuest1 -usb -spice port=5903,tls-port=5904,addr=127.0.0.1,\ +-x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\ ++x509-dir=/etc/pki/libvirt-spice,tls-channel=default,tls-channel=main,plaintext-channel=inputs,\ + image-compression=auto_glz,jpeg-wan-compression=auto,zlib-glz-wan-compression=auto,\ + playback-compression=on,streaming-video=filter,disable-copy-paste -vga \ + qxl -global qxl.vram_size=18874368 -device qxl,id=video1,vram_size=33554432,bus=pci.0,addr=0x4 \ +diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml +index 5313b3a..29f20ab 100644 +--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml ++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice.xml +@@ -21,7 +21,7 @@ + + + +- ++ + + + +-- +1.7.7.6 + diff --git a/libvirt-add-usbredir-spice-channel.patch b/libvirt-add-usbredir-spice-channel.patch new file mode 100644 index 0000000..5d3fa9d --- /dev/null +++ b/libvirt-add-usbredir-spice-channel.patch @@ -0,0 +1,196 @@ +From b8c86d80df4ba6c682f05974892f5d7ab8f317a9 Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Tue, 8 May 2012 16:00:28 +0300 +Subject: [PATCH] domain_conf: add "usbredir" to list of valid spice channels + +Add "usbredir" channel to list of recognized spice channels. + +RHBZ: 819498 + +Signed-off-by: Alon Levy +(cherry picked from commit 4e78ffb63489071c4100678ed88d3111284555e8) +Signed-off-by: Cole Robinson +--- + docs/formatdomain.html.in | 8 ++- + docs/schemas/domaincommon.rng | 1 + + src/conf/domain_conf.c | 3 +- + src/conf/domain_conf.h | 1 + + .../qemuxml2argv-graphics-spice-usb-redir.args | 16 ++++++ + .../qemuxml2argv-graphics-spice-usb-redir.xml | 53 ++++++++++++++++++++ + tests/qemuxml2argvtest.c | 6 ++ + 7 files changed, 84 insertions(+), 4 deletions(-) + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args + create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml + +diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in +index 390476d..d082697 100644 +--- a/docs/formatdomain.html.in ++++ b/docs/formatdomain.html.in +@@ -2317,9 +2317,11 @@ qemu-kvm -net nic,model=? /dev/null + main <graphics> element. Valid channel names + include main, display, + inputs, cursor, +- playback, record; +- and since +- 0.8.8: smartcard. ++ playback, record ++ (all since 0.8.6); ++ smartcard (since ++ 0.8.8); and usbredir ++ (since 0.9.12). +

+
+   <graphics type='spice' port='-1' tlsPort='-1' autoport='yes'>
+diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
+index 9f8d292..fe81c26 100644
+--- a/docs/schemas/domaincommon.rng
++++ b/docs/schemas/domaincommon.rng
+@@ -1401,6 +1401,7 @@
+                     playback
+                     record
+                     smartcard
++                    usbredir
+                   
+                 
+                 
+diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
+index 2f9da71..9cc1644 100644
+--- a/src/conf/domain_conf.c
++++ b/src/conf/domain_conf.c
+@@ -389,7 +389,8 @@ VIR_ENUM_IMPL(virDomainGraphicsSpiceChannelName,
+               "cursor",
+               "playback",
+               "record",
+-              "smartcard");
++              "smartcard",
++              "usbredir");
+ 
+ VIR_ENUM_IMPL(virDomainGraphicsSpiceChannelMode,
+               VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_LAST,
+diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
+index f2cd8eb..d40fda6 100644
+--- a/src/conf/domain_conf.h
++++ b/src/conf/domain_conf.h
+@@ -797,6 +797,7 @@ enum virDomainGraphicsSpiceChannelName {
+     VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_PLAYBACK,
+     VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_RECORD,
+     VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_SMARTCARD,
++    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_USBREDIR,
+ 
+     VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST
+ };
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args
+new file mode 100644
+index 0000000..35e51a7
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.args
+@@ -0,0 +1,16 @@
++LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice /usr/bin/qemu -S -M pc -m 214 -smp 1 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
++-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \
++-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \
++-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \
++-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \
++-spice port=5903,tls-port=5904,addr=127.0.0.1,\
++x509-dir=/etc/pki/libvirt-spice,tls-channel=main,plaintext-channel=inputs,\
++tls-channel=usbredir,\
++image-compression=auto_glz,jpeg-wan-compression=auto,zlib-glz-wan-compression=auto,\
++playback-compression=on,streaming-video=filter,disable-copy-paste \
++-vga cirrus \
++-chardev socket,id=charredir0,host=localhost,port=4000 \
++-device usb-redir,chardev=charredir0,id=redir0 \
++-chardev spicevmc,id=charredir1,name=usbredir \
++-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \
++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+new file mode 100644
+index 0000000..1dc23bd
+--- /dev/null
++++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml
+@@ -0,0 +1,53 @@
++
++  QEMUGuest1
++  c7a5fdbd-edaf-9455-926a-d65c16db1809
++  219136
++  219136
++  1
++  
++    hvm
++    
++  
++  
++  destroy
++  restart
++  destroy
++  
++    /usr/bin/qemu
++    
++      
++      
++      
++      
++      
++      
++      
++      
++      
++      
++    
++    
++      
++ ++ ++ ++
++ ++ ++ ++
++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++
++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index 1dc6a01..d5475c5 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -405,6 +405,12 @@ mymain(void) + QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, + QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE, + QEMU_CAPS_DEVICE_QXL_VGA); ++ DO_TEST("graphics-spice-usb-redir", false, ++ QEMU_CAPS_VGA, QEMU_CAPS_SPICE, ++ QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, ++ QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB, ++ QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR, ++ QEMU_CAPS_CHARDEV_SPICEVMC); + + DO_TEST("input-usbmouse", false, NONE); + DO_TEST("input-usbtablet", false, NONE); +-- +1.7.7.6 + +diff -rup libvirt-0.9.6.1/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml foo/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml +--- libvirt-0.9.6.1/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml 2012-06-15 17:10:09.086979189 -0400 ++++ foo/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-usb-redir.xml 2012-06-15 17:21:08.788770706 -0400 +@@ -1,8 +1,8 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 +- 219136 +- 219136 ++ 219136 ++ 219136 + 1 + + hvm diff --git a/libvirt-emit-spice-events.patch b/libvirt-emit-spice-events.patch new file mode 100644 index 0000000..ec50f2d --- /dev/null +++ b/libvirt-emit-spice-events.patch @@ -0,0 +1,136 @@ +From 57f08fb47b0938a9e8969b857380926fa6966ca8 Mon Sep 17 00:00:00 2001 +From: Laine Stump +Date: Wed, 14 Mar 2012 01:41:35 -0400 +Subject: [PATCH] Emit graphics events when a SPICE client + connects/disconnects + +Wire up the domain graphics event notifications for SPICE. Adapted +from a RHEL-only patch written by Dan Berrange that used custom +__com.redhat_SPICE events - equivalent events are now available in +upstream QEMU (including a SPICE_CONNECTED event, which was missing in +the __COM.redhat_SPICE version). + +* src/qemu/qemu_monitor_json.c: Wire up SPICE graphics events +(cherry picked from commit 89ae6a5a30bd91cfb2365544f9dd2e6c2a36ecca) + +Signed-off-by: Cole Robinson +--- + src/qemu/qemu_monitor_json.c | 56 +++++++++++++++++++++++++++++++++++++++--- + 1 files changed, 52 insertions(+), 4 deletions(-) + +diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c +index e38c2ed..d4a3b7b 100644 +--- a/src/qemu/qemu_monitor_json.c ++++ b/src/qemu/qemu_monitor_json.c +@@ -57,6 +57,9 @@ static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr + static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data); + static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data); + static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data); ++static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data); ++static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data); ++static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data); + + struct { + const char *type; +@@ -73,6 +76,9 @@ struct { + { "VNC_INITIALIZED", qemuMonitorJSONHandleVNCInitialize, }, + { "VNC_DISCONNECTED", qemuMonitorJSONHandleVNCDisconnect, }, + { "BLOCK_JOB_COMPLETED", qemuMonitorJSONHandleBlockJob, }, ++ { "SPICE_CONNECTED", qemuMonitorJSONHandleSPICEConnect, }, ++ { "SPICE_INITIALIZED", qemuMonitorJSONHandleSPICEInitialize, }, ++ { "SPICE_DISCONNECTED", qemuMonitorJSONHandleSPICEDisconnect, }, + }; + + +@@ -617,7 +623,7 @@ VIR_ENUM_DECL(qemuMonitorGraphicsAddressFamily) + VIR_ENUM_IMPL(qemuMonitorGraphicsAddressFamily, VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV6 + 1, + "ipv4", "ipv6"); + +-static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, int phase) ++static void qemuMonitorJSONHandleGraphics(qemuMonitorPtr mon, virJSONValuePtr data, int phase) + { + const char *localNode, *localService, *localFamily; + const char *remoteNode, *remoteService, *remoteFamily; +@@ -636,14 +642,38 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i + } + + authScheme = virJSONValueObjectGetString(server, "auth"); ++ if (!authScheme) { ++ VIR_WARN("missing auth scheme in graphics event"); ++ return; ++ } + + localFamily = virJSONValueObjectGetString(server, "family"); ++ if (!localFamily) { ++ VIR_WARN("missing local address family in graphics event"); ++ return; ++ } + localNode = virJSONValueObjectGetString(server, "host"); ++ if (!localNode) { ++ VIR_WARN("missing local hostname in graphics event"); ++ return; ++ } + localService = virJSONValueObjectGetString(server, "service"); ++ if (!localService) ++ localService = ""; /* Spice has multiple ports, so this isn't provided */ + + remoteFamily = virJSONValueObjectGetString(client, "family"); ++ if (!remoteFamily) { ++ VIR_WARN("missing remote address family in graphics event"); ++ return; ++ } + remoteNode = virJSONValueObjectGetString(client, "host"); ++ if (!remoteNode) { ++ VIR_WARN("missing remote hostname in graphics event"); ++ return; ++ } + remoteService = virJSONValueObjectGetString(client, "service"); ++ if (!remoteService) ++ remoteService = ""; /* Spice has multiple ports, so this isn't provided */ + + saslUsername = virJSONValueObjectGetString(client, "sasl_username"); + x509dname = virJSONValueObjectGetString(client, "x509_dname"); +@@ -665,19 +695,37 @@ static void qemuMonitorJSONHandleVNC(qemuMonitorPtr mon, virJSONValuePtr data, i + + static void qemuMonitorJSONHandleVNCConnect(qemuMonitorPtr mon, virJSONValuePtr data) + { +- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT); ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT); + } + + + static void qemuMonitorJSONHandleVNCInitialize(qemuMonitorPtr mon, virJSONValuePtr data) + { +- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE); ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE); + } + + + static void qemuMonitorJSONHandleVNCDisconnect(qemuMonitorPtr mon, virJSONValuePtr data) + { +- qemuMonitorJSONHandleVNC(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT); ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT); ++} ++ ++ ++static void qemuMonitorJSONHandleSPICEConnect(qemuMonitorPtr mon, virJSONValuePtr data) ++{ ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_CONNECT); ++} ++ ++ ++static void qemuMonitorJSONHandleSPICEInitialize(qemuMonitorPtr mon, virJSONValuePtr data) ++{ ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE); ++} ++ ++ ++static void qemuMonitorJSONHandleSPICEDisconnect(qemuMonitorPtr mon, virJSONValuePtr data) ++{ ++ qemuMonitorJSONHandleGraphics(mon, data, VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT); + } + + static void qemuMonitorJSONHandleBlockJob(qemuMonitorPtr mon, virJSONValuePtr data) +-- +1.7.7.6 + diff --git a/libvirt-qemu-replace-deprecated-fedora-13-machine.patch b/libvirt-qemu-replace-deprecated-fedora-13-machine.patch new file mode 100644 index 0000000..4562df7 --- /dev/null +++ b/libvirt-qemu-replace-deprecated-fedora-13-machine.patch @@ -0,0 +1,156 @@ +From eaf056bf995558ecf6620ce031287f3aa81b66de Mon Sep 17 00:00:00 2001 +From: Laine Stump +Date: Tue, 6 Dec 2011 12:47:28 -0500 +Subject: [PATCH 1/2] qemu: replace deprecated fedora-13 machine type with + pc-0.14 + +This addresses https://bugzilla.redhat.com/show_bug.cgi?id=754772 . +It should only be applied to Fedora builds of libvirt, F15 and +later, so there is no upstream equivalent patch. + +Background: + +During the lifetime of Fedora 13, some features were backported into +the F13 build of qemu-kvm from upstream. These features were part of +the functionality of machine type "pc-0.13" in upstream qemu-kvm, so a +special "fedora-13" machine type was created for the F13 qemu-kvm. +Since "fedora-13" became the new "canonical machine type", all new +domains created with F13 libvirt tools by default contained that +machine type in their configuration file. + +In Fedora 14, a patch was made to qemu to treat the fedora-13 machine +type as equivalent to "pc-0.13". When Fedora 15 was released, this was +inadvertently changed to make it equivalent to "pc-0.14". + +With the release of Fedora 16, qemu-kvm initially removed support for +this machine type, which caused failure of many guest configurations +to start. qemu-kvm subsequently re-added the patch to support +fedora-13 (as equivalent to pc-0.14), but with the promise that they +could remove it with the release of Fedora 17. (see +https://bugzilla.redhat.com/show_bug.cgi?id=748218 ). + +Solution: + +In order to create a repeat of the recent problems, prior to F17 +existing guest configurations need to be updated to change fedora-13 +to pc-0.14 (which has been determined to be equivalent for all +practical purposes in both F15 and F16). That's what this patch does: + +1) Each time libvirtd is started, it calls virDomainLoadAllConfigs() +which calls virDomainLoadConfig(); this function has been modified to +check for os.machine == "fedora-13", and change it to "pc-0.14" then +write the updated config back to disk. + +2) Also, any other time a domain definition is parsed, the parsed +version in memory is changed to turn "fedora-13" into "pc-0.14". This +handles domains that had been saved to disk prior to the upgrade, and +are subsequently restarted. + +3) Finally, whenever a domain definition is formatted into a string, +any occurrence of fedora-13 is replaced with pc-0.14 *directly in the +virDomainDef* (to avoid multiple warning messages for the same object +when it's formatted multiple times). This should deal with those cases +where a domain was running at the time of upgrade, and is later +saved/snapshotted. + +I had considered doing this with some sed commands in the specfile, +but that wouldn't do anything to help the xml saved in image files. + +(Also, one of the xml tests was using the machine type "fedora-13", +and since that machine type is treated specially by the rest of this +patch, it was failing. That has been changed in a separate patch, +which must be applied with this patch, and which *is* also upstream). +--- + src/conf/domain_conf.c | 62 +++++++++++++++++++++++++++++++++++++++++++++-- + 1 files changed, 59 insertions(+), 3 deletions(-) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 318f523..7906bb8 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -7500,7 +7500,25 @@ virDomainDefPtr virDomainDefParseString(virCapsPtr caps, + unsigned int expectedVirtTypes, + unsigned int flags) + { +- return virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags); ++ virDomainDefPtr def ++ = virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags); ++ ++ /* Fedora-specific HACK - treat fedora-13 and pc-0.14 as equivalent. ++ * This handles the case of domains that had been saved to an image file ++ * prior to upgrade (save or snapshot), then restarted/reverted. ++ */ ++ if (def && STREQ_NULLABLE(def->os.machine, "fedora-13")) { ++ VIR_FREE(def->os.machine); ++ if (!(def->os.machine = strdup("pc-0.14"))) { ++ virReportOOMError(); ++ virDomainDefFree(def); ++ def = NULL; ++ } else { ++ VIR_WARN("Replacing deprecated 'fedora-13' machine type " ++ "with equivalent 'pc-0.14' in domain %s xml", def->name); ++ } ++ } ++ return def; + } + + virDomainDefPtr virDomainDefParseFile(virCapsPtr caps, +@@ -10648,8 +10666,30 @@ virDomainDefFormatInternal(virDomainDefPtr def, + virBufferAddLit(buf, " os.arch) + virBufferAsprintf(buf, " arch='%s'", def->os.arch); +- if (def->os.machine) +- virBufferAsprintf(buf, " machine='%s'", def->os.machine); ++ if (def->os.machine) { ++ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14" ++ * (in the original DomainDef as well as in the xml output). ++ * This will catch XML being written to save/migration images ++ * of domains that were running when libvirtd was restarted at ++ * the time of upgrade. ++ */ ++ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) { ++ virBufferAddLit(buf, " machine='pc-0.14'"); ++ VIR_WARN("substituting machine type 'fedora-13' with 'pc-0.14' " ++ "in domain %s", def->name); ++ /* It's not exactly nice to modify the source object, ++ * but sometimes virDomainFormat is called > 100 times for the ++ * same object, which would result in far too many warning logs. ++ */ ++ VIR_FREE(def->os.machine); ++ if (!(def->os.machine = strdup("pc-0.14"))) { ++ virReportOOMError(); ++ goto cleanup; ++ } ++ } else { ++ virBufferAsprintf(buf, " machine='%s'", def->os.machine); ++ } ++ } + /* + * HACK: For xen driver we previously used bogus 'linux' as the + * os type for paravirt, whereas capabilities declare it to +@@ -11100,6 +11140,22 @@ static virDomainObjPtr virDomainLoadConfig(virCapsPtr caps, + VIR_DOMAIN_XML_INACTIVE))) + goto error; + ++ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14". ++ * This updates all config files at the first restart of libvirt ++ * after upgrade. ++ */ ++ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) { ++ VIR_FREE(def->os.machine); ++ if (!(def->os.machine = strdup("pc-0.14"))) { ++ virReportOOMError(); ++ goto error; ++ } ++ VIR_WARN("Replacing deprecated 'fedora-13' machine type " ++ "with equivalent 'pc-0.14' in domain %s configuration file", name); ++ if (virDomainSaveConfig(configDir, def) < 0) ++ goto error; ++ } ++ + if ((autostartLink = virDomainConfigFile(autostartDir, name)) == NULL) + goto error; + +-- +1.7.7.4 + diff --git a/libvirt.spec b/libvirt.spec index f2b5742..dc62050 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -242,40 +242,27 @@ Summary: Library providing a simple virtualization API Name: libvirt -Version: 0.9.6 -Release: 6%{?dist}%{?extra_release} +Version: 0.9.6.1 +Release: 1%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries -Source: http://libvirt.org/sources/libvirt-%{version}.tar.gz -Patch1: %{name}-%{version}-spec-F15-still-uses-cgconfig.patch -Patch2: %{name}-%{version}-qemu-make-PCI-multifunction-support-more-manual.patch -Patch3:%{name}-%{version}-logging-Do-not-log-timestamp-through-syslog.patch -Patch4:%{name}-%{version}-logging-Add-date-to-log-timestamp.patch -Patch5:%{name}-%{version}-Add-internal-APIs-for-dealing-with-time.patch -Patch6:%{name}-%{version}-Make-logging-async-signal-safe-wrt-time-stamp-genera.patch -Patch7:%{name}-%{version}-Remove-time-APIs-from-src-util-util.h.patch -Patch8:%{name}-%{version}-spec-mark-directories-in-var-run-as-ghosts.patch -Patch9:%{name}-%{version}-Fix-incorrect-symbols-for-virtime.h-module-breaking-.patch -Patch10:%{name}-%{version}-spec-add-dmidecode-as-prereq.patch -Patch11:%{name}-%{version}-spec-don-t-use-chkconfig-list.patch -Patch12:%{name}-%{version}-spec-fix-logic-bug-in-deciding-to-turn-on-cgconfig.patch -Patch13:%{name}-%{version}-network-don-t-add-iptables-rules-for-externally-mana.patch -Patch14:%{name}-%{version}-test-replace-deprecated-fedora-13-machine.patch -Patch15:%{name}-%{version}-qemu-replace-deprecated-fedora-13-machine.patch -Patch16:%{name}-%{version}-spec-make-it-easier-to-autoreconf-when-building-rpm.patch -Patch17:%{name}-%{version}-Avoid-crash-in-shunloadtest.patch -# Fix crash when migrating many guests with vdsm (bz 785789) -Patch18: %{name}-large-migrate-crash.patch -# Fix libvirtd hang in vmware guest (bz 796451) -Patch19: %{name}-dmidecode-hang.patch -# Don't start HAL in init script (bz 789234) -Patch20: %{name}-no-init-hal-start.patch -# Fix storage lookup errors with empty lvm pool (bz 782261) -Patch21: %{name}-empty-lvm-hang.patch -# Fix test failures with new gnutls -Patch22: %{name}-gnutls-test-failures.patch -# Fix typo in chkconfig commandline for specfile -Patch23: %{name}-%{version}-specfile-fix-typo-in-chkconfig-commandline.patch + +%if %(echo %{version} | grep -o \\. | wc -l) == 3 +%define mainturl stable_updates/ +%endif +Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz +# Replace fedora-13->pc-0.14 to prep for qemu removal (bz 754772) +# keep: keeping this for the lifetime of F17, gone for newer releases +Patch1: %{name}-qemu-replace-deprecated-fedora-13-machine.patch +# Emit spice graphics events (bz 784813) +# keep: F16 feature backport that won't hit 0.9.6 maint +Patch2: %{name}-emit-spice-events.patch +# Add usbredir spice channel (bz 821469) +# keep: fedora feature backport that won't hit 0.9.11 maint +Patch3: %{name}-add-usbredir-spice-channel.patch +# Add default spice channel (bz 821474) +# keep: fedora feature backport that won't hit 0.9.11 maint +Patch4: %{name}-add-default-spice-channel.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root URL: http://libvirt.org/ @@ -600,25 +587,6 @@ of recent versions of Linux (and other OSes). %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 %build %if ! %{with_xen} @@ -1202,6 +1170,10 @@ fi %doc %{_datadir}/gtk-doc/html/libvirt/*.png %doc %{_datadir}/gtk-doc/html/libvirt/*.css +%dir %{_datadir}/libvirt/api/ +%{_datadir}/libvirt/api/libvirt-api.xml +%{_datadir}/libvirt/api/libvirt-qemu-api.xml + %doc docs/*.html docs/html docs/*.gif %doc docs/libvirt-api.xml %doc examples/hellolibvirt @@ -1227,6 +1199,19 @@ fi %endif %changelog +* Fri Jun 15 2012 Cole Robinson - 0.9.6.1-1 +- Rebased to version 0.9.6.1 +- Emit spice graphics events (bz 784813) +- Add usbredir spice channel (bz 821469) +- Add default spice channel (bz 821474) +- Various stream fixes and improvements (bz 743900) +- Fix state syncing when xen domain shuts down (bz 746007) +- Don't show for xen dom0 (bz 752271) +- Fix selinux denial on /usr/libexec/pt_chown from LXC (bz 785411) +- Don't flood LXC log file (bz 785431) +- Fix several double close bugs (bz 827127) +- Fix PCI assignment for USB2.0 controllers (bz 822160) + * Fri Mar 30 2012 Osier Yang - 0.9.6-6 - fix typo in chkconfig commandline for specfile - Bug 786890 diff --git a/sources b/sources index 55185f3..01bbca0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -b74df374b524d00a22a6c89cfc23099f libvirt-0.9.6.tar.gz +546e1ff724a4e9f37cdae4917d396e21 libvirt-0.9.6.1.tar.gz