X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fboot%2Fbootctl.c;h=51b51c4254cf34ecd13fe933b47270ade7f1661b;hb=dc8962da74c62779d8899a8166f704c30287fff0;hp=641546bc082f87d3d046649e029ba90e74d4a16f;hpb=7b4d7cc08283e5485dcfa49ffdf1915de1d5e81b;p=elogind.git diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 641546bc0..51b51c425 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -32,16 +32,14 @@ #include "util.h" #include "utf8.h" -static int help(void) { +static void help(void) { printf("%s [OPTIONS...] COMMAND ...\n\n" - "Query or change firmware and boot mananger settings.\n\n" + "Query or change firmware and boot manager settings.\n\n" " -h --help Show this help\n" " --version Show package version\n" "Commands:\n" - " status Show current time settings\n", - program_invocation_short_name); - - return 0; + " status Show current boot settings\n" + , program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { @@ -50,16 +48,17 @@ static int parse_argv(int argc, char *argv[]) { }; static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, ARG_VERSION }, - { NULL, 0, NULL, 0 } + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, ARG_VERSION }, + {} }; int c; assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+hH:P", options, NULL)) >= 0) { + + while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) switch (c) { @@ -76,10 +75,8 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; default: - log_error("Unknown option code %c", c); - return -EINVAL; + assert_not_reached("Unhandled option"); } - } return 1; } @@ -143,31 +140,48 @@ static int show_status(char **args, unsigned n) { err = boot_info_query(info); - printf(" Machine ID: %s\n", sd_id128_to_string(info->machine_id, buf)); - printf(" Boot ID: %s\n", sd_id128_to_string(info->boot_id, buf)); + printf("System:\n"); + printf(" Machine ID: %s\n", sd_id128_to_string(info->machine_id, buf)); + printf(" Boot ID: %s\n", sd_id128_to_string(info->boot_id, buf)); if (info->fw_type) - printf(" Firmware: %s (%s)\n", info->fw_type, strna(info->fw_info)); + printf(" Firmware: %s (%s)\n", info->fw_type, strna(info->fw_info)); + if (info->fw_secure_boot >= 0) + printf(" Secure Boot: %s\n", info->fw_secure_boot ? "enabled" : "disabled"); + if (info->fw_secure_boot_setup_mode >= 0) + printf(" Setup Mode: %s\n", info->fw_secure_boot_setup_mode ? "setup" : "user"); + printf("\n"); if (info->fw_entry_active >= 0) { - printf("Firmware entry: %s\n", info->fw_entries[info->fw_entry_active].title); - if (info->fw_entries[info->fw_entry_active].path) - printf(" %s\n", info->fw_entries[info->fw_entry_active].path); + printf("Selected Firmware Entry:\n"); + printf(" Title: %s\n", strna(info->fw_entries[info->fw_entry_active].title)); if (!sd_id128_equal(info->fw_entries[info->fw_entry_active].part_uuid, SD_ID128_NULL)) - printf(" %s\n", sd_id128_to_string(info->fw_entries[info->fw_entry_active].part_uuid, buf)); + printf(" Partition: /dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", + SD_ID128_FORMAT_VAL(info->fw_entries[info->fw_entry_active].part_uuid)); + else + printf(" Partition: n/a\n"); + if (info->fw_entries[info->fw_entry_active].path) + printf(" File: %s%s\n", draw_special_char(DRAW_TREE_RIGHT), info->fw_entries[info->fw_entry_active].path); } + printf("\n"); if (info->loader) { - printf(" Loader: %s\n", info->loader); - printf(" %s\n", strna(info->loader_image_path)); + printf("Boot Loader:\n"); + printf(" Product: %s\n", info->loader); if (!sd_id128_equal(info->loader_part_uuid, SD_ID128_NULL)) - printf(" %s\n", sd_id128_to_string(info->loader_part_uuid, buf)); + printf(" Partition: /dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", + SD_ID128_FORMAT_VAL(info->loader_part_uuid)); + else + printf(" Partition: n/a\n"); + printf(" File: %s%s\n", draw_special_char(DRAW_TREE_RIGHT), strna(info->loader_image_path)); + printf("\n"); if (info->loader_entry_active >= 0) { - printf(" Loader entry: %s\n", info->loader_entries[info->loader_entry_active].title); - printf(" %s\n", info->loader_entries[info->loader_entry_active].path); + printf("Selected Boot Loader Entry:\n"); + printf(" Title: %s\n", strna(info->loader_entries[info->loader_entry_active].title)); + printf(" File: %s\n", info->loader_entries[info->loader_entry_active].path); + if (info->loader_options_added) + printf(" Options: %s\n", info->loader_options_added); } - - printf("Loader options: %s\n", strna(info->loader_options_added)); } else printf("No suitable data is provided by the boot manager. See:\n" " http://www.freedesktop.org/wiki/Software/systemd/BootLoaderInterface\n" @@ -251,21 +265,17 @@ static int bootctl_main(int argc, char *argv[]) { } int main(int argc, char *argv[]) { - int r, retval = EXIT_FAILURE; + int r; log_parse_environment(); log_open(); r = parse_argv(argc, argv); - if (r < 0) + if (r <= 0) goto finish; - else if (r == 0) { - retval = EXIT_SUCCESS; - goto finish; - } r = bootctl_main(argc, argv); - retval = r < 0 ? EXIT_FAILURE : r; -finish: - return retval; + + finish: + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }