I recently updated the kernel on an Ubuntu 11.04 PVM domU. The dom0 is an up
to date Debian Squeeze host (Xen 4.0.1). Attempting to start the domU after
this with xm create gives "Error: Boot loader didn''t return any
data!". I
ran pygrub against the domU manually, I got the following:
Traceback (most recent call last):
File "/usr/lib/xen-default/bin/pygrub", line 669, in <module>
chosencfg = run_grub(file, entry, fs, incfg["args"])
File "/usr/lib/xen-default/bin/pygrub", line 549, in run_grub
g = Grub(file, fs)
File "/usr/lib/xen-default/bin/pygrub", line 205, in __init__
self.read_config(file, fs)
File "/usr/lib/xen-default/bin/pygrub", line 413, in read_config
self.cf.parse(buf)
File "/usr/lib/xen-4.0/bin/../lib/python/grub/GrubConf.py", line
400, in
parse
raise RuntimeError, "syntax error: closing brace without
menuentry"
RuntimeError: syntax error: closing brace without menuentry
Looking at GrubConf.py, around line 400 we have this bit of logic:
title_match = re.match(''^menuentry
["\''](.*)["\''] (.*){'', l)
if title_match:
if img is not None:
raise RuntimeError, "syntax error: cannot nest
menuentry
(%d %s)" % (len(img),img)
img = []
title = title_match.group(1)
continue
if l.startswith("}"):
if img is None:
raise RuntimeError, "syntax error: closing brace
without
menuentry"
Looking at the grub.cfg, I see the following section:
menuentry ''Ubuntu, with Linux 2.6.38-10-generic'' --class
ubuntu --class
gnu-linux --class gnu --class os {
<snip>
}
menuentry ''Ubuntu, with Linux 2.6.38-10-generic (recovery
mode)'' --class
ubuntu --class gnu-linux --class gnu --class os {
<snip>
}
submenu "Previous Linux versions" {
menuentry ''Ubuntu, with Linux 2.6.38-8-generic'' --class ubuntu
--class
gnu-linux --class gnu --class os {
<snip>
}
menuentry ''Ubuntu, with Linux 2.6.38-8-generic (recovery
mode)'' --class
ubuntu --class gnu-linux --class gnu --class os {
<snip>
}
}
Note that this grub.cfg contains a submenu entry. I''m not particular
familiar with python, but it appears that GrubConf.py checks all lines with
a closing bracket for a matching menuentry line, and this submenu causes
that check to fail. There''s also the error about nesting menuentries,
but I
see not logic for matching against a submenu. The workaround is to remove
the submenu and it''s closing bracket from the grub.cfg, but the fix
would be
to add support for submenus to pygrub.
_______________________________________________
Xen-users mailing list
Xen-users@lists.xensource.com
http://lists.xensource.com/xen-users
On Thu, Jul 14, 2011 at 11:51:25AM -0400, Michael MacLeod wrote:> I recently updated the kernel on an Ubuntu 11.04 PVM domU. The dom0 is an > up to date Debian Squeeze host (Xen 4.0.1). Attempting to start the domU > after this with xm create gives "Error: Boot loader didn''t return any > data!". I ran pygrub against the domU manually, I got the following: > Traceback (most recent call last): > File "/usr/lib/xen-default/bin/pygrub", line 669, in <module> > chosencfg = run_grub(file, entry, fs, incfg["args"]) > File "/usr/lib/xen-default/bin/pygrub", line 549, in run_grub > g = Grub(file, fs) > File "/usr/lib/xen-default/bin/pygrub", line 205, in __init__ > self.read_config(file, fs) > File "/usr/lib/xen-default/bin/pygrub", line 413, in read_config > self.cf.parse(buf) > File "/usr/lib/xen-4.0/bin/../lib/python/grub/GrubConf.py", line 400, in > parse > raise RuntimeError, "syntax error: closing brace without menuentry" > RuntimeError: syntax error: closing brace without menuentry > Looking at GrubConf.py, around line 400 we have this bit of logic: > title_match = re.match(''^menuentry ["\''](.*)["\''] (.*){'', l) > if title_match: > if img is not None: > raise RuntimeError, "syntax error: cannot nest > menuentry (%d %s)" % (len(img),img) > img = [] > title = title_match.group(1) > continue > if l.startswith("}"): > if img is None: > raise RuntimeError, "syntax error: closing brace > without menuentry" > Looking at the grub.cfg, I see the following section: > menuentry ''Ubuntu, with Linux 2.6.38-10-generic'' --class ubuntu --class > gnu-linux --class gnu --class os { > <snip> > } > menuentry ''Ubuntu, with Linux 2.6.38-10-generic (recovery mode)'' --class > ubuntu --class gnu-linux --class gnu --class os { > <snip> > } > submenu "Previous Linux versions" { > menuentry ''Ubuntu, with Linux 2.6.38-8-generic'' --class ubuntu --class > gnu-linux --class gnu --class os { > <snip> > } > menuentry ''Ubuntu, with Linux 2.6.38-8-generic (recovery mode)'' --class > ubuntu --class gnu-linux --class gnu --class os { > <snip> > } > } > Note that this grub.cfg contains a submenu entry. I''m not particular > familiar with python, but it appears that GrubConf.py checks all lines > with a closing bracket for a matching menuentry line, and this submenu > causes that check to fail. There''s also the error about nesting > menuentries, but I see not logic for matching against a submenu. The > workaround is to remove the submenu and it''s closing bracket from the > grub.cfg, but the fix would be to add support for submenus to pygrub.Feel free to contribute such a patch :) -- Pasi _______________________________________________ Xen-users mailing list Xen-users@lists.xensource.com http://lists.xensource.com/xen-users
Apparently Analagous Threads
- Bug#680479: xen-utils-4.0: pygrub does not support grub2 submenus
- Bug#599243: xen-utils-4.0: pygrub does not understand grub2 partition types (e.g. (hd0, msdos1) instead of (hd0, 1))
- Bug#603391: Workaround PyGrub issue
- Bug#603391: Bug#603391: Workaround PyGrub issue
- Bug#603391: pygrub: unintelligible error messages