mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +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:
parent
206760a4bc
commit
06d104d58f
@ -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;
|
||||||
|
const char *skip = graceful ? ", skipping" : "";
|
||||||
|
|
||||||
|
log_full_errno(level, r,
|
||||||
r == -ENOENT ?
|
r == -ENOENT ?
|
||||||
"Failed to access EFI variables. Is the \"efivarfs\" filesystem mounted?" :
|
"Failed to access EFI variables%s. Is the \"efivarfs\" filesystem mounted?" :
|
||||||
"Failed to determine current boot order: %m");
|
"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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user