def update_version_gui(self, version, distributor, release, arch, output_text): """Stops any running spinners and updates GUI items""" if distributor: self.distributor = distributor if release: self.release = release if arch: self.arch = arch self.bto_base = bool(version) if self.bto_base: version = increment_bto_version(version) else: version = 'X00' self.widgets.get_object('version').set_text(version) return True
def install(self, target, progress, *args, **kwargs): """Perform actual install time activities for oem-config""" if not 'UBIQUITY_OEM_USER_CONFIG' in os.environ: return #find the '/' mount partition and then label it as UBUNTU self.Set_RootPartitionLabel() env = os.environ lang = progress.get('debian-installer/locale') env['LANG'] = lang dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) self.progress = progress user = progress.get('passwd/username') uid = pwd.getpwnam(user).pw_uid gid = pwd.getpwnam(user).pw_gid rec_type = progress.get('dell-recovery/destination') if rec_type != "none": dvd, usb = magic.find_burners() rpart = magic.find_partition() self.index = 0 #build all the user's home directories a little earlier than normal subprocess.call(['su', user, '-c', 'xdg-user-dirs-update']) directory = magic.fetch_output(['su', user, '-c', '/usr/bin/xdg-user-dir DOWNLOAD']).strip() fname = os.path.join(directory, 'factory_image.iso') try: bus = dbus.SystemBus() dbus_iface = dbus.Interface(bus.get_object(magic.DBUS_BUS_NAME, '/RecoveryMedia'), magic.DBUS_INTERFACE_NAME) except Exception as err: self.log('install function exception while creating dbus backend: %s' % str(err)) return progress.info('dell-recovery/build_start') #Determine internal version number of image (version, date, platform) = dbus_iface.query_bto_version(rpart) version = magic.increment_bto_version(version) self.log("Generating recovery media from %s : %s" % (version, date)) #Build image try: magic.dbus_sync_call_signal_wrapper(dbus_iface, 'create_ubuntu', {'report_progress':self._update_progress_gui}, rpart, version, fname, platform) os.chown(fname.encode('utf-8'), uid, gid) except dbus.DBusException as err: self.log('install function exception while calling backend: %s' % str(err)) return #Close backend try: dbus_iface.request_exit() except dbus.DBusException as err: if hasattr(err, '_dbus_error_name') and err._dbus_error_name == \ 'org.freedesktop.DBus.Error.ServiceUnknown': pass else: self.log("Received %s when closing recovery-media-backend" \ % str(err)) return if rec_type: if rec_type == "dvd": cmd = ['dbus-launch'] + dvd + [fname.encode('utf-8')] else: cmd = ['dbus-launch'] + usb + [fname.encode('utf-8')] if 'DBUS_SESSION_BUS_ADDRESS' in os.environ: os.environ.pop('DBUS_SESSION_BUS_ADDRESS') progress.info('dell-recovery/burning') subprocess.call(cmd) else: #Mark burning tool to launch on 7th day directory = '/home/%s/.config/autostart' % user if not os.path.exists(directory): os.makedirs(directory) os.chown('/home/%s/.config' % user, uid, gid) os.chown(directory, uid, gid) fname = os.path.join(directory, 'dell-recovery.desktop') with open('/usr/share/applications/dell-recovery-media.desktop', encoding='utf-8') as rfd: with open(fname, 'w', encoding='utf-8') as wfd: for line in rfd.readlines(): if line.startswith('Exec='): line = 'Exec=/home/%s/.config/dell-recovery/reminder\n' % user wfd.write(line) os.chown(fname, uid, gid) directory = '/home/%s/.config/dell-recovery' % user if not os.path.exists(directory): os.makedirs(directory) os.chown(directory, uid, gid) fname = os.path.join(directory, 'reminder') date = magic.fetch_output(['date', '-d', '+7 days', '+%y%m%d']) with open(fname, 'w', encoding='utf-8') as wfd: wfd.write('#!/bin/sh\n') wfd.write('LAUNCH=%s\n' % date) wfd.write('TODAY=$(date +"%y%m%d")\n') wfd.write('if [ $TODAY -ge $LAUNCH ]; then\n') wfd.write(' dell-recovery\n') wfd.write('fi\n') os.chown(fname, uid, gid) os.chmod(fname, 0o744) return InstallPlugin.install(self, target, progress, *args, **kwargs)