diff --git a/0001-connection-catch-more-errors-in-filter_nodedevs-bug-.patch b/0001-connection-catch-more-errors-in-filter_nodedevs-bug-.patch new file mode 100644 index 0000000..61b586a --- /dev/null +++ b/0001-connection-catch-more-errors-in-filter_nodedevs-bug-.patch @@ -0,0 +1,32 @@ +From: Cole Robinson +Date: Tue, 9 Jun 2015 11:41:39 -0400 +Subject: [PATCH virt-manager] connection: catch more errors in filter_nodedevs + (bug 1225771) + +https://bugzilla.redhat.com/show_bug.cgi?id=1225771 Has an example of +libvirt failing to generate nodedev XML, so handle that too. + +(cherry picked from commit 77423e7a8d2061f06f9f7d0b7a791821a134c8f7) +--- + virtManager/connection.py | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/virtManager/connection.py b/virtManager/connection.py +index d40ace2..3ca13cc 100644 +--- a/virtManager/connection.py ++++ b/virtManager/connection.py +@@ -594,9 +594,11 @@ class vmmConnection(vmmGObject): + try: + xmlobj = dev.get_xmlobj() + except libvirt.libvirtError, e: +- if e.get_error_code() == libvirt.VIR_ERR_NO_NODE_DEVICE: +- continue +- raise ++ # Libvirt nodedev XML fetching can be busted ++ # https://bugzilla.redhat.com/show_bug.cgi?id=1225771 ++ if e.get_error_code() != libvirt.VIR_ERR_NO_NODE_DEVICE: ++ logging.debug("Error fetching nodedev XML", exc_info=True) ++ continue + + if devtype and xmlobj.device_type != devtype: + continue diff --git a/0002-domain-Use-UpdateDevice-for-CDROM-media-change-bz-12.patch b/0002-domain-Use-UpdateDevice-for-CDROM-media-change-bz-12.patch new file mode 100644 index 0000000..5267c4f --- /dev/null +++ b/0002-domain-Use-UpdateDevice-for-CDROM-media-change-bz-12.patch @@ -0,0 +1,56 @@ +From: Cole Robinson +Date: Mon, 10 Aug 2015 18:30:12 -0400 +Subject: [PATCH virt-manager] domain: Use UpdateDevice for CDROM media change + (bz 1229819) + +This has been supported for a long time now, and is more tested these +days, so let's use it rather than the old style AttachDevice method + +It also works around a libvirt issue described in bz 1229819 + +(cherry picked from commit 40d4c378680275ee432fbf4825c55737bc8c3fc2) +--- + virtManager/domain.py | 16 +++------------- + 1 file changed, 3 insertions(+), 13 deletions(-) + +diff --git a/virtManager/domain.py b/virtManager/domain.py +index bb8c511..6668961 100644 +--- a/virtManager/domain.py ++++ b/virtManager/domain.py +@@ -799,10 +799,7 @@ class vmmDomain(vmmLibvirtObject): + _change_bus() + + if do_hotplug: +- hotplug_kwargs = {"device": editdev} +- if path != _SENTINEL: +- hotplug_kwargs["storage_path"] = True +- self.hotplug(**hotplug_kwargs) ++ self.hotplug(device=editdev) + else: + self._redefine_xmlobj(xmlobj) + +@@ -1056,8 +1053,7 @@ class vmmDomain(vmmLibvirtObject): + self._backend.updateDeviceFlags(xml, flags) + + def hotplug(self, vcpus=_SENTINEL, memory=_SENTINEL, maxmem=_SENTINEL, +- description=_SENTINEL, title=_SENTINEL, storage_path=_SENTINEL, +- device=_SENTINEL): ++ description=_SENTINEL, title=_SENTINEL, device=_SENTINEL): + if not self.is_active(): + return + +@@ -1100,13 +1096,7 @@ class vmmDomain(vmmLibvirtObject): + if title != _SENTINEL: + _hotplug_metadata(title, libvirt.VIR_DOMAIN_METADATA_TITLE) + +- if storage_path != _SENTINEL: +- # qemu originally only supported attach_device for updating +- # a device's path. Stick with that. We may need to differentiate +- # for other drivers that don't maintain back compat though +- self.attach_device(device) +- +- elif device != _SENTINEL: ++ if device != _SENTINEL: + self._update_device(device) + + diff --git a/0003-createpool-Fix-adding-iscsi-pools-bz-1231558.patch b/0003-createpool-Fix-adding-iscsi-pools-bz-1231558.patch new file mode 100644 index 0000000..4f6a8d0 --- /dev/null +++ b/0003-createpool-Fix-adding-iscsi-pools-bz-1231558.patch @@ -0,0 +1,56 @@ +From: Cole Robinson +Date: Sun, 21 Jun 2015 15:47:31 -0400 +Subject: [PATCH virt-manager] createpool: Fix adding iscsi pools (bz 1231558) + +(cherry picked from commit 34db1af7b661b7eb5df4c71fc910d31c1ae9f7a4) +--- + virtManager/createpool.py | 6 ++++-- + virtManager/uiutil.py | 8 ++++++-- + 2 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/virtManager/createpool.py b/virtManager/createpool.py +index bd18d43..1eaa805 100644 +--- a/virtManager/createpool.py ++++ b/virtManager/createpool.py +@@ -479,9 +479,11 @@ class vmmCreatePool(vmmGObjectUI): + source_list = self.widget("pool-source-path") + target_list = self.widget("pool-target-path") + +- pool = uiutil.get_list_selection(source_list, column=2) ++ pool = uiutil.get_list_selection(source_list, column=2, ++ check_entry=False) + if pool is None: +- pool = uiutil.get_list_selection(target_list, column=2) ++ pool = uiutil.get_list_selection(target_list, column=2, ++ check_entry=False) + + return pool + +diff --git a/virtManager/uiutil.py b/virtManager/uiutil.py +index 82d2c1d..40b74d4 100644 +--- a/virtManager/uiutil.py ++++ b/virtManager/uiutil.py +@@ -70,17 +70,21 @@ def get_list_selected_row(widget, check_visible=False): + return row + + +-def get_list_selection(widget, column=0, check_visible=False): ++def get_list_selection(widget, column=0, ++ check_visible=False, check_entry=True): + """ + Helper to simplify getting the selected row and value in a list/tree/combo. + If nothing is selected, and the widget is a combo box with a text entry, + return the value of that. ++ ++ :param check_entry: If True, attempt to check the widget's text entry ++ using the logic described above. + """ + row = get_list_selected_row(widget, check_visible=check_visible) + if row is not None: + return row[column] + +- if hasattr(widget, "get_has_entry"): ++ if check_entry and hasattr(widget, "get_has_entry"): + if widget.get_has_entry(): + return widget.get_child().get_text().strip() + diff --git a/0004-spec-Add-LXC-to-default-connection-list-bz-1235972.patch b/0004-spec-Add-LXC-to-default-connection-list-bz-1235972.patch new file mode 100644 index 0000000..c81a63a --- /dev/null +++ b/0004-spec-Add-LXC-to-default-connection-list-bz-1235972.patch @@ -0,0 +1,23 @@ +From: Cole Robinson +Date: Sun, 9 Aug 2015 18:15:37 -0400 +Subject: [PATCH virt-manager] spec: Add LXC to default connection list (bz + 1235972) + +(cherry picked from commit 59b30c81a0a31c74138a6fed6ae68e79e048836a) +--- + virt-manager.spec.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/virt-manager.spec.in b/virt-manager.spec.in +index cb6579f..6150940 100644 +--- a/virt-manager.spec.in ++++ b/virt-manager.spec.in +@@ -8,7 +8,7 @@ + %define libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network" + %define kvm_packages "" + %define preferred_distros "fedora,rhel" +-%define default_hvs "qemu,xen" ++%define default_hvs "qemu,xen,lxc" + + %if 0%{?rhel} + %define preferred_distros "rhel,fedora" diff --git a/0005-create-Fix-backtrace-when-reporting-OS-error-bz-1241.patch b/0005-create-Fix-backtrace-when-reporting-OS-error-bz-1241.patch new file mode 100644 index 0000000..39518c7 --- /dev/null +++ b/0005-create-Fix-backtrace-when-reporting-OS-error-bz-1241.patch @@ -0,0 +1,37 @@ +From: Cole Robinson +Date: Mon, 10 Aug 2015 12:56:11 -0400 +Subject: [PATCH virt-manager] create: Fix backtrace when reporting OS error + (bz 1241902) + +(cherry picked from commit cca72a73c496b715bc90ee277291d0cbcf6d1771) +--- + virtManager/create.py | 2 +- + virtManager/error.py | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/virtManager/create.py b/virtManager/create.py +index 8401a7a..452c8d0 100644 +--- a/virtManager/create.py ++++ b/virtManager/create.py +@@ -1402,7 +1402,7 @@ class vmmCreate(vmmGObjectUI): + if variant: + guest.os_variant = variant + except ValueError, e: +- self.err.show_err(_("Error setting OS information."), e) ++ self.err.show_err(_("Error setting OS information."), str(e)) + return None + + if guest.os.is_arm64(): +diff --git a/virtManager/error.py b/virtManager/error.py +index 30fc67e..5a838f7 100644 +--- a/virtManager/error.py ++++ b/virtManager/error.py +@@ -89,6 +89,8 @@ class vmmErrorDialog(vmmGObject): + tb = "".join(traceback.format_exc()).strip() + if tb != "None": + details += "\n\n" + tb ++ else: ++ details = str(details) + + if debug: + debugmsg = "error dialog message:\nsummary=%s" % summary diff --git a/0006-osdict-Fix-unix-alias.patch b/0006-osdict-Fix-unix-alias.patch new file mode 100644 index 0000000..9df587f --- /dev/null +++ b/0006-osdict-Fix-unix-alias.patch @@ -0,0 +1,36 @@ +From: Cole Robinson +Date: Mon, 10 Aug 2015 13:01:04 -0400 +Subject: [PATCH virt-manager] osdict: Fix unix alias + +Needs to point to proper libosinfo name freebsd9.0 + +(cherry picked from commit 55b43dcbb81305e1cad6d157efd4d229a0b26741) +--- + virtinst/osdict.py | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/virtinst/osdict.py b/virtinst/osdict.py +index 76c2260..a6ae3ac 100644 +--- a/virtinst/osdict.py ++++ b/virtinst/osdict.py +@@ -174,7 +174,7 @@ class _OSDB(object): + "linux" : "generic", + "windows" : "winxp", + "solaris" : "solaris10", +- "unix": "freebsd9", ++ "unix": "freebsd9.0", + "other": "generic", + } + +@@ -221,10 +221,7 @@ class _OSDB(object): + + def lookup_os(self, key): + key = self._aliases.get(key) or key +- ret = self._all_variants.get(key) +- if ret is None: +- return None +- return ret ++ return self._all_variants.get(key) + + def lookup_os_by_media(self, location): + media = libosinfo.Media.create_from_location(location, None) diff --git a/0007-details-Raise-upper-limits-for-lxc-ID-namespaces-bz-.patch b/0007-details-Raise-upper-limits-for-lxc-ID-namespaces-bz-.patch new file mode 100644 index 0000000..2d73abb --- /dev/null +++ b/0007-details-Raise-upper-limits-for-lxc-ID-namespaces-bz-.patch @@ -0,0 +1,30 @@ +From: Cole Robinson +Date: Mon, 10 Aug 2015 13:14:37 -0400 +Subject: [PATCH virt-manager] details: Raise upper limits for lxc ID + namespaces (bz 1244490) + +(cherry picked from commit 531260be363bf203062636b548c3d0ec7eab5500) +--- + ui/details.ui | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ui/details.ui b/ui/details.ui +index eff3417..a2d3107 100644 +--- a/ui/details.ui ++++ b/ui/details.ui +@@ -37,13 +37,13 @@ + 25 + + +- 65536 ++ 10000000 + 1000 + 1 + 25 + + +- 65536 ++ 10000000 + 1000 + 1 + 25 diff --git a/0008-virtinst.cpu-fix-copy-host-cpu-definition.patch b/0008-virtinst.cpu-fix-copy-host-cpu-definition.patch new file mode 100644 index 0000000..db8f3e7 --- /dev/null +++ b/0008-virtinst.cpu-fix-copy-host-cpu-definition.patch @@ -0,0 +1,32 @@ +From: Pavel Hrdina +Date: Tue, 14 Jul 2015 15:53:25 +0200 +Subject: [PATCH virt-manager] virtinst.cpu: fix copy host cpu definition + +Commit cac4ac14 updated cpu features to use XMLBuilder and this change +removes the 'Features' class. There is no longer any '.names()' +method to return names, so just cycle through all features and use a +name attribute instead. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1240938 + +Signed-off-by: Pavel Hrdina +(cherry picked from commit a9b303fb141df5b2d2051c6b4ed489dbb09952f8) +--- + virtinst/cpu.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/virtinst/cpu.py b/virtinst/cpu.py +index b12fd30..fb17bb7 100644 +--- a/virtinst/cpu.py ++++ b/virtinst/cpu.py +@@ -104,8 +104,8 @@ class CPU(XMLBuilder): + + for feature in self.features: + self.remove_feature(feature) +- for name in cpu.features.names(): +- self.add_feature(name) ++ for feature in cpu.features: ++ self.add_feature(feature.name) + + def vcpus_from_topology(self): + """ diff --git a/0009-tests-Add-test-for-CPU-clearing.patch b/0009-tests-Add-test-for-CPU-clearing.patch new file mode 100644 index 0000000..b0334a5 --- /dev/null +++ b/0009-tests-Add-test-for-CPU-clearing.patch @@ -0,0 +1,26 @@ +From: Cole Robinson +Date: Tue, 14 Jul 2015 11:48:12 -0400 +Subject: [PATCH virt-manager] tests: Add test for CPU clearing + +Currently broken, fixed by the next patch + +(cherry picked from commit 612123563eab40b546aac977c5556371de8aed70) +--- + tests/xmlparse.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tests/xmlparse.py b/tests/xmlparse.py +index d737033..f134400 100644 +--- a/tests/xmlparse.py ++++ b/tests/xmlparse.py +@@ -1282,8 +1282,9 @@ class XMLParseTest(unittest.TestCase): + basename = "clear-cpu-unknown-vals" + infile = "tests/xmlparse-xml/%s-in.xml" % basename + outfile = "tests/xmlparse-xml/%s-out.xml" % basename +- guest = virtinst.Guest(conn, parsexml=file(infile).read()) ++ guest = virtinst.Guest(kvmconn, parsexml=file(infile).read()) + ++ guest.cpu.copy_host_cpu() + guest.cpu.clear() + utils.diff_compare(guest.get_xml_config(), outfile) + diff --git a/0010-details-don-t-display-error-if-machine-is-missing-in.patch b/0010-details-don-t-display-error-if-machine-is-missing-in.patch new file mode 100644 index 0000000..f6724e7 --- /dev/null +++ b/0010-details-don-t-display-error-if-machine-is-missing-in.patch @@ -0,0 +1,33 @@ +From: Pavel Hrdina +Date: Fri, 31 Jul 2015 14:28:00 +0200 +Subject: [PATCH virt-manager] details: don't display error if machine is + missing in XML + +Commint 0ddec919 updated the details page. Now the detail page of +existing domain cannot update the 'machine' value, only prints that +value. If we cannot get the machine from domain XML, don't pass a None, +but "Unknown" instead. This can happen if you are connecting with +virt-manager to really old libvirt, the machine value is present in +domain XML since libvirt v0.9.5. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238981 + +Signed-off-by: Pavel Hrdina +(cherry picked from commit f81358b02d58b709529a35268cbaf8ce098d803a) +--- + virtManager/details.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/virtManager/details.py b/virtManager/details.py +index 718f50a..8507bd0 100644 +--- a/virtManager/details.py ++++ b/virtManager/details.py +@@ -2457,7 +2457,7 @@ class vmmDetails(vmmGObjectUI): + self.widget("overview-firmware-label").set_text(firmware) + + # Machine settings +- machtype = self.vm.get_machtype() ++ machtype = self.vm.get_machtype() or _("Unknown") + if self.widget("machine-type").is_visible(): + uiutil.set_list_selection( + self.widget("machine-type"), machtype) diff --git a/0011-addconnection-Fix-qemu-session-vs.-lxc-detection.patch b/0011-addconnection-Fix-qemu-session-vs.-lxc-detection.patch new file mode 100644 index 0000000..a315bff --- /dev/null +++ b/0011-addconnection-Fix-qemu-session-vs.-lxc-detection.patch @@ -0,0 +1,24 @@ +From: Cole Robinson +Date: Sun, 9 Aug 2015 12:27:20 -0400 +Subject: [PATCH virt-manager] addconnection: Fix qemu:///session vs. lxc:/// + detection + +(cherry picked from commit 4970615f4870cc5394a46ff6a049ac937b3043d6) +--- + virtManager/connect.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/virtManager/connect.py b/virtManager/connect.py +index b977fea..7493d14 100644 +--- a/virtManager/connect.py ++++ b/virtManager/connect.py +@@ -327,7 +327,8 @@ class vmmConnect(vmmGObjectUI): + self.populate_uri() + + def hypervisor_changed(self, src): +- is_session = (src.get_active() == HV_QEMU_SESSION) ++ hv = uiutil.get_list_selection(self.widget("hypervisor")) ++ is_session = (hv == HV_QEMU_SESSION) + uiutil.set_grid_row_visible( + self.widget("session-warning-box"), is_session) + uiutil.set_grid_row_visible( diff --git a/0012-storage-session-path-should-be-.local-share-libvirt-.patch b/0012-storage-session-path-should-be-.local-share-libvirt-.patch new file mode 100644 index 0000000..b4dfd35 --- /dev/null +++ b/0012-storage-session-path-should-be-.local-share-libvirt-.patch @@ -0,0 +1,25 @@ +From: Cole Robinson +Date: Mon, 10 Aug 2015 12:35:13 -0400 +Subject: [PATCH virt-manager] storage: session path should be + ~/.local/share/libvirt/images + +Not .local/libvirt/images :/ App dirs aren't supposed to be in ~/.local + +(cherry picked from commit e22aeac5ae23b03e79e1d18c5fc7c6f2ca8b7a8d) +--- + virtinst/storage.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/virtinst/storage.py b/virtinst/storage.py +index 9e90db8..285acb8 100644 +--- a/virtinst/storage.py ++++ b/virtinst/storage.py +@@ -81,7 +81,7 @@ class _StorageObject(XMLBuilder): + def _get_default_pool_path(conn): + path = "/var/lib/libvirt/images" + if conn.is_session_uri(): +- path = os.path.expanduser("~/.local/libvirt/images") ++ path = os.path.expanduser("~/.local/share/libvirt/images") + return path + + diff --git a/virt-manager.spec b/virt-manager.spec index c03e7df..a2b6674 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -8,7 +8,7 @@ %define libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network" %define kvm_packages "" %define preferred_distros "fedora,rhel" -%define default_hvs "qemu,xen" +%define default_hvs "qemu,xen,lxc" %if 0%{?rhel} %define preferred_distros "rhel,fedora" @@ -21,7 +21,7 @@ Name: virt-manager Version: 1.2.1 -Release: 2%{?dist} +Release: 3%{?dist} %define verrel %{version}-%{release} Summary: Virtual Machine Manager @@ -29,6 +29,30 @@ Group: Applications/Emulators License: GPLv2+ URL: http://virt-manager.org/ Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz + +# Fix errors with missing nodedevs (bz #1225771) +Patch0001: 0001-connection-catch-more-errors-in-filter_nodedevs-bug-.patch +# Fix CDROM media change if device is bootable (bz #1229819) +Patch0002: 0002-domain-Use-UpdateDevice-for-CDROM-media-change-bz-12.patch +# Fix adding iscsi pools (bz #1231558) +Patch0003: 0003-createpool-Fix-adding-iscsi-pools-bz-1231558.patch +# spec: Add LXC to default connection list (bz #1235972) +Patch0004: 0004-spec-Add-LXC-to-default-connection-list-bz-1235972.patch +# Fix backtrace when reporting OS error (bz #1241902) +Patch0005: 0005-create-Fix-backtrace-when-reporting-OS-error-bz-1241.patch +Patch0006: 0006-osdict-Fix-unix-alias.patch +# Raise upper limits for lxc ID namespaces (bz #1244490) +Patch0007: 0007-details-Raise-upper-limits-for-lxc-ID-namespaces-bz-.patch +# Fix 'copy host CPU definition' +Patch0008: 0008-virtinst.cpu-fix-copy-host-cpu-definition.patch +Patch0009: 0009-tests-Add-test-for-CPU-clearing.patch +# Fix displaying VM machine type when connecting to old libvirt +Patch0010: 0010-details-don-t-display-error-if-machine-is-missing-in.patch +# Fix qemu:///session handling in 'Add Connection' dialog +Patch0011: 0011-addconnection-Fix-qemu-session-vs.-lxc-detection.patch +# Fix default storage path for qemu:///session, it should be +# .local/share/... +Patch0012: 0012-storage-session-path-should-be-.local-share-libvirt-.patch BuildArch: noarch @@ -102,6 +126,30 @@ machine). %prep %setup -q +# Fix errors with missing nodedevs (bz #1225771) +%patch0001 -p1 +# Fix CDROM media change if device is bootable (bz #1229819) +%patch0002 -p1 +# Fix adding iscsi pools (bz #1231558) +%patch0003 -p1 +# spec: Add LXC to default connection list (bz #1235972) +%patch0004 -p1 +# Fix backtrace when reporting OS error (bz #1241902) +%patch0005 -p1 +%patch0006 -p1 +# Raise upper limits for lxc ID namespaces (bz #1244490) +%patch0007 -p1 +# Fix 'copy host CPU definition' +%patch0008 -p1 +%patch0009 -p1 +# Fix displaying VM machine type when connecting to old libvirt +%patch0010 -p1 +# Fix qemu:///session handling in 'Add Connection' dialog +%patch0011 -p1 +# Fix default storage path for qemu:///session, it should be +# .local/share/... +%patch0012 -p1 + %build %if %{qemu_user} %define _qemu_user --qemu-user=%{qemu_user} @@ -213,6 +261,18 @@ fi %{_bindir}/virt-xml %changelog +* Tue Aug 11 2015 Cole Robinson - 1.2.1-3 +- Fix errors with missing nodedevs (bz #1225771) +- Fix CDROM media change if device is bootable (bz #1229819) +- Fix adding iscsi pools (bz #1231558) +- spec: Add LXC to default connection list (bz #1235972) +- Fix backtrace when reporting OS error (bz #1241902) +- Raise upper limits for lxc ID namespaces (bz #1244490) +- Fix 'copy host CPU definition' +- Fix displaying VM machine type when connecting to old libvirt +- Fix qemu:///session handling in 'Add Connection' dialog +- Fix default storage path for qemu:///session, it should be .local/share/... + * Fri Jun 19 2015 Fedora Release Engineering - 1.2.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild