From 8223cce0afed86d1967c981909a4c791b1ee2627 Mon Sep 17 00:00:00 2001 From: Mario Limonciello Date: Thu, 7 Apr 2011 16:06:18 -0500 Subject: [PATCH] Sleep the network for the duration of the install in stage 2. --- Dell/recovery_backend.py | 16 ++++++++++++++++ backend/com.dell.recoverymedia.policy.in | 10 ++++++++++ debian/changelog | 1 + ubiquity/dell-bootstrap.py | 23 +++++++++++++++++++++++ 4 files changed, 50 insertions(+) diff --git a/Dell/recovery_backend.py b/Dell/recovery_backend.py index 1fb4c4d6..20ec1041 100644 --- a/Dell/recovery_backend.py +++ b/Dell/recovery_backend.py @@ -377,6 +377,22 @@ def start_pulsable_progress_thread(self, input_str): # # Client API (through D-BUS) # + + @dbus.service.method(DBUS_INTERFACE_NAME, + in_signature = 'b', out_signature = 'b', sender_keyword = 'sender', + connection_keyword = 'conn') + def force_network(self, enable, sender=None, conn=None): + """Forces a network manager disable request as root""" + self._check_polkit_privilege(sender, conn, 'com.dell.recoverymedia.force_network') + bus = dbus.SystemBus() + obj = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager') + int = dbus.Interface(obj, 'org.freedesktop.NetworkManager') + if not enable: + return int.sleep() + else: + return int.wake() + + @dbus.service.method(DBUS_INTERFACE_NAME, in_signature = '', out_signature = '', sender_keyword = 'sender', connection_keyword = 'conn') diff --git a/backend/com.dell.recoverymedia.policy.in b/backend/com.dell.recoverymedia.policy.in index 4a61955d..9d7f9be9 100644 --- a/backend/com.dell.recoverymedia.policy.in +++ b/backend/com.dell.recoverymedia.policy.in @@ -64,5 +64,15 @@ yes + + + <_description>Toggle Network Connectivity + <_message>System policy prohibits changing network without user consent + + yes + yes + yes + + diff --git a/debian/changelog b/debian/changelog index 49f4cf85..bf9a5cdb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ dell-recovery (0.93) UNRELEASED; urgency=low * Fix missing OIE argument in recovery media generation from OOBE. + * Sleep the network for the duration of the install in stage 2. -- Mario Limonciello Thu, 07 Apr 2011 12:59:43 -0500 diff --git a/ubiquity/dell-bootstrap.py b/ubiquity/dell-bootstrap.py index fa500d8a..9414e3c8 100644 --- a/ubiquity/dell-bootstrap.py +++ b/ubiquity/dell-bootstrap.py @@ -534,6 +534,14 @@ def test_oie(self): with open('/tmp/oie', 'w') as wfd: pass + def sleep_network(self): + """Requests the network be disabled for the duration of install to + prevent conflicts""" + bus = dbus.SystemBus() + backend_iface = dbus.Interface(bus.get_object(magic.DBUS_BUS_NAME, '/RecoveryMedia'), magic.DBUS_INTERFACE_NAME) + backend_iface.force_network(False) + backend_iface.request_exit() + def clean_recipe(self): """Cleans up the recipe to remove swap if we have a small drive""" @@ -1149,6 +1157,7 @@ def cleanup(self): # Factory install, and booting from RP else: + self.sleep_network() self.disable_swap() self.test_oie() self.clean_recipe() @@ -1688,6 +1697,18 @@ def g2ldr(self): if os.path.exists(os.path.join(mount, 'grub', 'grub.cfg')): os.unlink(os.path.join(mount, 'grub', 'grub.cfg')) + def wake_network(self): + """Wakes the network back up""" + bus = dbus.SystemBus() + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + try: + backend_iface = dbus.Interface(bus.get_object(magic.DBUS_BUS_NAME, '/RecoveryMedia'), magic.DBUS_INTERFACE_NAME) + backend_iface.force_network(True) + backend_iface.request_exit() + except Exception: + pass + + def install(self, target, progress, *args, **kwargs): '''This is highly dependent upon being called AFTER configure_apt in install. If that is ever converted into a plugin, we'll @@ -1843,6 +1864,8 @@ def install(self, target, progress, *args, **kwargs): self.propagate_kernel_parameters() + self.wake_network() + install_misc.record_installed(to_install) install_misc.record_removed(to_remove)