1
0
mirror of https://github.com/systemd/systemd synced 2026-04-13 10:35:08 +02:00

Compare commits

..

3 Commits

Author SHA1 Message Date
Yu Watanabe
edaca18739
Merge pull request #22161 from kreijack/ignore-boot-entries
bootctl: Ignore boot entries (continue #22041)
2022-01-19 14:43:10 +09:00
Goffredo Baroncelli
2fbf50d675 bootctl: removed unused parameter only_auto
Remove the parameter 'only_auto' from the function
boot_entries_augment_from_loader() because each caller set it always to
true.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
2022-01-18 19:32:35 +01:00
Goffredo Baroncelli
9914d89b51 bootctl: ignore the bootloader boot entries
When bootctl lists the boot entries, considers also the ones
returned by systemd-boot (via the efi LoaderEntries variable),
created at boot time.

Unfortunately this list may became incorrect if (e.g.) the user remove a
kernel package.

This patch changes this behaviour, so bootctl ignores some the
boot entries returned by systemd-boot.

In any case, bootctl still considers the 'auto-xxx' boot entries
listed below:

  Boot entrie name                 Title
  -----------------------------    ------------------------------
  auto-osx                         macOS boot loader
  auto-windows                     Windows Boot Manager
  auto-efi-shell                   EFI Shell
  auto-efi-default                 EFI Default Loader
  auto-reboot-to-firmware-setup    Reboot Into Firmware Interface

The other entries that systemd-boot synthetizes (e.g. the ones loaded from
/efi/loader/entries/<uuid>) can be synthetized by bootctl too, so no
information is lost.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
2022-01-18 19:32:35 +01:00
4 changed files with 11 additions and 7 deletions

View File

@ -1603,7 +1603,7 @@ static int verb_list(int argc, char *argv[], void *userdata) {
else if (r < 0)
log_warning_errno(r, "Failed to determine entries reported by boot loader, ignoring: %m");
else
(void) boot_entries_augment_from_loader(&config, efi_entries, false);
(void) boot_entries_augment_from_loader(&config, efi_entries);
if (config.n_entries == 0)
log_info("No boot loader entries found.");

View File

@ -3008,7 +3008,7 @@ static int boot_loader_entry_exists(Manager *m, const char *id) {
r = manager_read_efi_boot_loader_entries(m);
if (r >= 0)
(void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries, true);
(void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries);
return boot_config_has_entry(&config, id);
}
@ -3166,7 +3166,7 @@ static int property_get_boot_loader_entries(
r = manager_read_efi_boot_loader_entries(m);
if (r >= 0)
(void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries, true);
(void) boot_entries_augment_from_loader(&config, m->efi_boot_loader_entries);
r = sd_bus_message_open_container(reply, 'a', "s");
if (r < 0)

View File

@ -759,8 +759,7 @@ int boot_entries_load_config_auto(
int boot_entries_augment_from_loader(
BootConfig *config,
char **found_by_loader,
bool only_auto) {
char **found_by_loader) {
static const char *const title_table[] = {
/* Pretty names for a few well-known automatically discovered entries. */
@ -785,7 +784,12 @@ int boot_entries_augment_from_loader(
if (boot_config_has_entry(config, *i))
continue;
if (only_auto && !startswith(*i, "auto-"))
/*
* consider the 'auto-' entries only, because the others
* ones are detected scanning the 'esp' and 'xbootldr'
* directories by boot_entries_load_config()
*/
if (!startswith(*i, "auto-"))
continue;
c = strdup(*i);

View File

@ -76,7 +76,7 @@ static inline BootEntry* boot_config_default_entry(BootConfig *config) {
void boot_config_free(BootConfig *config);
int boot_entries_load_config(const char *esp_path, const char *xbootldr_path, BootConfig *config);
int boot_entries_load_config_auto(const char *override_esp_path, const char *override_xbootldr_path, BootConfig *config);
int boot_entries_augment_from_loader(BootConfig *config, char **list, bool only_auto);
int boot_entries_augment_from_loader(BootConfig *config, char **list);
static inline const char* boot_entry_title(const BootEntry *entry) {
return entry->show_title ?: entry->title ?: entry->id;