We're running into an unfortunate side effect of this change.
boottool --update-kernel --args=X is buggy when used with lilo and the
lilo.conf does not already have an append= section below that kernel's
image= line.
What I'm doing as a hack to work around this is the following as the
boottool perl code is pretty gross and much less easy to fix for this:
--- client/bin/kernel.py.before 2010-11-01 16:49:45.371159000 -0700
+++ client/bin/kernel.py 2010-11-01 17:25:30.786743000 -0700
@@ -59,13 +59,17 @@
else:
arglist.append(arg)
- # add the kernel entry. it will keep all arguments from the default
entry
- bootloader.add_kernel(image, tag, initrd=initrd, root=root)
+ # Add the kernel entry. it will keep all arguments from the default
entry.
+ # args='_dummy_' is used to workaround a boottool limitation of not
being
+ # able to add arguments to a kernel that does not already have any of
its
+ # own by way of its own append= section below the image= line in
lilo.conf.
+ bootloader.add_kernel(image, tag, initrd=initrd, root=root,
args='_dummy_')
# Now, for each argument in arglist, try to add it to the kernel that
was
# just added. In each step, if the arg already existed on the args
string,
# that particular arg will be skipped
for a in arglist:
bootloader.add_args(kernel=tag, args=a)
+ bootloader.remove_args(kernel=tag, args='_dummy_')
class BootableKernel(object):
--- client/bin/kernel_unittest.py.before 2010-11-01
17:10:15.043835000 -0700
+++ client/bin/kernel_unittest.py 2010-11-01 17:25:54.656370000 -0700
@@ -20,10 +20,11 @@
# record
bootloader.remove_kernel.expect_call(tag)
bootloader.add_kernel.expect_call(image, tag, initrd=initrd,
- root=bootloader_root)
+ args='_dummy_',
root=bootloader_root)
for a in bootloader_args.split():
bootloader.add_args.expect_call(kernel=tag, args=a)
+ bootloader.remove_args.expect_call(kernel=tag, args='_dummy_')
# run and check
kernel._add_kernel_to_bootloader(
On Mon, Oct 18, 2010 at 10:29 AM, Lucas Meneghel Rodrigues
<[email protected]>wrote:
> When adding a new kernel to bootload we want the arguments of
> the default entry to be kept in the new entry, otherwise that
> entry might not boot (example, if we disregard LVM parameters
> and the root is on an LVM volume, the entry won't boot).
>
> So, instead of setting the arguments while the kernel entry
> is being created (doing this with boottool will completely
> disregard any arguments of the default entry), create the
> new entry *then* add the additional arguments, one by one.
> In every new addition, if the arg is already on the arg list,
> the arg won't be added, therefore avoiding duplicate args.
>
> Changes from v1:
> - Fix kernel_unittest.py
>
> Signed-off-by: Lucas Meneghel Rodrigues <[email protected]>
> ---
> client/bin/kernel.py | 10 +++++++---
> client/bin/kernel_unittest.py | 4 +++-
> 2 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/client/bin/kernel.py b/client/bin/kernel.py
> index 4b333ea..c71efc2 100644
> --- a/client/bin/kernel.py
> +++ b/client/bin/kernel.py
> @@ -59,9 +59,13 @@ def _add_kernel_to_bootloader(bootloader, base_args,
> tag, args, image, initrd):
> else:
> arglist.append(arg)
>
> - # add the kernel entry
> - bootloader.add_kernel(image, tag, initrd=initrd, args='
> '.join(arglist),
> - root=root)
> + # add the kernel entry. it will keep all arguments from the default
> entry
> + bootloader.add_kernel(image, tag, initrd=initrd, root=root)
> + # Now, for each argument in arglist, try to add it to the kernel that
> was
> + # just added. In each step, if the arg already existed on the args
> string,
> + # that particular arg will be skipped
> + for a in arglist:
> + bootloader.add_args(kernel=tag, args=a)
>
>
> class BootableKernel(object):
> diff --git a/client/bin/kernel_unittest.py b/client/bin/kernel_unittest.py
> index fe40e6a..3adba6c 100755
> --- a/client/bin/kernel_unittest.py
> +++ b/client/bin/kernel_unittest.py
> @@ -18,9 +18,11 @@ class TestAddKernelToBootLoader(unittest.TestCase):
> # record
> bootloader.remove_kernel.expect_call(tag)
> bootloader.add_kernel.expect_call(image, tag, initrd=initrd,
> - args=bootloader_args,
> root=bootloader_root)
>
> + for a in bootloader_args.split():
> + bootloader.add_args.expect_call(kernel=tag, args=a)
> +
> # run and check
> kernel._add_kernel_to_bootloader(bootloader, base_args, tag, args,
> image, initrd)
> --
> 1.7.2.3
>
> _______________________________________________
> Autotest mailing list
> [email protected]
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
>
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest