Opened 12 years ago

Closed 10 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 12 years ago by ezyang

  • Description modified (diff)

comment:2 Changed 12 years ago by adehnert

xen-utils-4.0 now on hold with:

aptitude hold xen-utils-4.0 
echo "xen-utils-4.0 hold" | dpkg --set-selections

This fix should really be packaged and ideally Debian poked to take it.

Version 0, edited 12 years ago by adehnert (next)

comment:3 Changed 12 years ago by ezyang

  • Description modified (diff)

comment:4 Changed 11 years ago by achernya

It's likely that this will be fixed by upgrading to Wheezy, which should be releasing soon.

comment:5 Changed 11 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 10 years ago by achernya

  • Resolution set to wontfix
  • Status changed from new to closed

No longer relevant, since we're on vSphere

Note: See TracTickets for help on using tickets.