Fix pygrub for IA64 support.

Signed-off-by: Shinya Kuwamura <kuwa@jp.fujitsu.com>
Signed-off-by: Tomohiro Takahashi <takatom@jp.fujitsu.com>
This commit is contained in:
kfraser@localhost.localdomain committed 2007-04-11 15:36:04 +01:00
1 parent a6954d648b
commit 29f97ec479
2 files changed
+161 -9

No files matched your search

+147
View File
@@ -0,0 +1,147 @@
#
#LiloConf.py
#
import sys, re, os
import logging
import GrubConf
class LiloImage(object):
def __init__(self, lines, path):
self.reset(lines, path)
def __repr__(self):
return ("title: %s\n"
" root: %s\n"
" kernel: %s\n"
" args: %s\n"
" initrd: %s\n" %(self.title, self.root, self.kernel,
self.args, self.initrd))
def reset(self, lines, path):
self._root = self._initrd = self._kernel = self._args = None
self.title = ""
self.lines = []
self.path = path
map(self.set_from_line, lines)
self.root = "" # dummy
def set_from_line(self, line, replace = None):
(com, arg) = GrubConf.grub_exact_split(line, 2)
if self.commands.has_key(com):
if self.commands[com] is not None:
exec("%s = r\'%s\'" %(self.commands[com], re.sub('^"(.+)"$', r"\1", arg.strip())))
else:
logging.info("Ignored image directive %s" %(com,))
else:
logging.warning("Unknown image directive %s" %(com,))
# now put the line in the list of lines
if replace is None:
self.lines.append(line)
else:
self.lines.pop(replace)
self.lines.insert(replace, line)
def set_kernel(self, val):
self._kernel = (None, self.path + "/" + val)
def get_kernel(self):
return self._kernel
kernel = property(get_kernel, set_kernel)
def set_initrd(self, val):
self._initrd = (None, self.path + "/" + val)
def get_initrd(self):
return self._initrd
initrd = property(get_initrd, set_initrd)
# set up command handlers
commands = { "label": "self.title",
"root": "self.root",
"rootnoverify": "self.root",
"image": "self.kernel",
"initrd": "self.initrd",
"append": "self.args",
"read-only": None,
"chainloader": None,
"module": None}
class LiloConfigFile(object):
def __init__(self, fn = None):
self.filename = fn
self.images = []
self.timeout = -1
self._default = 0
if fn is not None:
self.parse()
def parse(self, buf = None):
if buf is None:
if self.filename is None:
raise ValueError, "No config file defined to parse!"
f = open(self.filename, 'r')
lines = f.readlines()
f.close()
else:
lines = buf.split("\n")
path = os.path.dirname(self.filename)
img = []
for l in lines:
l = l.strip()
# skip blank lines
if len(l) == 0:
continue
# skip comments
if l.startswith('#'):
continue
# new image
if l.startswith("image"):
if len(img) > 0:
self.add_image(LiloImage(img, path))
img = [l]
continue
if len(img) > 0:
img.append(l)
continue
(com, arg) = GrubConf.grub_exact_split(l, 2)
if self.commands.has_key(com):
if self.commands[com] is not None:
exec("%s = r\"%s\"" %(self.commands[com], arg.strip()))
else:
logging.info("Ignored directive %s" %(com,))
else:
logging.warning("Unknown directive %s" %(com,))
if len(img) > 0:
self.add_image(LiloImage(img, path))
def add_image(self, image):
self.images.append(image)
def _get_default(self):
for i in range(0, len(self.images) - 1):
if self.images[i].title == self._default:
return i
return 0
def _set_default(self, val):
self._default = val
default = property(_get_default, _set_default)
commands = { "default": "self.default",
"timeout": "self.timeout",
"prompt": None,
"relocatable": None,
}
if __name__ == "__main__":
if sys.argv < 2:
raise RuntimeError, "Need a grub.conf to read"
g = LiloConfigFile(sys.argv[1])
for i in g.images:
print i #, i.title, i.root, i.kernel, i.args, i.initrd
print g.default
+14 -9
View File
@@ -16,6 +16,7 @@
import os, sys, string, struct, tempfile, re
import copy
import logging
import platform
import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
import getopt
@@ -24,6 +25,7 @@ sys.path = [ '/usr/lib/python' ] + sys.path
import fsimage
import grub.GrubConf
import grub.LiloConf
PYGRUB_VER = 0.5
@@ -353,7 +355,13 @@ class Grub:
if not os.access(fn, os.R_OK):
raise RuntimeError, "Unable to access %s" %(fn,)
self.cf = grub.GrubConf.GrubConfigFile()
if platform.machine() == 'ia64':
self.cf = grub.LiloConf.LiloConfigFile()
file_list = ("/efi/redhat/elilo.conf",)
else:
self.cf = grub.GrubConf.GrubConfigFile()
file_list = ("/boot/grub/menu.lst", "/boot/grub/grub.conf",
"/grub/menu.lst", "/grub/grub.conf")
if not fs:
# set the config file and parse it
@@ -361,18 +369,15 @@ class Grub:
self.cf.parse()
return
grubfile = None
for f in ("/boot/grub/menu.lst", "/boot/grub/grub.conf",
"/grub/menu.lst", "/grub/grub.conf"):
for f in file_list:
if fs.file_exists(f):
grubfile = f
self.cf.filename = f
break
if grubfile is None:
raise RuntimeError, "we couldn't find grub config file in the image provided."
f = fs.open_file(grubfile)
if self.cf.filename is None:
raise RuntimeError, "couldn't find bootloader config file in the image provided."
f = fs.open_file(self.cf.filename)
buf = f.read()
del f
# then parse the grub config
self.cf.parse(buf)
def run(self):
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.