From 2b0e6effc31ec166bbbe35a3cd2b4c73051f38bb Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Fri, 16 Jun 2023 15:54:50 +0800 Subject: [PATCH 8/9] blscfg: reading bls fragments if boot present The Boot Loader Specification (BLS) designates the EFI System Partition (ESP) as a primary location for $BOOT, where boot menu entries can be stored. The specification encourages boot loaders to retrieve menu entries from the ESP, even when XBOOTLDR is present. This commit aligns with the BLS specification by introducing the capability to search for the ESP in addition to the default root partition or any specified location via blscfg's command line. The $boot environment variable is utilized as a reference to the ESP device for the blscfg command. Initialization of $boot in grub.cfg is demonstrated as follows: insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=boot F414-5A9F If $boot is unset, no additional search for the BLS location will be performed. Signed-off-by: Michael Chang --- grub-core/commands/blscfg.c | 10 ++++++++++ util/grub.d/10_linux.in | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c index c872bcef0..cbe2a289e 100644 --- a/grub-core/commands/blscfg.c +++ b/grub-core/commands/blscfg.c @@ -1186,6 +1186,7 @@ grub_cmd_blscfg (grub_extcmd_context_t ctxt UNUSED, char *entry_id = NULL; bool show_default = true; bool show_non_default = true; + const char *boot = NULL; if (argc == 1) { if (grub_strcmp (args[0], "default") == 0) { @@ -1205,6 +1206,15 @@ grub_cmd_blscfg (grub_extcmd_context_t ctxt UNUSED, if (r) return r; + boot = grub_env_get("boot"); + path = (boot) ? grub_xasprintf("(%s)" GRUB_BLS_CONFIG_PATH, boot) : NULL; + if (path) + { + bls_load_entries(path); + grub_print_error(); + } + grub_free(path); + return bls_create_entries(show_default, show_non_default, entry_id); } diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index 45eefb332..edf0fca55 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -201,7 +201,8 @@ populate_menu() } # Make BLS the default if GRUB_ENABLE_BLSCFG was not set and grubby is not installed. -if [ -z "${GRUB_ENABLE_BLSCFG}" ] && ! command -v new-kernel-pkg >/dev/null; then +# FIXME: The test should be aligned to openSUSE, grubby is not our default tool +if [ -z "${GRUB_ENABLE_BLSCFG}" ] && ! command -v new-kernel-pkg >/dev/null && false; then GRUB_ENABLE_BLSCFG="true" fi -- 2.44.0