def download_offline_packages(self, path):
     rootPath = "%s/root" % path
     arch = getGuestEfiArchitecture(rootPath)
     de = EditDistro(path)
     script = "offline.sh"
     scriptSource = join(self.scriptDir, "files/{}".format(script))
     scriptTarget = join(rootPath, script)
     offlineSource = join(rootPath, "offline")
     offlineTarget = join(rootPath, "../boot/offline")
     if exists(scriptSource):
         try:
             copy(scriptSource, scriptTarget)
             self.ec.run("chmod a+x '%s'" % scriptTarget)
             # Run the script
             de.openTerminal("/bin/bash {} {}".format(script, arch))
             # Remove script
             silent_remove(scriptTarget)
             # Move offline directory to boot directory
             if exists(offlineSource):
                 print(("%s exists" % offlineSource))
                 if exists(offlineTarget):
                     print((">> Remove %s" % offlineTarget))
                     silent_remove(offlineTarget)
                 print((">> Move %s to %s" % (offlineSource, offlineTarget)))
                 move(offlineSource, offlineTarget)
             else:
                 print((">> Cannot find: %s" % offlineSource))
         except Exception as detail:
             self.showError("Error: getting offline packages", detail, self.window)
     else:
         print((">> Cannot find: %s" % scriptSource))
 def on_btnLocalize_clicked(self, widget):
     # Set locale
     selected = self.tvHandlerDistros.getToggledValues(toggleColNr=0, valueColNr=2)
     for path in selected:
         rootPath = "%s/root" % path
         de = EditDistro(path)
         script = "setlocale.sh"
         scriptSource = join(self.scriptDir, "files/{}".format(script))
         scriptTarget = join(rootPath, script)
         if exists(scriptSource):
             copy(scriptSource, scriptTarget)
             self.ec.run("chmod a+x '%s'" % scriptTarget)
             de.openTerminal("/bin/bash %s" % script)
             silent_remove(scriptTarget)
         
         # Copy Grub locale files to ISO boot directory and configure grub.cfg
         grub_path = "%s/boot/boot/grub/" % path
         grubcfg_path = "%s/grub.cfg" % grub_path
         locale_path = "%s/root/boot/grub/locale" % path
         default_path = "%s/root/etc/default" % path
         locale = self.ec.run("grep -oP '(?<=LANG=).*?(?=\.)' %s/locale" % default_path)[0]
         if exists(locale_path) and \
            exists(grubcfg_path) and \
            locale:
             self.ec.run("cp -rf %s %s" % (locale_path, grub_path))
             self.ec.run("sed -i 's/set lang=.*/set lang=%s/' %s" % (locale, grubcfg_path))
 def on_btnLocalize_clicked(self, widget):
     # Set locale
     selected = self.tvHandlerDistros.getToggledValues(toggleColNr=0, valueColNr=2)
     for path in selected:
         rootPath = "%s/root" % path
         de = EditDistro(path)
         script = "setlocale.sh"
         scriptSource = join(self.scriptDir, "files/{}".format(script))
         scriptTarget = join(rootPath, script)
         if exists(scriptSource):
             copy(scriptSource, scriptTarget)
             self.ec.run("chmod a+x %s" % scriptTarget)
             de.openTerminal("/bin/bash %s" % script)
             remove(scriptTarget)
 def on_btnEdit_clicked(self, widget):
     selected = self.tvHandlerDistros.getToggledValues(toggleColNr=0, valueColNr=2)
     for path in selected:
         de = EditDistro(path)
         services = []
         if exists(join(path, 'root/etc/apache2/apache2.conf')):
             services.append("apache2")
         if exists(join(path, 'root/etc/mysql/debian.cnf')):
             services.append("mysql")
         if services:
             msg = "If you need to update packages that depend on these services,\n" \
                   "you will need to manually start them:\n"
             for service in services:
                 msg += "\nservice %s start" % service
             msg += "\n\nWhen done:\n"
             for service in services:
                 msg += "\nservice %s stop" % service
             self.showInfo(_("Services detected"), msg, self.window)
             repaintGui()
         de.openTerminal()
    def on_btnUpgrade_clicked(self, widget):
        selected = self.tvHandlerDistros.getToggledValues(toggleColNr=0, valueColNr=2)
        upgraded = False
        for path in selected:
            upgraded = True
            rootPath = "%s/root" % path
            force = get_apt_force(rootPath)
            de = EditDistro(path)
            de.openTerminal("apt-get update")
            if exists(join(rootPath, 'etc/apache2/apache2.conf')):
                de.openTerminal("service apache2 start")
            if exists(join(rootPath, 'etc/mysql/debian.cnf')):
                de.openTerminal("service mysql start")
            de.openTerminal("apt-get -y %s -o Dpkg::Options::=\"--force-confnew\" dist-upgrade" % force)
            if exists(join(rootPath, 'etc/apache2/apache2.conf')):
                de.openTerminal("service apache2 stop")
            if exists(join(rootPath, 'etc/mysql/debian.cnf')):
                de.openTerminal("service mysql stop")

            # Cleanup old kernel and headers
            script = "rmoldkernel.sh"
            scriptSource = join(self.scriptDir, "files/{}".format(script))
            scriptTarget = join(rootPath, script)
            if exists(scriptSource):
                copy(scriptSource, scriptTarget)
                self.ec.run("chmod a+x '%s'" % scriptTarget)
                de.openTerminal("/bin/bash %s" % script)
                silent_remove(scriptTarget)

            # Download offline packages
            print(">> Start downloading offline packages")
            self.download_offline_packages(path)

        if upgraded and exists("/usr/bin/aplay") and exists(self.doneWav):
            self.ec.run("/usr/bin/aplay '%s'" % self.doneWav, False)