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
Example #3
0
    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)