[Pkg-xen-devel] Bug#603391: Workaround PyGrub issue
Tril
tril at metapipe.net
Sun Sep 29 03:59:12 UTC 2013
Confirmed this issue. To reproduce: Install a fresh Wheezy AMD64 guest
under Xen 4.1 (hypervirtualized, boot from the
debian-7.1.0-amd64-CD-1.iso). Use "entire disk" automatic layout for
partitioning, this creates /dev/xvda1 for / and /dev/xvda5 for swap.
It will create /boot/grub/grub.cfg with many references to
(/dev/xvda,msdos1) which works fine when the machine is booted
hypervirtualized. PyGrub can not handle the /dev/ syntax for devices,
even though Grub can.
My details:
Package: xen-utils-4.1
Version: 4.1.4-3+deb7u1
Architecture: amd64
Confirmed workaround: inside the guest, create /boot/grub/device.map (NOT devices.map)
containing:
(hd0) /dev/xvda
run update-grub
shutdown the guest and reboot it using PyGrub. It will now work.
Backtrace from manual run of the buggy GrubConf.py:
# python /usr/lib/xen-4.1/lib/python/grub/GrubConf.py grub2 grub.cfg
WARNING:root:Unknown directive load_video
WARNING:root:Unknown directive terminal_output
WARNING:root:Unknown image directive load_video
Traceback (most recent call last):
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 462, in <module>
g = Grub2ConfigFile(sys.argv[2])
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 354, in __init__
_GrubConfigFile.__init__(self, fn)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 174, in __init__
self.parse()
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 413, in parse
self.add_image(Grub2Image(title, img))
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 320, in __init__
_GrubImage.__init__(self, title, lines)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 89, in __init__
self.reset(lines)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 105, in reset
self._parse(lines)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 100, in _parse
map(self.set_from_line, lines)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 330, in set_from_line
setattr(self, self.commands[com], arg.strip())
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 108, in set_root
self._root = GrubDiskPart(val)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 55, in __init__
(self.disk, self.part) = str.split(",", 2)
File "/usr/lib/xen-4.1/lib/python/grub/GrubConf.py", line 70, in set_disk
self._disk = int(val[2:])
ValueError: invalid literal for int() with base 10: 'ev/xvda'
Contents of grub.cfg triggering the error:
#
# 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 ###
More information about the Pkg-xen-devel
mailing list