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.

Thanks,
CR.


>
>>
>> -Nish
>>
>
>


_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to