Opened 12 years ago

Last modified 10 years ago

#296 closed defect

Xen pygrub cannot handle grub2 — at Version 1

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
+++ /usr/lib/xen-4.0/lib/python/grub/GrubConf.py
@@ -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
--- /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 (1)

comment:1 Changed 12 years ago by ezyang

  • Description modified (diff)
Note: See TracTickets for help on using tickets.