summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Troan <ewt@redhat.com>2000-03-22 00:54:57 +0000
committerErik Troan <ewt@redhat.com>2000-03-22 00:54:57 +0000
commit80a7b815144f8689120d6258d922ff505709d7fd (patch)
tree4b62e2a3d59053e95aabb9e9b0be2bdc131a4fb2
parent3a6723b1339b73ede14d4878c8b742c4dad8047b (diff)
downloadanaconda-80a7b815144f8689120d6258d922ff505709d7fd.tar.gz
anaconda-80a7b815144f8689120d6258d922ff505709d7fd.tar.xz
anaconda-80a7b815144f8689120d6258d922ff505709d7fd.zip
*** empty log message ***
-rw-r--r--eli.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/eli.py b/eli.py
new file mode 100644
index 000000000..b7475e63e
--- /dev/null
+++ b/eli.py
@@ -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')
+
+