Opened 13 years ago
Closed 11 years ago
#296 closed defect (wontfix)
Xen pygrub cannot handle grub2
| Reported by: | ezyang | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | Fedora 20 |
| Component: | internals | Keywords: | |
| Cc: |
Description (last modified by ezyang)
Xen needs this patch series http://old-list-archives.xen.org/archives/html/xen-devel/2011-10/msg01404.html unfortunately they haven't been backported to Xen 4.0 or Xen 4.1 yet. (We specifically need only patches 2, 4 and 5). The pygrub executable patch is fuzzy, but easy to manually apply. Otherwise you won't be able to boot because the bootloader returns no data. Currently c-o has had its pygrub manually patched with these patches; we should talk to backports or package up these changes ourselves. The idea is to just install another pygrub, and then ask Xen to use it instead.
--- /usr/lib/xen-4.0/lib/python/grub/GrubConf.py.orig 2012-08-14 10:28:54.000000000 -0400
+++ /usr/lib/xen-4.0/lib/python/grub/GrubConf.py 2012-09-05 16:24:37.061357415 -0400
@@ -414,6 +414,8 @@
if self.commands.has_key(com):
if self.commands[com] is not None:
+ if arg.strip() == "${saved_entry}":
+ arg = "0"
setattr(self, self.commands[com], arg.strip())
else:
logging.info("Ignored directive %s" %(com,))
--- /usr/lib/xen-4.0/lib/python/grub/GrubConf.py.orig 2012-09-08 07:49:38.000000000 -0400
+++ /usr/lib/xen-4.0/lib/python/grub/GrubConf.py 2012-11-23 11:35:57.627617131 -0500
@@ -368,6 +368,7 @@
in_function = False
img = None
title = ""
+ menu_level=0
for l in lines:
l = l.strip()
# skip blank lines
@@ -394,10 +395,18 @@
img = []
title = title_match.group(1)
continue
+
+ if l.startswith("submenu"):
+ menu_level += 1
+ continue
if l.startswith("}"):
if img is None:
- raise RuntimeError, "syntax error: closing brace without menuentry"
+ if menu_level > 0:
+ menu_level -= 1
+ continue
+ else:
+ raise RuntimeError, "syntax error: closing brace without menuentry"
self.add_image(Grub2Image(title, img))
img = None
@@ -414,6 +423,8 @@
if self.commands.has_key(com):
if self.commands[com] is not None:
+ if arg.strip() == "${saved_entry}":
+ arg = "0"
setattr(self, self.commands[com], arg.strip())
else:
logging.info("Ignored directive %s" %(com,))
--- /usr/lib/xen-4.0/bin/pygrub.orig 2012-09-05 16:28:03.105813164 -0400
+++ /usr/lib/xen-4.0/bin/pygrub 2012-09-05 16:29:57.168849770 -0400
@@ -386,7 +386,8 @@
["/boot/grub/menu.lst", "/boot/grub/grub.conf",
"/grub/menu.lst", "/grub/grub.conf"]) + \
map(lambda x: (x,grub.GrubConf.Grub2ConfigFile),
- ["/boot/grub/grub.cfg", "/grub/grub.cfg"]) + \
+ ["/boot/grub/grub.cfg", "/grub/grub.cfg",
+ "/boot/grub2/grub.cfg", "/grub2/grub.cfg"]) + \
map(lambda x: (x,grub.ExtLinuxConf.ExtLinuxConfigFile),
["/boot/isolinux/isolinux.cfg",
"/boot/extlinux.conf"])
Change History (6)
comment:1 Changed 13 years ago by ezyang
- Description modified (diff)
comment:2 Changed 13 years ago by adehnert
comment:3 Changed 13 years ago by ezyang
- Description modified (diff)
comment:4 Changed 12 years ago by achernya
It's likely that this will be fixed by upgrading to Wheezy, which should be releasing soon.
comment:5 Changed 12 years ago by achernya
Indeed, Wheezy is able to deal just fine, although it looks like there are a few issues with using the xl toolstack; pygrub had to be symlinked to /usr/bin/pygrub, and they appear to have broken interactive mode, necessitating we run it with "-q".
comment:6 Changed 11 years ago by achernya
- Resolution set to wontfix
- Status changed from new to closed
No longer relevant, since we're on vSphere

xen-utils-4.0 now on hold with:
Obviously, this isn't a good solution. The patch for the underlying bug should really be packaged and ideally Debian poked to take it, so that we can resume upgrading to upstream releases without fear.