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 11 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

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.

Last edited 11 years ago by adehnert (previous) (diff)

comment:3 Changed 11 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.