diff options
Diffstat (limited to 'booty/sparc.py')
-rw-r--r-- | booty/sparc.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/booty/sparc.py b/booty/sparc.py new file mode 100644 index 000000000..b094a4512 --- /dev/null +++ b/booty/sparc.py @@ -0,0 +1,127 @@ +import os + +from booty import BootyNoKernelWarning +from bootloaderInfo import * + +class sparcBootloaderInfo(bootloaderInfo): + def writeSilo(self, instRoot, bl, kernelList, + chainList, defaultDev, justConfigFile): + + try: + bootDev = self.storage.fsset.mountpoints["/boot"] + + mf = '/silo.message' + cf = "/boot/silo.conf" + mfdir = '/boot' + cfPath = "" + if not os.path.isdir(instRoot + "/boot"): + os.mkdir(instRoot + "/boot") + except KeyError: + bootDev = self.storage.fsset.rootDevice + + cf = "/etc/silo.conf" + mfdir = '/etc' + cfPath = "/boot" + + f = open(instRoot + mfdir + mf, "w+") + f.write("Welcome to %s!\nHit <TAB> for boot options\n\n" % productName) + f.close() + os.chmod(instRoot + mfdir + mf, 0600) + + f = open(instRoot + cf, "w+") + f.write("# silo.conf generated by anaconda\n\n") + + f.write("#boot=%s\n" % (bootDev.path,)) + f.write("message=%s\n" % (mf,)) + f.write("timeout=%s\n" % (self.timeout or 50)) + + (name, partNum) = getDiskPart(bootDev, self.storage) + partno = partNum + 1 + f.write("partition=%s\n" % (partno,)) + + if self.password: + f.write("password=%s\n" % (self.password,)) + f.write("restricted\n") + + f.write("default=%s\n" % (kernelList[0][0],)) + f.write("\n") + + rootDev = self.storage.fsset.rootDevice + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%s/vmlinuz%s" % (cfPath, kernelTag) + + f.write("image=%s\n" % (kernelFile,)) + f.write("\tlabel=%s\n" % (label,)) + f.write("\tread-only\n") + + initrd = self.makeInitrd(kernelTag) + if os.access(instRoot + initrd, os.R_OK): + f.write("\tinitrd=%s/initrd%s.img\n" % (cfPath, kernelTag)) + + append = "%s" % (self.args.get(),) + + realroot = rootDev.fstabSpec + if rootIsDevice(realroot): + f.write("\troot=%s\n" % (realroot,)) + else: + if len(append) > 0: + append = "%s root=%s" % (append, realroot) + else: + append = "root=%s" % (realroot,) + + if len(append) > 0: + f.write("\tappend=\"%s\"\n" % (append,)) + f.write("\n") + + f.close() + os.chmod(instRoot + cf, 0600) + + # FIXME: hack to make sure things are written to disk + import isys + isys.sync() + isys.sync() + isys.sync() + + backup = "%s/backup.b" % (cfPath,) + sbinargs = ["/sbin/silo", "-f", "-C", cf, "-S", backup] + # TODO!!! FIXME!!! XXX!!! + # butil is not defined!!! - assume this is in rhpl now? + if butil.getSparcMachine() == "sun4u": + sbinargs += ["-u"] + else: + sbinargs += ["-U"] + + if not flags.test: + iutil.execWithRedirect(sbinargs[0], + sbinargs, + stdout = "/dev/tty5", + stderr = "/dev/tty5", + root = instRoot) + + if (not os.access(instRoot + "/etc/silo.conf", os.R_OK) and + os.access(instRoot + "/boot/etc/silo.conf", os.R_OK)): + os.symlink("../boot/etc/silo.conf", + instRoot + "/etc/silo.conf") + + return "" + + def setPassword(self, val, isCrypted = 1): + # silo just handles the password unencrypted + self.password = val + + def write(self, instRoot, bl, kernelList, chainList, + defaultDev, justConfig): + if len(kernelList) >= 1: + self.writeSilo(instRoot, bl, kernelList, chainList, + defaultDev, justConfig) + else: + raise BootyNoKernelWarning + + def __init__(self, storage): + bootloaderInfo.__init__(self, storage) + self.useSiloVal = 1 + self.kernelLocation = "/boot" + self._configdir = "/etc" + self._configname = "silo.conf" |