1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

bootctl: 'graceful' should ignore EFI variable failures

Suppress errors when creating/writing EFI variables during 'bootctl update' if
'--graceful' mode is active (as the documentation indicates).

Closes #26773.
This commit is contained in:
Kevin P. Fleming 2023-03-21 13:46:08 -04:00 committed by Zbigniew Jędrzejewski-Szmek
parent 206760a4bc
commit 06d104d58f

View File

@ -648,7 +648,8 @@ static int install_variables(
uint64_t psize, uint64_t psize,
sd_id128_t uuid, sd_id128_t uuid,
const char *path, const char *path,
bool first) { bool first,
bool graceful) {
uint16_t slot; uint16_t slot;
int r; int r;
@ -671,18 +672,30 @@ static int install_variables(
return log_error_errno(r, "Cannot access \"%s/%s\": %m", esp_path, path); return log_error_errno(r, "Cannot access \"%s/%s\": %m", esp_path, path);
r = find_slot(uuid, path, &slot); r = find_slot(uuid, path, &slot);
if (r < 0) if (r < 0) {
return log_error_errno(r, int level = graceful ? arg_quiet ? LOG_DEBUG : LOG_INFO : LOG_ERR;
r == -ENOENT ? const char *skip = graceful ? ", skipping" : "";
"Failed to access EFI variables. Is the \"efivarfs\" filesystem mounted?" :
"Failed to determine current boot order: %m"); log_full_errno(level, r,
r == -ENOENT ?
"Failed to access EFI variables%s. Is the \"efivarfs\" filesystem mounted?" :
"Failed to determine current boot order%s: %m", skip);
return graceful ? 0 : r;
}
if (first || r == 0) { if (first || r == 0) {
r = efi_add_boot_option(slot, pick_efi_boot_option_description(), r = efi_add_boot_option(slot, pick_efi_boot_option_description(),
part, pstart, psize, part, pstart, psize,
uuid, path); uuid, path);
if (r < 0) if (r < 0) {
return log_error_errno(r, "Failed to create EFI Boot variable entry: %m"); int level = graceful ? arg_quiet ? LOG_DEBUG : LOG_INFO : LOG_ERR;
const char *skip = graceful ? ", skipping" : "";
log_full_errno(level, r, "Failed to create EFI Boot variable entry%s: %m", skip);
return graceful ? 0 : r;
}
log_info("Created EFI boot entry \"%s\".", pick_efi_boot_option_description()); log_info("Created EFI boot entry \"%s\".", pick_efi_boot_option_description());
} }
@ -810,7 +823,7 @@ int verb_install(int argc, char *argv[], void *userdata) {
} }
char *path = strjoina("/EFI/systemd/systemd-boot", arch, ".efi"); char *path = strjoina("/EFI/systemd/systemd-boot", arch, ".efi");
return install_variables(arg_esp_path, part, pstart, psize, uuid, path, install); return install_variables(arg_esp_path, part, pstart, psize, uuid, path, install, graceful);
} }
static int remove_boot_efi(const char *esp_path) { static int remove_boot_efi(const char *esp_path) {