On 12.07.2012 [13:33:16 -0300], Cleber Rosa wrote: > On 07/12/2012 08:55 AM, Cleber Rosa wrote: > >On 07/12/2012 05:07 AM, Nishanth Aravamudan wrote: > >>On 12.07.2012 [00:20:04 -0700], Nishanth Aravamudan wrote: > >>>Hi all, > >>> > >>>After finally bothering to just put a proxy in place locally, I got > >>>grubby 8.15 to build, but it doesn't seem to make boottool happy :) > >>> > >>>07/12 02:53:12 INFO | boottool:0667| Installing grubby > >>>because currently installed version (8.11) is not recent > >>>enough > >>>07/12 02:53:18 DEBUG| boottool:0674| Installed: grubby version 8.15 > >>>07/12 02:53:18 ERROR| job:1338| JOB ERROR: Unhandled > >>>TypeError: sequence item 0: expected string, NoneType found > >>>Traceback (most recent call last): > >>> File "/usr/local/autotest/job.py", line 1089, in _run_step_fn > >>> exec('__ret = %s(*__args, **__dargs)' % fn, local_vars, > >>>local_vars) > >>> File "<string>", line 1, in <module> > >>> File "/usr/local/autotest/control.autoserv", line 16, in boot_kernel > >>> host.cleanup_kernels() > >>> File "/usr/local/autotest/shared/hosts/base_classes.py", > >>>line 655, in cleanup_kernels > >>> boot_info = self.bootloader.get_entries() > >>> File "/usr/local/autotest/tools/boottool.py", line 1150, in > >>>get_entries > >>> raw = self.get_info() > >>> File "/usr/local/autotest/tools/boottool.py", line 1180, in get_info > >>> info = self._run_grubby_get_output([command]) > >>> File "/usr/local/autotest/tools/boottool.py", line 835, in > >>>_run_grubby_get_output > >>> return self._run_get_output(args) > >>> File "/usr/local/autotest/tools/boottool.py", line 751, in > >>>_run_get_output > >>> ' '.join(arguments)) > >>>TypeError: sequence item 0: expected string, NoneType found > >>> > >>>07/12 02:53:18 INFO | job:0210| END ABORT ---- ---- > >>>timestamp=1342075998 localtime=Jul 12 02:53:18 Unhandled > >>>TypeError: sequence item 0: expected string, NoneType found > >>> Traceback (most recent call last): > >>> File "/usr/local/autotest/job.py", line 1089, in _run_step_fn > >>> exec('__ret = %s(*__args, **__dargs)' % fn, local_vars, > >>>local_vars) > >>> File "<string>", line 1, in <module> > >>> File "/usr/local/autotest/control.autoserv", line 16, in > >>>boot_kernel > >>> host.cleanup_kernels() > >>> File "/usr/local/autotest/shared/hosts/base_classes.py", > >>>line 655, in cleanup_kernels > >>> boot_info = self.bootloader.get_entries() > >>> File "/usr/local/autotest/tools/boottool.py", line 1150, > >>>in get_entries > >>> raw = self.get_info() > >>> File "/usr/local/autotest/tools/boottool.py", line 1180, > >>>in get_info > >>> info = self._run_grubby_get_output([command]) > >>> File "/usr/local/autotest/tools/boottool.py", line 835, > >>>in _run_grubby_get_output > >>> return self._run_get_output(args) > >>> File "/usr/local/autotest/tools/boottool.py", line 751, > >>>in _run_get_output > >>> ' '.join(arguments)) > >>> TypeError: sequence item 0: expected string, NoneType found > >>> 07/12 02:53:18 DEBUG| base_job:0349| Persistent state > >>>client._record_indent now set to 0 > >>I won't claim to understand why it's happening, but I can tell a bit > >>more about what's happening: > >> > >>Adding some hacks locally to _run_grubby_get_output, to print out the > >>parameter arguments and the prepared return value args, I get: > >> > >>04:01:35 INFO | Writing results to /usr/local/autotest/results/default > >>04:01:35 INFO | START ---- ---- timestamp=1342080095 > >>localtime=Jul 12 04:01:35 > >>04:01:36 INFO | arguments : ['--info=ALL'] > >>04:01:36 INFO | self.path = None > >>04:01:36 INFO | arguments : ['--version'] > >>04:01:36 INFO | self.path = /sbin/grubby > >>04:01:36 INFO | args : ['/sbin/grubby', '--version'] > >>04:01:36 INFO | arguments : ['--version'] > >>04:01:36 INFO | self.path = /sbin/grubby > >>04:01:36 INFO | args : ['/sbin/grubby', '--version'] > >>04:01:36 INFO | arguments : ['--version'] > >>04:01:36 INFO | self.path = /sbin/grubby > >>04:01:36 INFO | args : ['/sbin/grubby', '--version'] > >>04:01:36 INFO | args : [None, '--grub2', '--info=ALL'] > >>04:01:36 ERROR| JOB ERROR: Unhandled TypeError: sequence item 0: > >>expected string, NoneType found > >> > >>So a couple of questions come to mind: > >> > >>1) why do we call --version so many times? > > > >There's certainly room for optimizations here. > > > >> > >>2) AFAICT from my debugging, this is all coming from the one call to > >>get_info(), but I don't see how self.path can be None. > > > >I've seen the same error when I had two grub entries with the same > >kernel and parameters set. I'm *guessiing* this is related to it, > >as your configuration also seems to be like that. I'm debugging > >that right now and will let you know about it. > > Nish, > > My first guess was actually incorrect. I've identified that the > error is related to the laziness of the client/shared/boottool.py > code when instantiating boottool, which inherits from Grubby. > > I've switched from the lazy approach to simply importing Grubby as > boottool from the boottool_cli module: > > from boottool_cli import Grubby as boottool > > and the error ceases to exist. > > I'm working on fixing that now.
Something like the following? diff --git a/client/shared/boottool.py b/client/shared/boottool.py index 90f936b..05858d6 100644 --- a/client/shared/boottool.py +++ b/client/shared/boottool.py @@ -29,30 +29,4 @@ except ImportError: imp.load_source("boottool_cli", BOOTTOOL_CLI_PATH) -from boottool_cli import Grubby, install_grubby_if_necessary, EfiToolSys - - -class boottool(Grubby): - """ - Client site side boottool wrapper. - - Inherits all functionality from boottool(.py) CLI app (lazily). - """ - def __init__(self, path='/sbin/grubby'): - self.instantiated = False - self.path = path - - - def _init_on_demand(self): - if not self.instantiated: - try: - install_grubby_if_necessary() - Grubby.__init__(self, self.path) - self.instantiated = True - except Exception, e: - raise error.JobError("Unable to instantiate boottool: %s" % e) - - - def __getattr__(self, name): - self._init_on_demand() - return Grubby.__getattribute__(self, name) +from boottool_cli import Grubby as boottool, install_grubby_if_necessary, EfiToolSys This also seems to be working here. Thanks, Nish -- Nishanth Aravamudan <n...@us.ibm.com> IBM Linux Technology Center _______________________________________________ Autotest mailing list Autotest@test.kernel.org http://test.kernel.org/cgi-bin/mailman/listinfo/autotest