From f54391e5a27402ee48faaccd694e3bd94deecb5b Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Thu, 13 Mar 2014 23:44:08 +0000 Subject: [PATCH] - Fix start_libvirtd to correctly use systemd to start libvirtd virtman-libvirtd-not-running.patch - Upstream bug fixes 531dd0ca-lxc-define-private-network.patch 53207f40-invalidate-cached-caps.patch 5320c976-fix-adding-empty-cdrom-floppy-drive.patch - bnc#867796 - virt-manager New Virtual Machine "Vm-install" virtman-vminstall.patch - bnc#867749 - virt-manager polling connection virtman-load-stored-uris.patch - bnc#866287 - virt-manager suggests to install "qemu / libvirt-daemon-qemu / libvirt-daemon-driver-network" at startup virtman-packages.patch - Use qemu-system-x86_64 instead of the deprecated qemu-kvm virtman-kvm.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=150 --- 531dd0ca-lxc-define-private-network.patch | 70 +++++++++++++ 53207f40-invalidate-cached-caps.patch | 22 +++++ ...-fix-adding-empty-cdrom-floppy-drive.patch | 24 +++++ virt-manager.changes | 27 +++++ virt-manager.spec | 50 +++++++--- virtman-kvm.patch | 12 ++- virtman-libvirtd-not-running.patch | 13 +++ virtman-load-stored-uris.patch | 25 +++++ virtman-packages.patch | 99 +++++++++++++++++++ virtman-vminstall.patch | 32 ++++-- 10 files changed, 344 insertions(+), 30 deletions(-) create mode 100644 531dd0ca-lxc-define-private-network.patch create mode 100644 53207f40-invalidate-cached-caps.patch create mode 100644 5320c976-fix-adding-empty-cdrom-floppy-drive.patch create mode 100644 virtman-libvirtd-not-running.patch create mode 100644 virtman-load-stored-uris.patch create mode 100644 virtman-packages.patch diff --git a/531dd0ca-lxc-define-private-network.patch b/531dd0ca-lxc-define-private-network.patch new file mode 100644 index 00000000..e3de166d --- /dev/null +++ b/531dd0ca-lxc-define-private-network.patch @@ -0,0 +1,70 @@ +Subject: lxc: define a private network for OS containers +From: Giuseppe Scrivano gscrivan@redhat.com Mon Mar 10 15:25:14 2014 +0100 +Date: Mon Mar 10 15:48:42 2014 +0100: +Git: 75349b9cf075b229c027ef1fcabeb5ebac981cc8 + +By default, specify the the "" feature with LXC operating +system containers. + +Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1040406 +Signed-off-by: Giuseppe Scrivano + +Index: virt-manager-1.0.0/tests/cli-test-xml/compare/virt-install-fs-default.xml +=================================================================== +--- virt-manager-1.0.0.orig/tests/cli-test-xml/compare/virt-install-fs-default.xml ++++ virt-manager-1.0.0/tests/cli-test-xml/compare/virt-install-fs-default.xml +@@ -8,6 +8,9 @@ + exe + /sbin/init + ++ ++ ++ + destroy + restart + restart +Index: virt-manager-1.0.0/virtinst/guest.py +=================================================================== +--- virt-manager-1.0.0.orig/virtinst/guest.py ++++ virt-manager-1.0.0/virtinst/guest.py +@@ -1,7 +1,7 @@ + # + # Common code for all guests + # +-# Copyright 2006-2009, 2013 Red Hat, Inc. ++# Copyright 2006-2009, 2013, 2014 Red Hat, Inc. + # Jeremy Katz + # + # This program is free software; you can redistribute it and/or modify +@@ -645,12 +645,18 @@ class Guest(XMLBuilder): + self._set_video_defaults() + self._set_sound_defaults() + ++ def _is_os_container(self): ++ if not self.os.is_container(): ++ return False ++ for fs in self.get_devices("filesystem"): ++ if fs.target == "/": ++ return True ++ return False ++ + def _set_osxml_defaults(self): + if self.os.is_container() and not self.os.init: +- for fs in self.get_devices("filesystem"): +- if fs.target == "/": +- self.os.init = "/sbin/init" +- break ++ if self._is_os_container(): ++ self.os.init = "/sbin/init" + self.os.init = self.os.init or "/bin/sh" + + if not self.os.loader and self.os.is_hvm() and self.type == "xen": +@@ -736,6 +742,8 @@ class Guest(XMLBuilder): + self.features.acpi = None + self.features.apic = None + self.features.pae = None ++ if self._is_os_container(): ++ self.features.privnet = True + return + + if not self.os.is_hvm(): diff --git a/53207f40-invalidate-cached-caps.patch b/53207f40-invalidate-cached-caps.patch new file mode 100644 index 00000000..8ca472db --- /dev/null +++ b/53207f40-invalidate-cached-caps.patch @@ -0,0 +1,22 @@ +Subject: create: Invalidate cached caps across similar connections (bz 1075444) +From: Cole Robinson crobinso@redhat.com Wed Mar 12 11:37:36 2014 -0400 +Date: Wed Mar 12 11:37:36 2014 -0400: +Git: 1cf8b629909ebbfb3caee235d03c7e9bb149091e + + +diff --git a/virtManager/create.py b/virtManager/create.py +index b4b1dfe..e8259dc 100644 +--- a/virtManager/create.py ++++ b/virtManager/create.py +@@ -214,9 +214,9 @@ class vmmCreate(vmmGObjectUI): + self.addstorage = None + + def remove_conn(self): +- if not self.conn: +- return + self.conn = None ++ self.capsguest = None ++ self.capsdomain = None + + def set_conn(self, newconn, force_validate=False): + if self.conn == newconn and not force_validate: diff --git a/5320c976-fix-adding-empty-cdrom-floppy-drive.patch b/5320c976-fix-adding-empty-cdrom-floppy-drive.patch new file mode 100644 index 00000000..700ef00f --- /dev/null +++ b/5320c976-fix-adding-empty-cdrom-floppy-drive.patch @@ -0,0 +1,24 @@ +Subject: addhw: Fix adding empty cdrom/floppy drive +From: Cole Robinson crobinso@redhat.com Wed Mar 12 16:54:14 2014 -0400 +Date: Wed Mar 12 16:54:14 2014 -0400: +Git: abb3920ac6b1e24d2f50faad2772e31ddabcb1c9 + + +diff --git a/virtManager/addstorage.py b/virtManager/addstorage.py +index 68558c9..2d15a57 100644 +--- a/virtManager/addstorage.py ++++ b/virtManager/addstorage.py +@@ -324,11 +324,11 @@ class vmmAddStorage(vmmGObjectUI): + if is_default: + path = self._check_ideal_path(path, vmname, collidelist) + +- if not path and device != "disk": ++ if not path and device in ["disk", "lun"]: + return self.err.val_err(_("A storage path must be specified.")) + + disk = virtinst.VirtualDisk(conn) +- disk.path = path ++ disk.path = path or None + disk.read_only = readonly + disk.device = device + disk.set_create_storage(size=size, sparse=sparse, diff --git a/virt-manager.changes b/virt-manager.changes index e0051594..3c4a8394 100644 --- a/virt-manager.changes +++ b/virt-manager.changes @@ -1,3 +1,30 @@ +------------------------------------------------------------------- +Tue Mar 13 08:19:52 MDT 2014 - carnold@suse.com + +- Fix start_libvirtd to correctly use systemd to start libvirtd + virtman-libvirtd-not-running.patch +- Upstream bug fixes + 531dd0ca-lxc-define-private-network.patch + 53207f40-invalidate-cached-caps.patch + 5320c976-fix-adding-empty-cdrom-floppy-drive.patch + +------------------------------------------------------------------- +Tue Mar 11 17:05:59 MDT 2014 - carnold@suse.com + +- bnc#867796 - virt-manager New Virtual Machine "Vm-install" + virtman-vminstall.patch + +------------------------------------------------------------------- +Tue Mar 11 09:12:07 MDT 2014 - carnold@suse.com + +- bnc#867749 - virt-manager polling connection + virtman-load-stored-uris.patch +- bnc#866287 - virt-manager suggests to install + "qemu / libvirt-daemon-qemu / libvirt-daemon-driver-network" at startup + virtman-packages.patch +- Use qemu-system-x86_64 instead of the deprecated qemu-kvm + virtman-kvm.patch + ------------------------------------------------------------------- Fri Mar 10 07:46:16 MDT 2014 - carnold@suse.com diff --git a/virt-manager.spec b/virt-manager.spec index b8be4fe7..ecf5df08 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -19,9 +19,10 @@ %define with_guestfs 0 %define askpass_package "openssh-askpass" %define qemu_user "qemu" -%define libvirt_packages "libvirt-daemon-qemu,libvirt-daemon-driver-network" -%define preferred_distros "opensuse,sles" -%define kvm_packages "qemu" +%define libvirt_kvm_packages "libvirt-daemon-qemu" +%define libvirt_xen_packages "libvirt-daemon-xen" +%define preferred_distros "sles,opensuse" +%define kvm_packages "qemu-x86" %define _version 1.0.0 %define _release 1 @@ -60,6 +61,9 @@ Patch22: 5318b486-virtinstall-location-iso-fix.patch Patch23: 5319db07-customize-add-disk-fix.patch Patch24: 531db6a7-new-volume-tooltip-logic.patch Patch25: 531dbfa7-handle-errors-when-deregistering-events-on-close.patch +Patch26: 531dd0ca-lxc-define-private-network.patch +Patch27: 53207f40-invalidate-cached-caps.patch +Patch28: 5320c976-fix-adding-empty-cdrom-floppy-drive.patch Patch50: virtman-desktop.patch Patch51: virtman-cdrom.patch Patch52: virtman-kvm.patch @@ -77,6 +81,9 @@ Patch69: virtman-allow-pv-iso-install.patch Patch70: virtman-autoyast-support.patch Patch71: virtman-vminstall.patch Patch72: virtman-show-suse-install-repos.patch +Patch73: virtman-packages.patch +Patch74: virtman-load-stored-uris.patch +Patch75: virtman-libvirtd-not-running.patch Patch150: virtinst-cdrom.patch Patch151: virtinst-storage-ocfs2.patch Patch152: virtinst-qed.patch @@ -88,11 +95,11 @@ BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build %define verrel %{version}-%{release} -Requires: dbus-1-x11 -Requires: dconf +Requires: virt-manager-common = %{verrel} Requires: gtk3 Requires: python-gconf -Requires: virt-manager-common = %{verrel} +Requires: dconf +Requires: dbus-1-x11 Requires: vm-install >= 0.5.6 # Libvirt-glib @@ -107,12 +114,12 @@ Requires: typelib-1_0-Vte-2_90 Requires: gtk-vnc2 Requires: libspice-client-glib-2_0-8 Requires: libspice-client-gtk-3_0-4 -Requires: python-gobject-cairo -Requires: typelib-1_0-GVnc-1_0 -Requires: typelib-1_0-Gtk-3_0 -Requires: typelib-1_0-GtkVnc-2_0 Requires: typelib-1_0-SpiceClientGlib-2_0 Requires: typelib-1_0-SpiceClientGtk-3_0 +Requires: typelib-1_0-Gtk-3_0 +Requires: typelib-1_0-GVnc-1_0 +Requires: typelib-1_0-GtkVnc-2_0 +Requires: python-gobject-cairo Recommends: python-SpiceClientGtk Requires: virt-install @@ -141,9 +148,9 @@ Group: System/Monitoring # This version not strictly required: virt-manager should work with older, # however varying amounts of functionality will not be enabled. Requires: libvirt-python >= 0.7.0 +Requires: python-urlgrabber Requires: python-ipaddr Requires: python-libxml2 -Requires: python-urlgrabber %description common Common files used by the different virt-manager interfaces, as well as @@ -156,10 +163,10 @@ Group: System/Monitoring Requires: virt-manager-common = %{verrel} -Provides: python-virtinst Provides: virt-clone -Provides: virt-convert Provides: virt-image +Provides: virt-convert +Provides: python-virtinst Obsoletes: python-virtinst <= 0.600.4 Supplements: virt-manager @@ -196,6 +203,9 @@ machine). %patch23 -p1 %patch24 -p1 %patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 %patch50 -p1 %patch51 -p1 %patch52 -p1 @@ -214,6 +224,9 @@ machine). %patch70 -p1 %patch71 -p1 %patch72 -p1 +%patch73 -p1 +%patch74 -p1 +%patch75 -p1 #%patch150 -p1 use 'c' for cdrom %patch151 -p1 %patch152 -p1 @@ -235,8 +248,12 @@ machine). %define _preferred_distros --preferred-distros=%{preferred_distros} %endif -%if %{libvirt_packages} -%define _libvirt_packages --libvirt-package-names=%{libvirt_packages} +%if %{libvirt_kvm_packages} +%define _libvirt_kvm_packages --libvirt-kvm-package-names=%{libvirt_kvm_packages} +%endif + +%if %{libvirt_xen_packages} +%define _libvirt_xen_packages --libvirt-xen-package-names=%{libvirt_xen_packages} %endif %if %{askpass_package} @@ -249,7 +266,8 @@ python setup.py configure \ --default-graphics="spice" \ %{?_qemu_user} \ %{?_kvm_packages} \ - %{?_libvirt_packages} \ + %{?_libvirt_kvm_packages} \ + %{?_libvirt_xen_packages} \ %{?_askpass_package} \ %{?_preferred_distros} \ %{?_default_graphics} diff --git a/virtman-kvm.patch b/virtman-kvm.patch index a4fc90d3..c0c30db5 100644 --- a/virtman-kvm.patch +++ b/virtman-kvm.patch @@ -1,11 +1,13 @@ -Index: virt-manager-0.10.1/virtManager/connect.py +Index: virt-manager-1.0.0/virtManager/connect.py =================================================================== ---- virt-manager-0.10.1.orig/virtManager/connect.py -+++ virt-manager-0.10.1/virtManager/connect.py -@@ -111,6 +111,7 @@ class vmmConnect(vmmGObjectUI): +--- virt-manager-1.0.0.orig/virtManager/connect.py ++++ virt-manager-1.0.0/virtManager/connect.py +@@ -110,7 +110,8 @@ class vmmConnect(vmmGObjectUI): + if (os.path.exists("/usr/bin/qemu") or os.path.exists("/usr/bin/qemu-kvm") or - os.path.exists("/usr/bin/kvm") or +- os.path.exists("/usr/bin/kvm") or ++ os.path.exists("/usr/bin/qemu-system-x86_64") or + os.path.exists("/dev/kvm") or os.path.exists("/usr/libexec/qemu-kvm")): if always_system or os.geteuid() == 0: diff --git a/virtman-libvirtd-not-running.patch b/virtman-libvirtd-not-running.patch new file mode 100644 index 00000000..fbf12b31 --- /dev/null +++ b/virtman-libvirtd-not-running.patch @@ -0,0 +1,13 @@ +--- virt-manager-1.0.0/virtManager/packageutils.py.orig 2014-03-13 14:43:07.187281364 -0600 ++++ virt-manager-1.0.0/virtManager/packageutils.py 2014-03-13 14:45:06.847936733 -0600 +@@ -136,8 +136,8 @@ def start_libvirtd(): + logging.debug("libvirtd not running, asking system-config-services " + "to start it") + scs = Gio.DBusProxy.new_sync(bus, 0, None, +- "org.fedoraproject.Config.Services", +- "/org/fedoraproject/Config/Services/systemd1", ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", None) + scs.StartUnit("(ss)", unitname, "replace") + time.sleep(2) diff --git a/virtman-load-stored-uris.patch b/virtman-load-stored-uris.patch new file mode 100644 index 00000000..61433da5 --- /dev/null +++ b/virtman-load-stored-uris.patch @@ -0,0 +1,25 @@ +--- virt-manager-1.0.0/virtManager/engine.py.orig 2014-03-13 15:48:17.556984261 -0600 ++++ virt-manager-1.0.0/virtManager/engine.py 2014-03-13 15:48:22.909014154 -0600 +@@ -229,9 +229,22 @@ class vmmEngine(vmmGObject): + if not uris: + return + logging.debug("About to connect to uris %s", uris) ++ tryuri = vmmConnect.default_uri(always_system=True) ++ found_uri = None + for uri in uris: ++ # If booted Xen, don't try connecting to local qemu ++ # Likewise if booted native, don't try connecting to local xen ++ if uri == 'xen:///' or uri == 'qemu:///system': ++ if tryuri and tryuri != uri: ++ logging.debug("Skipping %s because it is incompatible with local host", uri) ++ continue ++ found_uri = True + conn = self.make_conn(uri) + self.register_conn(conn, skip_config=True) ++ if tryuri and found_uri is None: ++ logging.debug("Didn't connect with anything, try default %s", tryuri) ++ conn = self.make_conn(tryuri) ++ self.register_conn(conn, skip_config=False) + + def autostart_conns(self): + """ diff --git a/virtman-packages.patch b/virtman-packages.patch new file mode 100644 index 00000000..ff2d5397 --- /dev/null +++ b/virtman-packages.patch @@ -0,0 +1,99 @@ +Index: virt-manager-1.0.0/setup.py +=================================================================== +--- virt-manager-1.0.0.orig/setup.py ++++ virt-manager-1.0.0/setup.py +@@ -310,8 +310,11 @@ class configure(Command): + ("pkgversion=", None, "user specified version-id"), + ("qemu-user=", None, + "user libvirt uses to launch qemu processes (default=root)"), +- ("libvirt-package-names=", None, +- "list of libvirt distro packages virt-manager will check for on " ++ ("libvirt-kvm-package-names=", None, ++ "list of libvirt kvm distro packages virt-manager will check for on " ++ "first run. comma separated string (default=none)"), ++ ("libvirt-xen-package-names=", None, ++ "list of libvirt xen distro packages virt-manager will check for on " + "first run. comma separated string (default=none)"), + ("kvm-package-names=", None, + "recommended kvm packages virt-manager will check for on first run " +@@ -335,7 +338,8 @@ class configure(Command): + self.prefix = sysprefix + self.pkgversion = None + self.qemu_user = None +- self.libvirt_package_names = None ++ self.libvirt_kvm_package_names = None ++ self.libvirt_xen_package_names = None + self.kvm_package_names = None + self.askpass_package_names = None + self.preferred_distros = None +@@ -351,8 +355,10 @@ class configure(Command): + template += "pkgversion = %s\n" % self.pkgversion + if self.qemu_user is not None: + template += "default_qemu_user = %s\n" % self.qemu_user +- if self.libvirt_package_names is not None: +- template += "libvirt_packages = %s\n" % self.libvirt_package_names ++ if self.libvirt_kvm_package_names is not None: ++ template += "libvirt_kvm_packages = %s\n" % self.libvirt_kvm_package_names ++ if self.libvirt_xen_package_names is not None: ++ template += "libvirt_xen_packages = %s\n" % self.libvirt_xen_package_names + if self.kvm_package_names is not None: + template += "hv_packages = %s\n" % self.kvm_package_names + if self.askpass_package_names is not None: +Index: virt-manager-1.0.0/virtcli/cliconfig.py +=================================================================== +--- virt-manager-1.0.0.orig/virtcli/cliconfig.py ++++ virt-manager-1.0.0/virtcli/cliconfig.py +@@ -86,5 +86,6 @@ stable_defaults = bool(int(_get_param("s + preferred_distros = _split_list(_get_param("preferred_distros", "")) + hv_packages = _split_list(_get_param("hv_packages", "")) + askpass_package = _split_list(_get_param("askpass_packages", "")) +-libvirt_packages = _split_list(_get_param("libvirt_packages", "")) ++libvirt_kvm_packages = _split_list(_get_param("libvirt_kvm_packages", "")) ++libvirt_xen_packages = _split_list(_get_param("libvirt_xen_packages", "")) + default_graphics = _get_param("default_graphics", "spice") +Index: virt-manager-1.0.0/virtManager/config.py +=================================================================== +--- virt-manager-1.0.0.orig/virtManager/config.py ++++ virt-manager-1.0.0/virtManager/config.py +@@ -160,7 +160,8 @@ class vmmConfig(object): + self.stable_defaults = cliconfig.stable_defaults + self.preferred_distros = cliconfig.preferred_distros + self.hv_packages = cliconfig.hv_packages +- self.libvirt_packages = cliconfig.libvirt_packages ++ self.libvirt_kvm_packages = cliconfig.libvirt_kvm_packages ++ self.libvirt_xen_packages = cliconfig.libvirt_xen_packages + self.askpass_package = cliconfig.askpass_package + self.default_graphics_from_config = cliconfig.default_graphics + self.cli_usbredir = None +Index: virt-manager-1.0.0/virtManager/engine.py +=================================================================== +--- virt-manager-1.0.0.orig/virtManager/engine.py ++++ virt-manager-1.0.0/virtManager/engine.py +@@ -196,21 +196,17 @@ class vmmEngine(vmmGObject): + + ret = None + try: +- libvirt_packages = self.config.libvirt_packages +- packages = self.config.hv_packages + libvirt_packages +- ++ tryuri = vmmConnect.default_uri(always_system=True) ++ if tryuri and tryuri.startswith('xen'): ++ packages = self.config.libvirt_xen_packages ++ else: ++ packages = self.config.libvirt_kvm_packages + self.config.hv_packages + ret = packageutils.check_packagekit(manager, manager.err, packages) + except: + logging.exception("Error talking to PackageKit") + +- if ret: +- tryuri = "qemu:///system" +- else: +- tryuri = vmmConnect.default_uri(always_system=True) +- + if tryuri is None: +- manager.set_startup_error(msg) +- return ++ tryuri = "qemu:///system" + + warnmsg = _("The 'libvirtd' service will need to be started.\n\n" + "After that, virt-manager will connect to libvirt on\n" diff --git a/virtman-vminstall.patch b/virtman-vminstall.patch index 639ba692..6f67935f 100644 --- a/virtman-vminstall.patch +++ b/virtman-vminstall.patch @@ -106,7 +106,11 @@ Index: virt-manager-1.0.0/virtManager/engine.py =================================================================== --- virt-manager-1.0.0.orig/virtManager/engine.py +++ virt-manager-1.0.0/virtManager/engine.py -@@ -28,6 +28,8 @@ import logging +@@ -25,9 +25,12 @@ from gi.repository import Gtk + # pylint: enable=E0611 + + import logging ++import os import re import Queue import threading @@ -115,7 +119,7 @@ Index: virt-manager-1.0.0/virtManager/engine.py import libvirt from virtinst import util -@@ -76,6 +78,7 @@ class vmmEngine(vmmGObject): +@@ -76,6 +79,7 @@ class vmmEngine(vmmGObject): self.windowCreate = None self.windowManager = None self.windowMigrate = None @@ -123,7 +127,7 @@ Index: virt-manager-1.0.0/virtManager/engine.py self.conns = {} self.err = vmmErrorDialog() -@@ -841,6 +844,7 @@ class vmmEngine(vmmGObject): +@@ -841,6 +845,7 @@ class vmmEngine(vmmGObject): obj.connect("action-show-domain", self._do_show_vm) obj.connect("action-show-preferences", self._do_show_preferences) obj.connect("action-show-create", self._do_show_create) @@ -131,7 +135,7 @@ Index: virt-manager-1.0.0/virtManager/engine.py obj.connect("action-show-about", self._do_show_about) obj.connect("action-show-host", self._do_show_host) obj.connect("action-show-connect", self._do_show_connect) -@@ -881,11 +885,42 @@ class vmmEngine(vmmGObject): +@@ -881,11 +886,52 @@ class vmmEngine(vmmGObject): self.windowCreate = obj return self.windowCreate @@ -157,11 +161,21 @@ Index: virt-manager-1.0.0/virtManager/engine.py + self._get_create_dialog().show(src.topwin, uri) + self.remote_install = True + else: -+ args = ['/usr/bin/vm-install'] -+ logging.debug("Launching: %s" % str(args)) -+ p = Popen(args) -+ self.windowCreate = None -+ self.remote_install = False ++ if os.getuid() == 0: ++ args = ['/usr/bin/vm-install'] ++ logging.debug("Launching: %s" % str(args)) ++ p = Popen(args) ++ self.windowCreate = None ++ self.remote_install = False ++ else: ++ from vminstall.msg import must_be_root ++ message_box = Gtk.MessageDialog(None, ++ Gtk.DialogFlags.MODAL, ++ Gtk.MessageType.WARNING, ++ Gtk.ButtonsType.OK, ++ must_be_root) ++ message_box.run() ++ message_box.destroy() + except Exception, e: + src.err.show_err(_("Error launching manager: %s") % str(e), + "".join(traceback.format_exc()))