From: Mike Yuan Date: Wed, 20 Dec 2023 13:25:27 +0000 (+0800) Subject: systemctl: configure boot loader options only when going through firmware X-Git-Tag: v256-rc1~1442 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bc9e592c4f01dd8a4f8fb5e2bbcdec5ee4bf129d;p=thirdparty%2Fsystemd.git systemctl: configure boot loader options only when going through firmware Fixes #30497 --- diff --git a/man/systemctl.xml b/man/systemctl.xml index 4651e895104..1882cd756ca 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -2607,9 +2607,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err - When used with the reboot command, indicate to the system's firmware to - reboot into the firmware setup interface. Note that this functionality is not available on all - systems. + When used with the reboot, poweroff, or + halt command, indicate to the system's firmware to reboot into the firmware + setup interface for the next boot. Note that this functionality is not available on all systems. + @@ -2619,10 +2620,11 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err - When used with the reboot command, indicate to the system's boot loader to - show the boot loader menu on the following boot. Takes a time value as parameter — indicating the - menu timeout. Pass zero in order to disable the menu timeout. Note that not all boot loaders - support this functionality. + When used with the reboot, poweroff, or + halt command, indicate to the system's boot loader to show the boot loader menu + on the following boot. Takes a time value as parameter — indicating the menu timeout. Pass zero + in order to disable the menu timeout. Note that not all boot loaders support this functionality. + @@ -2632,10 +2634,11 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err - When used with the reboot command, indicate to the system's boot loader to - boot into a specific boot loader entry on the following boot. Takes a boot loader entry identifier - as argument, or help in order to list available entries. Note that not all boot - loaders support this functionality. + When used with the reboot, poweroff, or + halt command, indicate to the system's boot loader to boot into a specific + boot loader entry on the following boot. Takes a boot loader entry identifier as argument, + or help in order to list available entries. Note that not all boot loaders + support this functionality. diff --git a/src/systemctl/systemctl-start-special.c b/src/systemctl/systemctl-start-special.c index 2cf746c5a60..d486b406da5 100644 --- a/src/systemctl/systemctl-start-special.c +++ b/src/systemctl/systemctl-start-special.c @@ -121,8 +121,7 @@ static int set_exit_code(uint8_t code) { } int verb_start_special(int argc, char *argv[], void *userdata) { - bool termination_action; /* An action that terminates the manager, can be performed also by - * signal. */ + bool termination_action; /* An action that terminates the system, can be performed also by signal. */ enum action a; int r; @@ -140,17 +139,21 @@ int verb_start_special(int argc, char *argv[], void *userdata) { return r; } - r = prepare_firmware_setup(); - if (r < 0) - return r; + termination_action = IN_SET(a, ACTION_HALT, ACTION_POWEROFF, ACTION_REBOOT); - r = prepare_boot_loader_menu(); - if (r < 0) - return r; + if (termination_action) { + r = prepare_firmware_setup(); + if (r < 0) + return r; - r = prepare_boot_loader_entry(); - if (r < 0) - return r; + r = prepare_boot_loader_menu(); + if (r < 0) + return r; + + r = prepare_boot_loader_entry(); + if (r < 0) + return r; + } if (a == ACTION_REBOOT) { if (arg_reboot_argument) { @@ -181,10 +184,6 @@ int verb_start_special(int argc, char *argv[], void *userdata) { return r; } - termination_action = IN_SET(a, - ACTION_HALT, - ACTION_POWEROFF, - ACTION_REBOOT); if (termination_action && arg_force >= 2) return halt_now(a);