Instead of resorting to the horrible 2 hacks I had submitted before, take a little more time and write support in boottool to handle OS specific exceptions. This way we supersede the 2 previous patches and provide a better and more integrated approach to solve the problem:
Geez, why isn't boottool --boot-once working for Fedora/RHEL ? Signed-off-by: Lucas Meneghel Rodrigues <[email protected]> --- client/tools/boottool | 53 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 48 insertions(+), 5 deletions(-) diff --git a/client/tools/boottool b/client/tools/boottool index 4dafbab..728e4ef 100755 --- a/client/tools/boottool +++ b/client/tools/boottool @@ -791,6 +791,38 @@ sub detect_architecture { return $arch; } +=head3 detect_os_vendor() + +Input: +Output: string + +This function determines the OS vendor (linux distribution breed). + +Return values: "Red Hat", "Fedora", "SUSE", "Ubuntu", "Debian", or +"Unknown" if none of the predefined patterns could be found on the +issue file. + +=cut + +sub detect_os_vendor { + my $vendor = ""; + my $issue_file = '/etc/issue'; + if ( not system("egrep 'Red Hat' $issue_file") ){ + $vendor = 'Red Hat'; + } elsif ( not system("egrep 'Fedora' $issue_file") ){ + $vendor = 'Fedora'; + } elsif ( not system("egrep 'SUSE' $issue_file") ){ + $vendor = 'SUSE'; + } elsif ( not system("egrep 'Ubuntu' $issue_file") ){ + $vendor = 'Ubuntu'; + } elsif ( not system("egrep 'Debian' $issue_file") ){ + $vendor = 'Debian'; + } else { + $vendor = 'Unknown'; + } + return $vendor; +} + =head3 detect_bootloader(['device1', 'device2', ...]) Input: devices to detect against (optional) @@ -1595,20 +1627,31 @@ sub update_main_options{ sub boot_once { my $self=shift; my $entry_to_boot_once = shift; + my $detected_os_vendor = Linux::Bootloader::Detect::detect_os_vendor(); unless ( $entry_to_boot_once ) { print "No kernel\n"; return undef;} $self->read(); my $default=$self->get_default(); - if ( $default == $self->_lookup($entry_to_boot_once)){ - warn "The default and once-boot kernels are the same. No action taken. \nSet default to something else, then re-try.\n"; - return undef; - } if ( $self->_get_bootloader_version() < 0.97 ){ warn "This function works for grub version 0.97 and up. No action taken. \nUpgrade, then re-try.\n"; return undef; } + if ( $detected_os_vendor eq "Red Hat" or $detected_os_vendor eq "Fedora" ) { + # if not a number, do title lookup + if ( $entry_to_boot_once !~ /^\d+$/ ) { + $entry_to_boot_once = $self->_lookup($entry_to_boot_once); + return undef unless ( defined $entry_to_boot_once ); + } + + return `echo "savedefault --default=$entry_to_boot_once" --once | grub --batch`; + } else { + if ( $default == $self->_lookup($entry_to_boot_once)){ + warn "The default and once-boot kernels are the same. No action taken. \nSet default to something else, then re-try.\n"; + return undef; + } + $self->set_default('saved'); if ( ! -f '/boot/grub/default' ){ open FH, '>/boot/grub/default'; @@ -1635,7 +1678,7 @@ sub boot_once { $self->update( 'update-kernel'=>"$entry_to_boot_once",'option'=>'','savedefault' => 'fallback' ); $self->update( 'update-kernel'=>"$default",'option'=>'', 'savedefault' => '' ); $self->write(); - + } } sub _get_bootloader_version { -- 1.7.2.3 _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
