Ian Campbell
2013-Oct-10 09:37 UTC
[PATCH] pygrub: Support (/dev/xvda) style disk specifications
You get these if you install Debian Wheezy as HVM and then try to convert to PV. This is Debian bug #603391. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Tested-by: Tril <tril@metapipe.net> --- tools/pygrub/examples/debian-wheezy-hvm.grub2 | 104 +++++++++++++++++++++++++ tools/pygrub/src/GrubConf.py | 6 +- 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 tools/pygrub/examples/debian-wheezy-hvm.grub2 diff --git a/tools/pygrub/examples/debian-wheezy-hvm.grub2 b/tools/pygrub/examples/debian-wheezy-hvm.grub2 new file mode 100644 index 0000000..b5ee9e2 --- /dev/null +++ b/tools/pygrub/examples/debian-wheezy-hvm.grub2 @@ -0,0 +1,104 @@ + +# +# DO NOT EDIT THIS FILE +# +# It is automatically generated by grub-mkconfig using templates +# from /etc/grub.d and settings from /etc/default/grub +# + +### BEGIN /etc/grub.d/00_header ### +if [ -s $prefix/grubenv ]; then + load_env +fi +set default="0" +if [ "${prev_saved_entry}" ]; then + set saved_entry="${prev_saved_entry}" + save_env saved_entry + set prev_saved_entry+ save_env prev_saved_entry + set boot_once=true +fi + +function savedefault { + if [ -z "${boot_once}" ]; then + saved_entry="${chosen}" + save_env saved_entry + fi +} + +function load_video { + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus +} + +insmod part_msdos +insmod ext2 +set root=''(/dev/xvda,msdos1)'' +search --no-floppy --fs-uuid --set=root f395d5a0-4612-4872-806c-33cd37c152f0 +if loadfont /usr/share/grub/unicode.pf2 ; then + set gfxmode=640x480 + load_video + insmod gfxterm + insmod part_msdos + insmod ext2 + set root=''(/dev/xvda,msdos1)'' + search --no-floppy --fs-uuid --set=root f395d5a0-4612-4872-806c-33cd37c152f0 + set locale_dir=($root)/boot/grub/locale + set lang=en_US + insmod gettext +fi +terminal_output gfxterm +set timeout=5 +### END /etc/grub.d/00_header ### + +### BEGIN /etc/grub.d/05_debian_theme ### +set menu_color_normal=cyan/blue +set menu_color_highlight=white/blue +### END /etc/grub.d/05_debian_theme ### + +### BEGIN /etc/grub.d/10_linux ### +menuentry ''Debian GNU/Linux, with Linux 3.2.0-4-amd64'' --class debian --class gnu-linux --class gnu --class os { + load_video + insmod gzio + insmod part_msdos + insmod ext2 + set root=''(/dev/xvda,msdos1)'' + search --no-floppy --fs-uuid --set=root f395d5a0-4612-4872-806c-33cd37c152f0 + echo ''Loading Linux 3.2.0-4-amd64 ...'' + linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=f395d5a0-4612-4872-806c-33cd37c152f0 ro + echo ''Loading initial ramdisk ...'' + initrd /boot/initrd.img-3.2.0-4-amd64 +} +menuentry ''Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)'' --class debian --class gnu-linux --class gnu --class os { + load_video + insmod gzio + insmod part_msdos + insmod ext2 + set root=''(/dev/xvda,msdos1)'' + search --no-floppy --fs-uuid --set=root f395d5a0-4612-4872-806c-33cd37c152f0 + echo ''Loading Linux 3.2.0-4-amd64 ...'' + linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=f395d5a0-4612-4872-806c-33cd37c152f0 ro single + echo ''Loading initial ramdisk ...'' + initrd /boot/initrd.img-3.2.0-4-amd64 +} +### END /etc/grub.d/10_linux ### + +### BEGIN /etc/grub.d/20_linux_xen ### +### END /etc/grub.d/20_linux_xen ### + +### BEGIN /etc/grub.d/30_os-prober ### +### END /etc/grub.d/30_os-prober ### + +### BEGIN /etc/grub.d/40_custom ### +# This file provides an easy way to add custom menu entries. Simply type the +# menu entries you want to add after this comment. Be careful not to change +# the ''exec tail'' line above. +### END /etc/grub.d/40_custom ### + +### BEGIN /etc/grub.d/41_custom ### +if [ -f $prefix/custom.cfg ]; then + source $prefix/custom.cfg; +fi +### END /etc/grub.d/41_custom ### diff --git a/tools/pygrub/src/GrubConf.py b/tools/pygrub/src/GrubConf.py index 6324c62..cb853c9 100644 --- a/tools/pygrub/src/GrubConf.py +++ b/tools/pygrub/src/GrubConf.py @@ -67,7 +67,11 @@ class GrubDiskPart(object): return self._disk def set_disk(self, val): val = val.replace("(", "").replace(")", "") - self._disk = int(val[2:]) + if val.startswith("/dev/xvd"): + disk = val[len("/dev/xvd")] + self._disk = ord(disk)-ord(''a'') + else: + self._disk = int(val[2:]) disk = property(get_disk, set_disk) def get_part(self): -- 1.7.10.4
Ian Jackson
2013-Oct-14 16:40 UTC
Re: [PATCH] pygrub: Support (/dev/xvda) style disk specifications
Ian Campbell writes ("[PATCH] pygrub: Support (/dev/xvda) style disk specifications"):> You get these if you install Debian Wheezy as HVM and then try to convert to > PV. > > This is Debian bug #603391. > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com> > Tested-by: Tril <tril@metapipe.net>...> - self._disk = int(val[2:]) > + if val.startswith("/dev/xvd"): > + disk = val[len("/dev/xvd")] > + self._disk = ord(disk)-ord(''a'') > + else: > + self._disk = int(val[2:]) > disk = property(get_disk, set_disk)Cor, the existing code is quite a hack here, isn''t it ? Nevertheless, your change looks good to me. Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>