From 4e5aa79185d93d20defe1e371e33f89b86d93a3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 1 Aug 2019 17:15:59 +0200 Subject: [PATCH] bootctl: add "system-options" verb --- man/bootctl.xml | 20 ++++++++++++----- man/kernel-command-line.xml | 3 ++- src/boot/bootctl.c | 45 ++++++++++++++++++++++++++++--------- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/man/bootctl.xml b/man/bootctl.xml index 822d07a606b..7ce41b70f99 100644 --- a/man/bootctl.xml +++ b/man/bootctl.xml @@ -133,6 +133,15 @@ and the firmware's boot loader list. + + + + Checks whether systemd-boot is installed in the ESP. Note that a + single ESP might host multiple boot loaders; this hence checks whether + systemd-boot is one (of possibly many) installed boot loaders — and neither + whether it is the default nor whether it is registered in any EFI variables. + + @@ -150,12 +159,13 @@ - + VALUE - Checks whether systemd-boot is installed in the ESP. Note that a - single ESP might host multiple boot loaders; this hence checks whether - systemd-boot is one (of possibly many) installed boot loaders — and neither - whether it is the default nor whether it is registered in any EFI variables. + When called without the optional argument, prints the current value of the + SystemdOptions EFI variable. When called with an argument, sets the + variable to that value. See + systemd1 + for the meaning of that variable. diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml index a79be5997dc..848f5ec4435 100644 --- a/man/kernel-command-line.xml +++ b/man/kernel-command-line.xml @@ -452,7 +452,8 @@ systemd-backlight@.service8, systemd-rfkill.service8, systemd-hibernate-resume-generator8, - systemd-firstboot.service8 + systemd-firstboot.service8, + bootctl1 diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 097c796a4e5..2c8163360fa 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -1052,8 +1052,9 @@ static int help(int argc, char *argv[], void *userdata) { " install Install systemd-boot to the ESP and EFI variables\n" " update Update systemd-boot in the ESP and EFI variables\n" " remove Remove systemd-boot from the ESP and EFI variables\n" - " random-seed Initialize random seed in ESP and EFI variables\n" " is-installed Test whether systemd-boot is installed in the ESP\n" + " random-seed Initialize random seed in ESP and EFI variables\n" + " system-options Query or set system options string in EFI variable\n" "\nBoot Loader Entries Commands:\n" " list List boot loader entries\n" " set-default ID Set default boot loader entry\n" @@ -1710,18 +1711,40 @@ static int verb_random_seed(int argc, char *argv[], void *userdata) { return 0; } +static int verb_system_options(int argc, char *argv[], void *userdata) { + int r; + + if (argc == 1) { + _cleanup_free_ char *line = NULL; + + r = efi_systemd_options_variable(&line); + if (r < 0) + return log_error_errno(r, "Failed to query SystemdOptions EFI variable: %m"); + + printf("SystemdOptions: %s\n", line); + + } else { + r = efi_set_variable_string(EFI_VENDOR_SYSTEMD, "SystemdOptions", argv[1]); + if (r < 0) + return log_error_errno(r, "Failed to set SystemdOptions EFI variable: %m"); + } + + return 0; +} + static int bootctl_main(int argc, char *argv[]) { static const Verb verbs[] = { - { "help", VERB_ANY, VERB_ANY, 0, help }, - { "status", VERB_ANY, 1, VERB_DEFAULT, verb_status }, - { "install", VERB_ANY, 1, 0, verb_install }, - { "update", VERB_ANY, 1, 0, verb_install }, - { "remove", VERB_ANY, 1, 0, verb_remove }, - { "random-seed", VERB_ANY, 1, 0, verb_random_seed }, - { "is-installed", VERB_ANY, 1, 0, verb_is_installed }, - { "list", VERB_ANY, 1, 0, verb_list }, - { "set-default", 2, 2, 0, verb_set_default }, - { "set-oneshot", 2, 2, 0, verb_set_default }, + { "help", VERB_ANY, VERB_ANY, 0, help }, + { "status", VERB_ANY, 1, VERB_DEFAULT, verb_status }, + { "install", VERB_ANY, 1, 0, verb_install }, + { "update", VERB_ANY, 1, 0, verb_install }, + { "remove", VERB_ANY, 1, 0, verb_remove }, + { "is-installed", VERB_ANY, 1, 0, verb_is_installed }, + { "list", VERB_ANY, 1, 0, verb_list }, + { "set-default", 2, 2, 0, verb_set_default }, + { "set-oneshot", 2, 2, 0, verb_set_default }, + { "random-seed", VERB_ANY, 1, 0, verb_random_seed }, + { "system-options", VERB_ANY, 2, 0, verb_system_options }, {} };