On 06/22/2012 11:38 AM, Cleber Rosa wrote:
> On 06/22/2012 03:58 AM, Lucas Meneghel Rodrigues wrote:
>> On Wed, Jun 13, 2012 at 12:34 PM, Cleber Rosa <cr...@redhat.com> wrote:
>>> ----- Mensagem original -----
>>>> De: "steve walsh" <steve.wa...@sap.com>
>>>> Para: "Cleber Rosa" <cr...@redhat.com>
>>>> Cc: autotest@test.kernel.org, "Lucas Meneghel Rodrigues" 
>>>> <l...@redhat.com>
>>>> Enviadas: Quarta-feira, 13 de Junho de 2012 12:20:17
>>>> Assunto: RE: [Autotest] kernel.boot is failing because "Unable to 
>>>> instantiate boottool"
>>>>
>>>> Hi Cleber,
>>>>
>>>> Results as follows:
>>>>
>>>> root@heca-autotest-b:/usr/local/autotest# ./tools/boottool
>>>> --add-kernel=/boot/vmlinuz-autotest --initrd=/boot/initrd-autotest
>>>> --title=autotest
>>>> root@heca-autotest-b:/usr/local/autotest# grubby
>>>> --info=/boot/vmlinuz-autotest
>>>> index=0
>>>> kernel=/boot/vmlinuz-autotest
>>>> args="ro   crashkernel=384M-2G:64M,2G-:128M quiet panic=5"
>>>> root=UUID=18790923-d357-4ce9-96c9-d09593dcbab8
>>>> initrd=/boot/initrd-autotest
>>>> title=autotest
>>>>
>>> This is actually good. Putting these messages aside for a while, do 
>>> you get to actually boot this new entry (and thus kernel)?
>> I was working on this, and it seems the problem is that grub-reboot
>> doesn't do what it avertises on ubuntu. After watching a couple of
>> failed jobs, I've looked at the boot once code, and then tried
>> grub-reboot an index. No way, it does reboot the machine to the
>> permanent default entry, always, hence, failing the job.
>>
>> I don't have a good idea of how to fix this, but now we have a better
>> idea of what's this problem all about.
>
> Same thing here. I ended up running grub-reboot manually, but the 
> result was not the expected one.
>
> I'm now testing it on a Debian machine, since that was one of the 
> distros I used during the development and testing of the new boottool.
>
> I'll let you guys know about it.
>

So the behaviour is the same on Debian and Ubuntu. What's going on here 
is actually explained in the docstring, there's a caveat on already 
having grub's default set to saved.

I'm now testing the removal of this caveat/requirement, with something 
like this:

diff --git a/client/tools/boottool b/client/tools/boottool
index 7a1cce1..f92441a 100755
--- a/client/tools/boottool
+++ b/client/tools/boottool
@@ -1429,20 +1429,56 @@ class Grubby(object):
          Caveat: this assumes the default set is of type "saved", and not a
          numeric value.
          '''
-        grub_reboot_names = ['grub-reboot',
-                             'grub2-reboot']
-        executable = None
+        grub_reboot_names = ['grub-reboot', 'grub2-reboot']
+        grub_reboot_executable = None
          for grub_reboot in grub_reboot_names:
-            executable = find_executable(grub_reboot)
-            if executable is not None:
+            grub_reboot_executable = find_executable(grub_reboot)
+            if grub_reboot_executable is not None:
                  break

-        if executable is None:
+        if grub_reboot_executable is None:
              self.log.error('Could not find executable among searched 
names: '
                             '%s',' ,'.join(grub_reboot_names))
              return -1

-        return self._run_get_return([executable,
+        grub_set_default_names = ['grub-set-default', 'grub2-set-default']
+        grub_set_default_executable = None
+        for grub_set_default in grub_set_default_names:
+            grub_set_default_executable = find_executable(grub_set_default)
+            if executable is not None:
+                break
+
+        if grub_set_default_executable is None:
+            self.log.error('Could not find executable among searched 
names: '
+                           '%s',' ,'.join(grub_set_default_names))
+            return -1
+
+        # Make sure the "set default" entry in the configuration file 
is set
+        # to "${saved_entry}. Assuming the config file is at 
/boot/grub/grub.cfg
+        deb_grub_cfg_path = '/boot/grub/grub.cfg'
+        deb_grub_cfg_bkp_path = '%s.boottool.bak' % deb_grub_cfg_path
+
+        if os.path.exists(deb_grub_cfg_path):
+            shutil.move(deb_grub_cfg_path, deb_grub_cfg_bkp_path)
+            o = open(deb_grub_cfg_path, 'w')
+            for l in open(deb_grub_cfg_bkp_path).readlines():
+                if l.startswith('set default='):
+                    o.write('set default="${saved_entry}"')
+                else:
+                    o.write(l)
+            o.close()
+
+        # Make the current default entry the "previous saved entry"
+        default_index = self.get_default_index()
+        prev_saved_return = 
self._run_get_return([grub_set_default_executable,
+                                                  '%s' % default_index])
+        if prev_saved_return != 0:
+            self.log.error('Could not make entry %s the previous saved 
entry',
+                           default_index)
+            return prev_saved_return
+
+        # Finally set the boot once entry
+        return self._run_get_return([grubby_reboot_executable,
                                       '%s' % entry_index])


This should do the trick on the autotest/boottool side.

But, since grubby already knows about "default saved" for grub2 (as part 
of the autotest patches), I'll also send another patch, making this a 
grubby feature. Maybe something like 'grubby --set-default=saved'.

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

Reply via email to