Updates to ktest.pl
- Handle meta data in GRUB_MENU - Add variable to cusomize what return value the reboot code should return. - Add support for grub2bls boot loader - Show name and test iteration number in error message sent in mail - Minor fixes and clean ups -----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCXNxRZxQccm9zdGVkdEBn b29kbWlzLm9yZwAKCRAp5XQQmuv6qrVCAP4rgnMgMsPOt0cMtKty1Z3uA6njfrZc UU1gNeHEvKr1MQEAhYy4N5FCigBygALEczmUIYwrzVq3luNPTwgUeUIH3AY= =BTC7 -----END PGP SIGNATURE----- Merge tag 'ktest-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest Pull more ktest updates from Steven Rostedt: - Add support for grub2bls boot loader - Show name and test iteration number in error message sent in mail - Minor fixes and clean ups * tag 'ktest-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest: ktest: update sample.conf for grub2bls ktest: remove get_grub2_index ktest: pass KERNEL_VERSION to POST_KTEST ktest: introduce grub2bls REBOOT_TYPE option ktest: cleanup get_grub_index ktest: introduce _get_grub_index
This commit is contained in:
Коммит
b06ed1e7a2
|
@ -64,6 +64,7 @@ my %default = (
|
|||
"STOP_TEST_AFTER" => 600,
|
||||
"MAX_MONITOR_WAIT" => 1800,
|
||||
"GRUB_REBOOT" => "grub2-reboot",
|
||||
"GRUB_BLS_GET" => "grubby --info=ALL",
|
||||
"SYSLINUX" => "extlinux",
|
||||
"SYSLINUX_PATH" => "/boot/extlinux",
|
||||
"CONNECT_TIMEOUT" => 25,
|
||||
|
@ -125,6 +126,7 @@ my $last_grub_menu;
|
|||
my $grub_file;
|
||||
my $grub_number;
|
||||
my $grub_reboot;
|
||||
my $grub_bls_get;
|
||||
my $syslinux;
|
||||
my $syslinux_path;
|
||||
my $syslinux_label;
|
||||
|
@ -295,6 +297,7 @@ my %option_map = (
|
|||
"GRUB_MENU" => \$grub_menu,
|
||||
"GRUB_FILE" => \$grub_file,
|
||||
"GRUB_REBOOT" => \$grub_reboot,
|
||||
"GRUB_BLS_GET" => \$grub_bls_get,
|
||||
"SYSLINUX" => \$syslinux,
|
||||
"SYSLINUX_PATH" => \$syslinux_path,
|
||||
"SYSLINUX_LABEL" => \$syslinux_label,
|
||||
|
@ -440,7 +443,7 @@ EOF
|
|||
;
|
||||
$config_help{"REBOOT_TYPE"} = << "EOF"
|
||||
Way to reboot the box to the test kernel.
|
||||
Only valid options so far are "grub", "grub2", "syslinux", and "script".
|
||||
Only valid options so far are "grub", "grub2", "grub2bls", "syslinux", and "script".
|
||||
|
||||
If you specify grub, it will assume grub version 1
|
||||
and will search in /boot/grub/menu.lst for the title \$GRUB_MENU
|
||||
|
@ -454,6 +457,8 @@ $config_help{"REBOOT_TYPE"} = << "EOF"
|
|||
If you specify grub2, then you also need to specify both \$GRUB_MENU
|
||||
and \$GRUB_FILE.
|
||||
|
||||
If you specify grub2bls, then you also need to specify \$GRUB_MENU.
|
||||
|
||||
If you specify syslinux, then you may use SYSLINUX to define the syslinux
|
||||
command (defaults to extlinux), and SYSLINUX_PATH to specify the path to
|
||||
the syslinux install (defaults to /boot/extlinux). But you have to specify
|
||||
|
@ -479,6 +484,9 @@ $config_help{"GRUB_MENU"} = << "EOF"
|
|||
menu must be a non-nested menu. Add the quotes used in the menu
|
||||
to guarantee your selection, as the first menuentry with the content
|
||||
of \$GRUB_MENU that is found will be used.
|
||||
|
||||
For grub2bls, \$GRUB_MENU is searched on the result of \$GRUB_BLS_GET
|
||||
command for the lines that begin with "title".
|
||||
EOF
|
||||
;
|
||||
$config_help{"GRUB_FILE"} = << "EOF"
|
||||
|
@ -695,7 +703,7 @@ sub get_mandatory_configs {
|
|||
}
|
||||
}
|
||||
|
||||
if ($rtype eq "grub") {
|
||||
if (($rtype eq "grub") or ($rtype eq "grub2bls")) {
|
||||
get_mandatory_config("GRUB_MENU");
|
||||
}
|
||||
|
||||
|
@ -1871,36 +1879,37 @@ sub run_scp_mod {
|
|||
return run_scp($src, $dst, $cp_scp);
|
||||
}
|
||||
|
||||
sub get_grub2_index {
|
||||
sub _get_grub_index {
|
||||
|
||||
my ($command, $target, $skip) = @_;
|
||||
|
||||
return if (defined($grub_number) && defined($last_grub_menu) &&
|
||||
$last_grub_menu eq $grub_menu && defined($last_machine) &&
|
||||
$last_machine eq $machine);
|
||||
|
||||
doprint "Find grub2 menu ... ";
|
||||
doprint "Find $reboot_type menu ... ";
|
||||
$grub_number = -1;
|
||||
|
||||
my $ssh_grub = $ssh_exec;
|
||||
$ssh_grub =~ s,\$SSH_COMMAND,cat $grub_file,g;
|
||||
$ssh_grub =~ s,\$SSH_COMMAND,$command,g;
|
||||
|
||||
open(IN, "$ssh_grub |")
|
||||
or dodie "unable to get $grub_file";
|
||||
or dodie "unable to execute $command";
|
||||
|
||||
my $found = 0;
|
||||
my $grub_menu_qt = quotemeta($grub_menu);
|
||||
|
||||
while (<IN>) {
|
||||
if (/^menuentry.*$grub_menu_qt/) {
|
||||
if (/$target/) {
|
||||
$grub_number++;
|
||||
$found = 1;
|
||||
last;
|
||||
} elsif (/^menuentry\s|^submenu\s/) {
|
||||
} elsif (/$skip/) {
|
||||
$grub_number++;
|
||||
}
|
||||
}
|
||||
close(IN);
|
||||
|
||||
dodie "Could not find '$grub_menu' in $grub_file on $machine"
|
||||
dodie "Could not find '$grub_menu' through $command on $machine"
|
||||
if (!$found);
|
||||
doprint "$grub_number\n";
|
||||
$last_grub_menu = $grub_menu;
|
||||
|
@ -1909,46 +1918,34 @@ sub get_grub2_index {
|
|||
|
||||
sub get_grub_index {
|
||||
|
||||
if ($reboot_type eq "grub2") {
|
||||
get_grub2_index;
|
||||
my $command;
|
||||
my $target;
|
||||
my $skip;
|
||||
my $grub_menu_qt;
|
||||
|
||||
if ($reboot_type !~ /^grub/) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($reboot_type ne "grub") {
|
||||
$grub_menu_qt = quotemeta($grub_menu);
|
||||
|
||||
if ($reboot_type eq "grub") {
|
||||
$command = "cat /boot/grub/menu.lst";
|
||||
$target = '^\s*title\s+' . $grub_menu_qt . '\s*$';
|
||||
$skip = '^\s*title\s';
|
||||
} elsif ($reboot_type eq "grub2") {
|
||||
$command = "cat $grub_file";
|
||||
$target = '^menuentry.*' . $grub_menu_qt;
|
||||
$skip = '^menuentry\s|^submenu\s';
|
||||
} elsif ($reboot_type eq "grub2bls") {
|
||||
$command = $grub_bls_get;
|
||||
$target = '^title=.*' . $grub_menu_qt;
|
||||
$skip = '^title=';
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
return if (defined($grub_number) && defined($last_grub_menu) &&
|
||||
$last_grub_menu eq $grub_menu && defined($last_machine) &&
|
||||
$last_machine eq $machine);
|
||||
|
||||
doprint "Find grub menu ... ";
|
||||
$grub_number = -1;
|
||||
|
||||
my $ssh_grub = $ssh_exec;
|
||||
$ssh_grub =~ s,\$SSH_COMMAND,cat /boot/grub/menu.lst,g;
|
||||
|
||||
open(IN, "$ssh_grub |")
|
||||
or dodie "unable to get menu.lst";
|
||||
|
||||
my $found = 0;
|
||||
my $grub_menu_qt = quotemeta($grub_menu);
|
||||
|
||||
while (<IN>) {
|
||||
if (/^\s*title\s+$grub_menu_qt\s*$/) {
|
||||
$grub_number++;
|
||||
$found = 1;
|
||||
last;
|
||||
} elsif (/^\s*title\s/) {
|
||||
$grub_number++;
|
||||
}
|
||||
}
|
||||
close(IN);
|
||||
|
||||
dodie "Could not find '$grub_menu' in /boot/grub/menu on $machine"
|
||||
if (!$found);
|
||||
doprint "$grub_number\n";
|
||||
$last_grub_menu = $grub_menu;
|
||||
$last_machine = $machine;
|
||||
_get_grub_index($command, $target, $skip);
|
||||
}
|
||||
|
||||
sub wait_for_input
|
||||
|
@ -4303,7 +4300,7 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
|
|||
|
||||
if (!$buildonly) {
|
||||
$target = "$ssh_user\@$machine";
|
||||
if ($reboot_type eq "grub") {
|
||||
if (($reboot_type eq "grub") or ($reboot_type eq "grub2bls")) {
|
||||
dodie "GRUB_MENU not defined" if (!defined($grub_menu));
|
||||
} elsif ($reboot_type eq "grub2") {
|
||||
dodie "GRUB_MENU not defined" if (!defined($grub_menu));
|
||||
|
@ -4423,7 +4420,9 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
|
|||
}
|
||||
|
||||
if (defined($final_post_ktest)) {
|
||||
run_command $final_post_ktest;
|
||||
|
||||
my $cp_final_post_ktest = eval_kernel_version $final_post_ktest;
|
||||
run_command $cp_final_post_ktest;
|
||||
}
|
||||
|
||||
if ($opt{"POWEROFF_ON_SUCCESS"}) {
|
||||
|
|
|
@ -349,13 +349,13 @@
|
|||
# option to boot to with GRUB_REBOOT
|
||||
#GRUB_FILE = /boot/grub2/grub.cfg
|
||||
|
||||
# The tool for REBOOT_TYPE = grub2 to set the next reboot kernel
|
||||
# The tool for REBOOT_TYPE = grub2 or grub2bls to set the next reboot kernel
|
||||
# to boot into (one shot mode).
|
||||
# (default grub2_reboot)
|
||||
#GRUB_REBOOT = grub2_reboot
|
||||
|
||||
# The grub title name for the test kernel to boot
|
||||
# (Only mandatory if REBOOT_TYPE = grub or grub2)
|
||||
# (Only mandatory if REBOOT_TYPE = grub or grub2 or grub2bls)
|
||||
#
|
||||
# Note, ktest.pl will not update the grub menu.lst, you need to
|
||||
# manually add an option for the test. ktest.pl will search
|
||||
|
@ -374,6 +374,10 @@
|
|||
# do a: GRUB_MENU = 'Test Kernel'
|
||||
# For customizing, add your entry in /etc/grub.d/40_custom.
|
||||
#
|
||||
# For grub2bls, a search of "title"s are done. The menu is found
|
||||
# by searching for the contents of GRUB_MENU in the line that starts
|
||||
# with "title".
|
||||
#
|
||||
#GRUB_MENU = Test Kernel
|
||||
|
||||
# For REBOOT_TYPE = syslinux, the name of the syslinux executable
|
||||
|
@ -479,6 +483,11 @@
|
|||
# default (undefined)
|
||||
#POST_KTEST = ${SSH} ~/dismantle_test
|
||||
|
||||
# If you want to remove the kernel entry in Boot Loader Specification (BLS)
|
||||
# environment, use kernel-install command.
|
||||
# Here's the example:
|
||||
#POST_KTEST = ssh root@Test "/usr/bin/kernel-install remove $KERNEL_VERSION"
|
||||
|
||||
# The default test type (default test)
|
||||
# The test types may be:
|
||||
# build - only build the kernel, do nothing else
|
||||
|
@ -530,6 +539,11 @@
|
|||
# or on some systems:
|
||||
#POST_INSTALL = ssh user@target /sbin/dracut -f /boot/initramfs-test.img $KERNEL_VERSION
|
||||
|
||||
# If you want to add the kernel entry in Boot Loader Specification (BLS)
|
||||
# environment, use kernel-install command.
|
||||
# Here's the example:
|
||||
#POST_INSTALL = ssh root@Test "/usr/bin/kernel-install add $KERNEL_VERSION /boot/vmlinuz-$KERNEL_VERSION"
|
||||
|
||||
# If for some reason you just want to boot the kernel and you do not
|
||||
# want the test to install anything new. For example, you may just want
|
||||
# to boot test the same kernel over and over and do not want to go through
|
||||
|
@ -593,6 +607,8 @@
|
|||
# For REBOOT_TYPE = grub2, you must define both GRUB_MENU and
|
||||
# GRUB_FILE.
|
||||
#
|
||||
# For REBOOT_TYPE = grub2bls, you must define GRUB_MENU.
|
||||
#
|
||||
# For REBOOT_TYPE = syslinux, you must define SYSLINUX_LABEL, and
|
||||
# perhaps modify SYSLINUX (default extlinux) and SYSLINUX_PATH
|
||||
# (default /boot/extlinux)
|
||||
|
|
Загрузка…
Ссылка в новой задаче