diff options
author | Erik Troan <ewt@redhat.com> | 2000-03-22 00:54:57 +0000 |
---|---|---|
committer | Erik Troan <ewt@redhat.com> | 2000-03-22 00:54:57 +0000 |
commit | 80a7b815144f8689120d6258d922ff505709d7fd (patch) | |
tree | 4b62e2a3d59053e95aabb9e9b0be2bdc131a4fb2 | |
parent | 3a6723b1339b73ede14d4878c8b742c4dad8047b (diff) | |
download | anaconda-80a7b815144f8689120d6258d922ff505709d7fd.tar.gz anaconda-80a7b815144f8689120d6258d922ff505709d7fd.tar.xz anaconda-80a7b815144f8689120d6258d922ff505709d7fd.zip |
*** empty log message ***
-rw-r--r-- | eli.py | 121 |
1 files changed, 121 insertions, 0 deletions
@@ -0,0 +1,121 @@ +import os +from lilo import LiloConfigFile +import isys +import iutil + +class EliConfiguration: + + def setEliImages(self, images): + self.eliImages = images + + def getEliImages(self, fstab): + for (mntpoint, device, fsystem, doFormat, size) in \ + fstab.mountList(): + + if mntpoint == '/': + self.eliImages[device] = ("linux", 2) + self.default = "linux" + + return (self.eliImages, self.default) + + def install(self, fstab, instRoot, hdList, upgrade): + # If the root partition is on a loopback device, lilo won't work! + if fstab.rootOnLoop(): + return + + if not self.eliImages: + (images, default) = self.getEliImages(fstab) + self.setEliImages(images) + + # on upgrade read in the eli config file + eli = LiloConfigFile () + perms = 0644 + if os.access (instRoot + '/boot/eli.cfg', os.R_OK): + perms = os.stat(instRoot + '/boot/eli.conf')[0] & 0777 + #lilo.read (instRoot + '/boot/eli.cfg') + os.rename(instRoot + '/boot/eli.cfg', + instRoot + '/boot/eli.cfg.rpmsave') + + # Remove any invalid entries that are in the file; we probably + # just removed those kernels. While we're here, build an index + # to the already-configured (and valid) eli images by the eli + # label, as we can normally only get them by filename which isn't + # easily done. + imagesByLabel = {} + for image in eli.listImages(): + (fsType, sl) = eli.getImage(image) + if fsType == "other": continue + if not os.access(instRoot + image, os.R_OK): + eli.delImage(image) + else: + imagesByLabel[sl.getEntry('label')] = image + + bootpart = fstab.getBootDevice() + boothd = fstab.getMbrDevice() + + eli.addEntry("timeout", "50", replace = 0) + + rootDev = fstab.getRootDevice () + if rootDev: + # strip off the filesystem; we don't need it + rootDev = rootDev[0] + else: + raise RuntimeError, "Installing lilo, but there is no root device" + + kernelList = [] + otherList = [] + + main = self.default + + for (drive, (label, eliType)) in self.eliImages.items (): + if (drive == rootDev) and label: + main = label + elif label: + otherList.append (label, "/dev/" + drive) + + eli.addEntry("default", self.default) + + label = main + + kernelList.append((label, hdList['kernel'], "")) + + for (label, kernel, tag) in kernelList: + if imagesByLabel.has_key(label): + (fsType, sl) = eli.getImage(imagesByLabel[label]) + eli.delImage(imagesByLabel[label]) + else: + sl = LiloConfigFile() + + kernelTag = "-%s-%s%s" % (kernel['version'], kernel['release'], tag) + kernelFile = "/boot/vmlinuz" + kernelTag + + sl.addEntry("label", label) + sl.addEntry("read-only") + sl.addEntry("root", '/dev/' + rootDev) + + if self.eliAppend: + sl.addEntry('append', '"%s"' % (self.eliAppend,)) + + eli.addImage ("image", kernelFile, sl) + + eli.write(instRoot + "/boot/eli.cfg", perms = perms) + + def __init__(self): + self.eliImages = {} + self.eliAppend = None + self.default = None + +if __name__ == "__main__": + config = LiloConfigFile () + config.read ('/etc/lilo.conf') + print config + print "image list", config.listImages() + config.delImage ('/boot/vmlinuz-2.2.5-15') + print '----------------------------------' + config = LiloConfigFile () + config.read ('/etc/lilo.conf') + print config + print '----------------------------------' + print config.getImage('/boot/vmlinuz-2.2.5-15') + + |