from installclass import getBaseInstallClass from rhpl.translate import N_, _ from constants import * import os import iutil import rhpl baseclass = getBaseInstallClass() import logging log = logging.getLogger("anaconda") import string class Script: def __repr__(self): str = ("(s: '%s' i: %s c: %d)") % \ (self.script, self.interp, self.inChroot) return string.replace(str, "\n", "|") def __init__(self, script, interp, inChroot, logfile = None): self.script = script self.interp = interp self.inChroot = inChroot self.logfile = logfile def run(self, chroot, serial): import tempfile import os.path if self.inChroot: scriptRoot = chroot else: scriptRoot = "/" (fd, path) = tempfile.mkstemp("", "sme-script-", scriptRoot + "/tmp") os.write(fd, self.script) os.close(fd) os.chmod(path, 0700) if self.logfile is not None: messages = self.logfile elif serial: messages = "%s.log" % path else: messages = "/dev/tty3" rc = iutil.execWithRedirect(self.interp, ["/tmp/%s" % os.path.basename(path)], stdin = messages, stdout = messages, stderr = messages, root = scriptRoot) if rc != 0: log.error("WARNING - Error code %s encountered running a sme script", rc) os.unlink(path) if serial or self.logfile is not None: os.chmod("%s" % messages, 0600) class InstallClass(baseclass): name = N_("Upgrade Existing System") pixmap = "upgrade.png" sortPriority = 999999 parentClass = ( _("Upgrade"), "upgrade.png" ) def requiredDisplayMode(self): return 't' def setSteps(self, dispatch): dispatch.setStepList( "language", "keyboard", "findrootparts", "findinstall", "installtype", "partitionobjinit", "upgrademount", "upgrademigfind", "upgrademigratefs", "upgradecontinue", "reposetup", "upgbootloader", "checkdeps", "dependencies", "postselection", "install", "migratefilesystems", "preinstallconfig", "installpackages", "postinstallconfig", "instbootloader", "dopostaction", "methodcomplete", "copylogs", "complete" ) if iutil.getPPCMachine() == "iSeries": dispatch.skipStep("bootloadersetup", skip = 0) if rhpl.getArch() != "i386" and rhpl.getArch() != "x86_64": dispatch.skipStep("bootloader") dispatch.skipStep("bootloaderadvanced") if rhpl.getArch() != "i386" and rhpl.getArch() != "x86_64": dispatch.skipStep("upgbootloader") def postAction(self, anaconda, serial): win = anaconda.intf.waitWindow(_("Post Upgrade Script"), _("The post upgrade script is running...")) script = ( "#!/bin/sh\nmkdir /var/lib/dhcp; /sbin/syslogd ; sleep 2; /sbin/e-smith/signal-event post-upgrade\n" ) s = Script(script, interp="/bin/sh", inChroot=1) log.info("%s", s) s.run(anaconda.rootPath, serial) win.pop() def setInstallData(self, anaconda): baseclass.setInstallData(self, anaconda) anaconda.id.setUpgrade(True) def __init__(self, expert): baseclass.__init__(self, expert)