Tril
2013-Oct-01 16:10 UTC
[Pkg-xen-devel] Bug#603391: Bug#603391: Workaround PyGrub issue
Sorry didn't work. Aso it will only handle this special case, not the
general case of /dev/something.
# python GrubConf.py grub2 /home/tehadmin/snail-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 "GrubConf.py", line 467, in <module>
g = Grub2ConfigFile(sys.argv[2])
File "GrubConf.py", line 359, in __init__
_GrubConfigFile.__init__(self, fn)
File "GrubConf.py", line 179, in __init__
self.parse()
File "GrubConf.py", line 418, in parse
self.add_image(Grub2Image(title, img))
File "GrubConf.py", line 325, in __init__
_GrubImage.__init__(self, title, lines)
File "GrubConf.py", line 94, in __init__
self.reset(lines)
File "GrubConf.py", line 110, in reset
self._parse(lines)
File "GrubConf.py", line 105, in _parse
map(self.set_from_line, lines)
File "GrubConf.py", line 335, in set_from_line
setattr(self, self.commands[com], arg.strip())
File "GrubConf.py", line 113, in set_root
self._root = GrubDiskPart(val)
File "GrubConf.py", line 55, in __init__
(self.disk, self.part) = str.split(",", 2)
File "GrubConf.py", line 73, in set_disk
self.disk = ord(disk)-ord('a')
File "GrubConf.py", line 69, in set_disk
val = val.replace("(", "").replace(")",
"")
AttributeError: 'int' object has no attribute 'replace'
> 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):
>
>
Ian Campbell
2013-Oct-01 19:03 UTC
[Pkg-xen-devel] Bug#603391: Bug#603391: Workaround PyGrub issue
On Tue, 2013-10-01 at 09:10 -0700, Tril wrote:> Sorry didn't work.Hrm, odd, it worked when based on the upstream xen-unstable tree. Perhaps something else is needed against 4.1 for the backport to work.> Aso it will only handle this special case, not the > general case of /dev/something.Right, in this context there isn't really a general case since for things to work with PV it has to be /dev/xvd*. The only other plausible option might be /dev/hd* which I'm happy to fault in as and when someone demonstrates this in practice.> # python GrubConf.py grub2 /home/tehadmin/snail-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 "GrubConf.py", line 467, in <module> > g = Grub2ConfigFile(sys.argv[2]) > File "GrubConf.py", line 359, in __init__ > _GrubConfigFile.__init__(self, fn) > File "GrubConf.py", line 179, in __init__ > self.parse() > File "GrubConf.py", line 418, in parse > self.add_image(Grub2Image(title, img)) > File "GrubConf.py", line 325, in __init__ > _GrubImage.__init__(self, title, lines) > File "GrubConf.py", line 94, in __init__ > self.reset(lines) > File "GrubConf.py", line 110, in reset > self._parse(lines) > File "GrubConf.py", line 105, in _parse > map(self.set_from_line, lines) > File "GrubConf.py", line 335, in set_from_line > setattr(self, self.commands[com], arg.strip()) > File "GrubConf.py", line 113, in set_root > self._root = GrubDiskPart(val) > File "GrubConf.py", line 55, in __init__ > (self.disk, self.part) = str.split(",", 2) > File "GrubConf.py", line 73, in set_disk > self.disk = ord(disk)-ord('a') > File "GrubConf.py", line 69, in set_disk > val = val.replace("(", "").replace(")", "") > AttributeError: 'int' object has no attribute 'replace'Are you sure you edited the file correctly? The changes should be after the val.replace line! Ian.> > 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): > > > > >
Tril
2013-Oct-08 04:13 UTC
[Pkg-xen-devel] Bug#603391: Bug#603391: Workaround PyGrub issue
I double-checked, I edited the file correctly. I don't know python much, but it seems the lower stack traces are deeper than the upper ones, which means somehow your calling "self.disk =" inside a set_disk method seems to have re-entered itself as if set_disk is a handler for self.disk =...