def __init__(self, recovery, version, media, target, overwrite): #Run the normal init first #This sets up lots of common variables as well as translation domain DellRecoveryToolGTK.__init__(self, recovery) #init the UI and translate widgets/connect signals self.widgets = Gtk.Builder() self.widgets.add_from_file( os.path.join(UIDIR, 'recovery_media_creator.ui')) #insert pages in reverse order wizard = self.widgets.get_object('wizard') titles = { 'conf_page': _("Confirm Selections"), 'media_type_page': _("Media Type") } for page in ['conf_page', 'media_type_page']: wizard.insert_page(self.widgets.get_object(page), 0) wizard.set_page_title(wizard.get_nth_page(0), titles[page]) Gtk.Window.set_default_icon_from_file( os.path.join(SVGDIR, 'dell-dvd.svg')) translate_widgets(self.widgets) self.widgets.connect_signals(self) #setup spinner self.spinner = Gtk.Spinner() self.widgets.get_object('spinner_box').add(self.spinner) self.widgets.get_object('spinner_box').show_all() self._dbus_iface = None self.timeout = 0 self.image = '' (self.dvd_burn_cmd, self.usb_burn_cmd) = find_burners() try: self.release = fetch_output(['lsb_release', '-r', '-s']).strip('\n') self.distributor = fetch_output(['lsb_release', '-i', '-s']).strip('\n').lower() except RuntimeError: self.release = '0.00' self.distributor = 'unknown' self.arch = '' for item in ['server', 'enterprise']: if item in self.distributor: self.distributor = self.distributor.split(item)[0] #set any command line arguments for this frontend self.widgets.get_object('version').set_text(version) self.media = media self.path = target self.overwrite = overwrite
def __init__(self, recovery, version, media, target, overwrite): #Run the normal init first #This sets up lots of common variables as well as translation domain DellRecoveryToolGTK.__init__(self, recovery) #init the UI and translate widgets/connect signals self.widgets = Gtk.Builder() self.widgets.add_from_file(os.path.join(UIDIR, 'recovery_media_creator.ui')) #insert pages in reverse order wizard = self.widgets.get_object('wizard') titles = {'conf_page': _("Confirm Selections"), 'media_type_page': _("Media Type") } for page in ['conf_page', 'media_type_page']: wizard.insert_page(self.widgets.get_object(page), 0) wizard.set_page_title(wizard.get_nth_page(0), titles[page]) Gtk.Window.set_default_icon_from_file(os.path.join(SVGDIR, 'dell-dvd.svg')) translate_widgets(self.widgets) self.widgets.connect_signals(self) #setup spinner self.spinner = Gtk.Spinner() self.widgets.get_object('spinner_box').add(self.spinner) self.widgets.get_object('spinner_box').show_all() self._dbus_iface = None self.timeout = 0 self.image = '' (self.dvd_burn_cmd, self.usb_burn_cmd) = find_burners() try: self.release = fetch_output(['lsb_release', '-r', '-s']).strip('\n') self.distributor = fetch_output(['lsb_release', '-i', '-s']).strip('\n').lower() except RuntimeError: self.release = '0.00' self.distributor = 'unknown' self.arch = '' for item in ['server', 'enterprise']: if item in self.distributor: self.distributor = self.distributor.split(item)[0] #set any command line arguments for this frontend self.widgets.get_object('version').set_text(version) self.media = media self.path = target self.overwrite = overwrite
def __init__(self, controller, *args, **kwargs): self.controller = controller rpart = magic.find_partition() dvd, usb = magic.find_burners() oem = 'UBIQUITY_OEM_USER_CONFIG' in os.environ with misc.raised_privileges(): self.genuine = magic.check_vendor() if oem and (dvd or usb) and (rpart or not self.genuine): try: gi.require_version('Gtk', '3.0') from gi.repository import Gtk builder = Gtk.Builder() builder.add_from_file( '/usr/share/ubiquity/gtk/stepRecoveryMedia.ui') builder.connect_signals(self) self.controller.add_builder(builder) self.plugin_widgets = builder.get_object('stepRecoveryMedia') self.usb_media = builder.get_object('save_to_usb') self.dvd_media = builder.get_object('save_to_dvd') self.none_media = builder.get_object('save_to_none') self.grub_menu_98 = builder.get_object('98_grub_menu') self.grub_menu_99 = builder.get_object('99_grub_menu') if not dvd: builder.get_object('dvd_box').hide() if not usb: builder.get_object('usb_box').hide() if not self.genuine: builder.get_object('usb_box').hide() builder.get_object('dvd_box').hide() builder.get_object('none_box').hide() builder.get_object('genuine_box').show() except Exception as err: syslog.syslog('Could not create Dell Recovery page: %s', err) self.plugin_widgets = None else: if not oem: pass elif not rpart: syslog.syslog('%s: partition problems with rp[%s]' % (NAME, rpart)) self.plugin_widgets = None PluginUI.__init__(self, controller, *args, **kwargs)
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)