summaryrefslogtreecommitdiff
path: root/pygrub-boot-legacy-sles.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pygrub-boot-legacy-sles.patch')
-rw-r--r--pygrub-boot-legacy-sles.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/pygrub-boot-legacy-sles.patch b/pygrub-boot-legacy-sles.patch
new file mode 100644
index 0000000..47aed22
--- /dev/null
+++ b/pygrub-boot-legacy-sles.patch
@@ -0,0 +1,63 @@
+Index: xen-4.13.0-testing/tools/pygrub/src/pygrub
+===================================================================
+--- xen-4.13.0-testing.orig/tools/pygrub/src/pygrub
++++ xen-4.13.0-testing/tools/pygrub/src/pygrub
+@@ -453,7 +453,7 @@ class Grub:
+ self.cf.filename = f
+ break
+ if self.__dict__.get('cf', None) is None:
+- raise RuntimeError("couldn't find bootloader config file in the image provided.")
++ return
+ f = fs.open_file(self.cf.filename)
+ # limit read size to avoid pathological cases
+ buf = f.read(FS_READ_MAX)
+@@ -628,6 +628,20 @@ def run_grub(file, entry, fs, cfg_args):
+
+ g = Grub(file, fs)
+
++ # If missing config or grub has no menu entries to select, look for
++ # vmlinuz-xen and initrd-xen in /boot
++ if g.__dict__.get('cf', None) is None or len(g.cf.images) == 0 or re.search(r"xen(-pae)?\.gz",g.cf.images[0].kernel[1]):
++ if not list_entries:
++ chosencfg = { "kernel": None, "ramdisk": None, "args": "" }
++ chosencfg = sniff_xen_kernel(fs, incfg)
++ if chosencfg["kernel"] and chosencfg["ramdisk"]:
++ chosencfg["args"] = cfg_args
++ return chosencfg
++ if g.__dict__.get('cf', None) is None:
++ raise RuntimeError("couldn't find bootloader config file in the image provided.")
++ else:
++ return
++
+ if list_entries:
+ for i in range(len(g.cf.images)):
+ img = g.cf.images[i]
+@@ -723,6 +737,19 @@ def sniff_netware(fs, cfg):
+
+ return cfg
+
++def sniff_xen_kernel(fs, cfg):
++ if not cfg["kernel"]:
++ if fs.file_exists('/boot/vmlinuz-xen'):
++ cfg["kernel"] = '/boot/vmlinuz-xen'
++ elif fs.file_exists('/boot/vmlinuz-xenpae'):
++ cfg["kernel"] = '/boot/vmlinuz-xenpae'
++ if cfg["kernel"] and not cfg["ramdisk"]:
++ if fs.file_exists('/boot/initrd-xen'):
++ cfg["ramdisk"] = '/boot/initrd-xen'
++ elif fs.file_exists('/boot/initrd-xenpae'):
++ cfg["ramdisk"] = '/boot/initrd-xenpae'
++ return cfg
++
+ def format_sxp(kernel, ramdisk, args):
+ s = "linux (kernel %s)" % repr(kernel)
+ if ramdisk:
+@@ -806,7 +833,7 @@ if __name__ == "__main__":
+ debug = False
+ not_really = False
+ output_format = "sxp"
+- output_directory = "/var/run/xen/pygrub"
++ output_directory = "/var/run/xen"
+
+ # what was passed in
+ incfg = { "kernel": None, "ramdisk": None, "args": "" }