--- cdrom.image/updates/smeupgradeclass.py 2005/07/30 07:28:39 1.1 +++ cdrom.image/updates/smeupgradeclass.py 2008/03/15 18:11:42 1.10.2.4 @@ -1,11 +1,63 @@ -from installclass import BaseInstallClass +from installclass import getBaseInstallClass from rhpl.translate import N_, _ -from rhpl.log import log - +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") -class InstallClass(BaseInstallClass): + 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 @@ -20,15 +72,18 @@ class InstallClass(BaseInstallClass): "language", "keyboard", "findrootparts", + "findinstall", + "installtype", "partitionobjinit", "upgrademount", "upgrademigfind", "upgrademigratefs", "upgradecontinue", - "readcomps", - "findpackages", + "reposetup", + "upgbootloader", "checkdeps", "dependencies", + "postselection", "install", "migratefilesystems", "preinstallconfig", @@ -41,38 +96,29 @@ class InstallClass(BaseInstallClass): "complete" ) - def postAction(self, rootPath, serial): - if serial: - messages = "/tmp/postupgrade.log" - else: - messages = "/dev/tty3" - args = [ "/usr/sbin/lokkit", "--quiet", "--nostart", "--selinux=disabled"] - - try: - iutil.execWithRedirect(args[0], args, root=rootPath, - stdout=messages, stderr=messages) - except RuntimeError, msg: - log ("lokkit run failed: %s", msg) - except OSError, (errno, msg): - log ("lokkit run failed: %s", msg) - - path = rootPath + "/tmp/postupgrade.sh" - cmds = ["/sbin/syslogd &", "sleep 2", "/sbin/e-smith/signal-event post-upgrade"] - - f = open(path, "w") - f.writelines(cmds) - f.close - os.chmod(path, 0700) + if iutil.getPPCMachine() == "iSeries": + dispatch.skipStep("bootloadersetup", skip = 0) - rc = iutil.execWithRedirect("/bin/sh", ["/bin/sh", "/tmp/postupgrade.sh"], - stdout=messages, stderr=messages, root=rootPath) - if rc != 0: - log("WARNING - Error code %s encountered running postupgrade script", rc) - os.unlink(path) - - def setInstallData(self, id): - BaseInstallClass.setInstallData(self, id) - id.upgrade.set(1) + 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 -p /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): - BaseInstallClass.__init__(self, expert) + baseclass.__init__(self, expert)