From 3a015b4ee3ac4fce15ad2cafc701ce282f2ade9c Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 19 Mar 2008 18:46:47 +0000 Subject: [PATCH] Fix DBus interface usage & other misc bugs --- virt-manager-0.5.3-dbus-interface.patch | 124 ++++++++++++++++++ virt-manager-0.5.3-default-xen-uri.patch | 12 ++ virt-manager-0.5.3-fix-add-blktap-disk.patch | 19 +++ virt-manager-0.5.3-fix-add-bridge.patch | 38 ++++++ virt-manager-0.5.3-fix-xen-cdrom-insert.patch | 22 ++++ virt-manager.spec | 21 ++- 6 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 virt-manager-0.5.3-dbus-interface.patch create mode 100644 virt-manager-0.5.3-default-xen-uri.patch create mode 100644 virt-manager-0.5.3-fix-add-blktap-disk.patch create mode 100644 virt-manager-0.5.3-fix-add-bridge.patch create mode 100644 virt-manager-0.5.3-fix-xen-cdrom-insert.patch diff --git a/virt-manager-0.5.3-dbus-interface.patch b/virt-manager-0.5.3-dbus-interface.patch new file mode 100644 index 0000000..c2a64f1 --- /dev/null +++ b/virt-manager-0.5.3-dbus-interface.patch @@ -0,0 +1,124 @@ +diff -ruNp virt-manager-0.5.3.orig/src/virtManager/connection.py virt-manager-0.5.3.new/src/virtManager/connection.py +--- virt-manager-0.5.3.orig/src/virtManager/connection.py 2008-01-10 20:17:51.000000000 -0500 ++++ virt-manager-0.5.3.new/src/virtManager/connection.py 2008-03-06 11:06:26.000000000 -0500 +@@ -161,9 +161,10 @@ class vmmConnection(gobject.GObject): + + def _device_added(self, path): + obj = self.bus.get_object("org.freedesktop.Hal", path) +- if obj.QueryCapability("net"): +- name = obj.GetPropertyString("net.interface") +- mac = obj.GetPropertyString("net.address") ++ objif = dbus.Interface(obj, "org.freedesktop.Hal.Device") ++ if objif.QueryCapability("net"): ++ name = objif.GetPropertyString("net.interface") ++ mac = objif.GetPropertyString("net.address") + + # Now magic to determine if the device is part of a bridge + shared = False +@@ -171,7 +172,7 @@ class vmmConnection(gobject.GObject): + try: + # XXX Linux specific - needs porting for other OS - patches + # welcomed... +- sysfspath = obj.GetPropertyString("linux.sysfs_path") ++ sysfspath = objif.GetPropertyString("linux.sysfs_path") + + # If running a device in bridged mode, there's a reasonable + # chance that the actual ethernet device has been renamed to +diff -ruNp virt-manager-0.5.3.orig/src/virtManager/createnet.py virt-manager-0.5.3.new/src/virtManager/createnet.py +--- virt-manager-0.5.3.orig/src/virtManager/createnet.py 2008-01-10 20:17:51.000000000 -0500 ++++ virt-manager-0.5.3.new/src/virtManager/createnet.py 2008-03-06 11:04:52.000000000 -0500 +@@ -404,10 +404,11 @@ class vmmCreateNetwork(gobject.GObject): + # Find info about all current present media + for d in self.hal_iface.FindDeviceByCapability("volume"): + vol = self.bus.get_object("org.freedesktop.Hal", d) +- if vol.GetPropertyBoolean("volume.is_disc") and \ +- vol.GetPropertyBoolean("volume.disc.has_data"): +- devnode = vol.GetProperty("block.device") +- label = vol.GetProperty("volume.label") ++ volif = dbus.Interface(vol, "org.freedesktop.Hal.Device") ++ if volif.GetPropertyBoolean("volume.is_disc") and \ ++ volif.GetPropertyBoolean("volume.disc.has_data"): ++ devnode = volif.GetProperty("block.device") ++ label = volif.GetProperty("volume.label") + if label == None or len(label) == 0: + label = devnode + vollabel[devnode] = label +@@ -416,7 +417,8 @@ class vmmCreateNetwork(gobject.GObject): + + for d in self.hal_iface.FindDeviceByCapability("storage.cdrom"): + dev = self.bus.get_object("org.freedesktop.Hal", d) +- devnode = dev.GetProperty("block.device") ++ devif = dbus.Interface(dev, "org.freedesktop.Hal.Device") ++ devnode = devif.GetProperty("block.device") + if vollabel.has_key(devnode): + model.append([devnode, vollabel[devnode], True, volpath[devnode]]) + else: +diff -ruNp virt-manager-0.5.3.orig/src/virtManager/create.py virt-manager-0.5.3.new/src/virtManager/create.py +--- virt-manager-0.5.3.orig/src/virtManager/create.py 2008-01-10 20:17:51.000000000 -0500 ++++ virt-manager-0.5.3.new/src/virtManager/create.py 2008-03-06 11:04:52.000000000 -0500 +@@ -139,7 +139,6 @@ class vmmCreate(gobject.GObject): + cd_list.add_attribute(text, 'sensitive', 2) + try: + self.optical_helper = vmmOpticalDriveHelper(self.window.get_widget("cd-path")) +- self.optical_helper.populate_opt_media() + self.window.get_widget("media-physical").set_sensitive(True) + except Exception, e: + logging.error("Unable to create optical-helper widget: '%s'", e) +diff -ruNp virt-manager-0.5.3.orig/src/virtManager/opticalhelper.py virt-manager-0.5.3.new/src/virtManager/opticalhelper.py +--- virt-manager-0.5.3.orig/src/virtManager/opticalhelper.py 2008-01-10 20:17:51.000000000 -0500 ++++ virt-manager-0.5.3.new/src/virtManager/opticalhelper.py 2008-03-06 11:04:52.000000000 -0500 +@@ -52,10 +52,11 @@ class vmmOpticalDriveHelper(gobject.GObj + # Find info about all current present media + for d in self.hal_iface.FindDeviceByCapability("volume"): + vol = self.bus.get_object("org.freedesktop.Hal", d) +- if vol.GetPropertyBoolean("volume.is_disc") and \ +- vol.GetPropertyBoolean("volume.disc.has_data"): +- devnode = vol.GetProperty("block.device") +- label = vol.GetProperty("volume.label") ++ volif = dbus.Interface(vol, "org.freedesktop.Hal.Device") ++ if volif.GetPropertyBoolean("volume.is_disc") and \ ++ volif.GetPropertyBoolean("volume.disc.has_data"): ++ devnode = volif.GetProperty("block.device") ++ label = volif.GetProperty("volume.label") + if label == None or len(label) == 0: + label = devnode + vollabel[devnode] = label +@@ -63,19 +64,21 @@ class vmmOpticalDriveHelper(gobject.GObj + + for d in self.hal_iface.FindDeviceByCapability("storage.cdrom"): + dev = self.bus.get_object("org.freedesktop.Hal", d) +- devnode = dev.GetProperty("block.device") ++ devif = dbus.Interface(dev, "org.freedesktop.Hal.Device") ++ devnode = devif.GetProperty("block.device") + if vollabel.has_key(devnode): +- self.model.append([devnode, vollabel[devnode], True, volpath[devnode]]) ++ self.model.append([devnode, "%s (%s)" % (vollabel[devnode], devnode), True, volpath[devnode]]) + else: +- self.model.append([devnode, _("No media present"), False, None]) ++ self.model.append([devnode, "%s (%s)" % (_("No media present"), devnode), False, None]) + + def _device_added(self, path): + vol = self.bus.get_object("org.freedesktop.Hal", path) +- if vol.QueryCapability("volume"): +- if vol.GetPropertyBoolean("volume.is_disc") and \ +- vol.GetPropertyBoolean("volume.disc.has_data"): +- devnode = vol.GetProperty("block.device") +- label = vol.GetProperty("volume.label") ++ volif = dbus.Interface(vol, "org.freedesktop.Hal.Device") ++ if volif.QueryCapability("volume"): ++ if volif.GetPropertyBoolean("volume.is_disc") and \ ++ volif.GetPropertyBoolean("volume.disc.has_data"): ++ devnode = volif.GetProperty("block.device") ++ label = volif.GetProperty("volume.label") + if label == None or len(label) == 0: + label = devnode + +@@ -88,8 +91,6 @@ class vmmOpticalDriveHelper(gobject.GObj + row[3] = path + + def _device_removed(self, path): +- vol = self.bus.get_object("org.freedesktop.Hal", path) +- + active = self.widget.get_active() + idx = 0 + # Search for the row containing matching HAL volume path diff --git a/virt-manager-0.5.3-default-xen-uri.patch b/virt-manager-0.5.3-default-xen-uri.patch new file mode 100644 index 0000000..f3df212 --- /dev/null +++ b/virt-manager-0.5.3-default-xen-uri.patch @@ -0,0 +1,12 @@ +diff -rup virt-manager-0.5.3.old/src/virt-manager.py.in virt-manager-0.5.3/src/virt-manager.py.in +--- virt-manager-0.5.3.old/src/virt-manager.py.in 2008-03-05 17:00:38.000000000 -0500 ++++ virt-manager-0.5.3/src/virt-manager.py.in 2008-03-05 17:01:01.000000000 -0500 +@@ -172,7 +172,7 @@ def show_engine(engine, show, uri, uuid) + if engine.config.get_connections() is None or len(engine.config.get_connections()) == 0: + tryuri = None + if os.path.exists("/var/lib/xend") and os.path.exists("/proc/xen"): +- tryuri = "xen" ++ tryuri = "xen:///" + elif os.path.exists("/usr/bin/qemu"): + if os.getuid() == 0: + tryuri = "qemu:///system" diff --git a/virt-manager-0.5.3-fix-add-blktap-disk.patch b/virt-manager-0.5.3-fix-add-blktap-disk.patch new file mode 100644 index 0000000..5312122 --- /dev/null +++ b/virt-manager-0.5.3-fix-add-blktap-disk.patch @@ -0,0 +1,19 @@ +# HG changeset patch +# User "Cole Robinson " +# Date 1201714089 18000 +# Node ID 90dd30034ebc05edd006a2174680b8d7ff0f522a +# Parent 384724cb14e02c6c98bec00db5567e03349caca6 +Fix adding virtual blktap disk to pv guest via addhardware wizard. rhbz 430926 + +diff -r 384724cb14e0 -r 90dd30034ebc src/virtManager/addhardware.py +--- a/src/virtManager/addhardware.py Wed Jan 16 11:49:56 2008 -0500 ++++ b/src/virtManager/addhardware.py Wed Jan 30 12:28:09 2008 -0500 +@@ -700,7 +700,7 @@ class vmmAddHardware(gobject.GObject): + device=device) + if self._disk.type == virtinst.VirtualDisk.TYPE_FILE and \ + not self.vm.is_hvm() and virtinst.util.is_blktap_capable(): +- disk.driver_name = virtinst.VirtualDisk.DRIVER_TAP ++ self._disk.driver_name = virtinst.VirtualDisk.DRIVER_TAP + except ValueError, e: + self._validation_error_box(_("Invalid Storage Parameters"), \ + str(e)) diff --git a/virt-manager-0.5.3-fix-add-bridge.patch b/virt-manager-0.5.3-fix-add-bridge.patch new file mode 100644 index 0000000..219c7be --- /dev/null +++ b/virt-manager-0.5.3-fix-add-bridge.patch @@ -0,0 +1,38 @@ +# HG changeset patch +# User "Cole Robinson " +# Date 1200502173 18000 +# Node ID dbd25721f588ab3662ab28b3f675f1e7bf071376 +# Parent 49c55daf788d3ba7dc7dfd270b2b607b9cb6c7ae +Adding a bridged network device was broken, adding the display name and not the interface name. Fix similar to cset 597. Fixes bug 392881. + +diff -r 49c55daf788d -r dbd25721f588 src/virtManager/addhardware.py +--- a/src/virtManager/addhardware.py Tue Jan 15 08:58:32 2008 -0500 ++++ b/src/virtManager/addhardware.py Wed Jan 16 11:49:33 2008 -0500 +@@ -122,12 +122,12 @@ class vmmAddHardware(gobject.GObject): + network_list.add_attribute(text, 'text', 1) + + device_list = self.window.get_widget("net-device") +- device_model = gtk.ListStore(str, bool) ++ device_model = gtk.ListStore(str, str, bool) + device_list.set_model(device_model) + text = gtk.CellRendererText() + device_list.pack_start(text, True) +- device_list.add_attribute(text, 'text', 0) +- device_list.add_attribute(text, 'sensitive', 1) ++ device_list.add_attribute(text, 'text', 1) ++ device_list.add_attribute(text, 'sensitive', 2) + + target_list = self.window.get_widget("target-device") + target_model = gtk.ListStore(str, int, str, str, str) +@@ -820,9 +820,9 @@ class vmmAddHardware(gobject.GObject): + net = self.vm.get_connection().get_net_device(name) + if net.is_shared(): + hasShared = True +- model.append(["%s (%s %s)" % (net.get_name(), _("Bridge"), net.get_bridge()), True]) ++ model.append([net.get_bridge(), "%s (%s %s)" % (net.get_name(), _("Bridge"), net.get_bridge()), True]) + else: +- model.append(["%s (%s)" % (net.get_name(), _("Not bridged")), False]) ++ model.append([net.get_bridge(), "%s (%s)" % (net.get_name(), _("Not bridged")), False]) + return hasShared + + def populate_target_device_model(self, model): diff --git a/virt-manager-0.5.3-fix-xen-cdrom-insert.patch b/virt-manager-0.5.3-fix-xen-cdrom-insert.patch new file mode 100644 index 0000000..17cd879 --- /dev/null +++ b/virt-manager-0.5.3-fix-xen-cdrom-insert.patch @@ -0,0 +1,22 @@ +diff -r 523f2f7501c6 src/virtManager/domain.py +--- a/src/virtManager/domain.py Wed Mar 12 10:37:49 2008 +0100 ++++ b/src/virtManager/domain.py Wed Mar 12 12:43:12 2008 -0400 +@@ -570,13 +570,18 @@ class vmmDomain(gobject.GObject): + doc = libxml2.parseDoc(xml) + ctx = doc.xpathNewContext() + disk_fragment = ctx.xpathEval("/disk") ++ driver_fragment = ctx.xpathEval("/disk/driver") + origdisk = disk_fragment[0].serialize() + disk_fragment[0].setProp("type", type) + elem = disk_fragment[0].newChild(None, "source", None) + if type == "file": + elem.setProp("file", source) ++ if driver_fragment: ++ driver_fragment.setProp("name", type) + else: + elem.setProp("dev", source) ++ if driver_fragment: ++ driver_fragment.setProp("name", "phy") + result = disk_fragment[0].serialize() + logging.debug("connect_cdrom_device produced the following XML: %s" % result) + finally: diff --git a/virt-manager.spec b/virt-manager.spec index 07e4c4e..bc86a46 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -8,7 +8,7 @@ Name: virt-manager Version: 0.5.3 -Release: 1%{_extra_release} +Release: 2%{_extra_release} Summary: Virtual Machine Manager Group: Applications/Emulators @@ -17,6 +17,13 @@ URL: http://virt-manager.org/ Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz Source1: %{name}.pam Source2: %{name}.console + +Patch1: %{name}-%{version}-fix-add-bridge.patch +Patch2: %{name}-%{version}-fix-add-blktap-disk.patch +Patch3: %{name}-%{version}-dbus-interface.patch +Patch4: %{name}-%{version}-default-xen-uri.patch +Patch5: %{name}-%{version}-fix-xen-cdrom-insert.patch + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # These two are just the oldest version tested @@ -70,6 +77,11 @@ API. %prep %setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 %build %configure @@ -160,6 +172,13 @@ fi %{_datadir}/dbus-1/services/%{name}.service %changelog +* Wed Mar 19 2008 Daniel P. Berrange - 0.5.3-2.fc7 +- Fix cdrom media connect +- Fix default Xen hypervisor URI +- Fix DBus calls to use an explicit interface (rhbz #435506) +- Fix adding blktap disk to PV guest via addhardware wizard +- Fix adding shared network devices via addhardware wizard + * Thu Jan 10 2008 Daniel P. Berrange - 0.5.3-1.fc7 - Updated to 0.5.3 release