Package: systemd Version: 225-1 Severity: normal Tags: patch systemd assumes that the ESP partition is mounted on /boot. Instead debian seems to suggest to mount it on /boot/efi/.
(systemd) bootctl relies on this assumption. The user could override this default via the --path switch, but this is annoing. The patch below adds a check: if the /boot/efi/EFI directory exists, bootctl assumes that the ESP is mounted on /boot/efi, otherwise /boot. Anyway the user can still override the default using the --path switch. I proposed the patch upstream [1] but it was rejected becuase the systemd developers want to support only mounting ESP on /boot. BR G.Baroncelli [1] https://github.com/systemd/systemd/pull/1124 diff --git a/man/bootctl.xml b/man/bootctl.xml index 63ad939..0a96aae 100644 --- a/man/bootctl.xml +++ b/man/bootctl.xml @@ -102,7 +102,7 @@ <xi:include href="standard-options.xml" xpointer="version" /> <varlistentry> <term><option>--path</option></term> - <listitem><para>Path to the EFI system partition. The default is /boot.</para></listitem> + <listitem><para>Path to the EFI system partition. By default bootctl uses /boot/efi (if ESP is mounted here) or /boot.</para></listitem> </varlistentry> <varlistentry> diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index ac1711b..319994e 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -936,7 +936,7 @@ static int help(void) { return 0; } -static const char *arg_path = "/boot"; +static const char *arg_path = NULL; static bool arg_touch_variables = true; static int parse_argv(int argc, char *argv[]) { @@ -996,6 +996,18 @@ static void read_loader_efi_var(const char *name, char **var) { log_warning_errno(r, "Failed to read EFI variable %s: %m", name); } +static void init_arg_path(void) { + struct stat st; + + if (stat("/boot/efi/EFI", &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR) { + /* Suse, debian, ubuntu, gentoo, fedora */ + arg_path = "/boot/efi"; + } else { + /* arch */ + arg_path = "/boot"; + } +} + static int bootctl_main(int argc, char*argv[]) { enum action { ACTION_STATUS, @@ -1036,6 +1048,9 @@ static int bootctl_main(int argc, char*argv[]) { if (geteuid() != 0) return log_error_errno(EPERM, "Need to be root."); + if (arg_path == NULL) + init_arg_path(); + r = verify_esp(arg_path, &part, &pstart, &psize, &uuid); if (r == -ENODEV && !arg_path) log_notice("You might want to use --path= to indicate the path to your ESP, in case it is not mounted on /boot."); -- System Information: Debian Release: stretch/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 4.2.0 (SMP w/4 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages systemd depends on: ii adduser 3.113+nmu3 ii libacl1 2.2.52-2 ii libapparmor1 2.9.2-3 ii libaudit1 1:2.4.4-1 ii libblkid1 2.26.2-9 ii libc6 2.19-19 ii libcap2 1:2.24-11 ii libcap2-bin 1:2.24-11 ii libcryptsetup4 2:1.6.6-5 ii libgcrypt20 1.6.3-2 ii libkmod2 21-1 ii liblzma5 5.1.1alpha+20120614-2.1 ii libmount1 2.26.2-9 ii libpam0g 1.1.8-3.1 ii libseccomp2 2.2.3-2 ii libselinux1 2.3-2+b1 ii libsystemd0 225-1 ii mount 2.26.2-9 ii sysv-rc 2.88dsf-59.2 ii udev 225-1 ii util-linux 2.26.2-9 Versions of packages systemd recommends: ii dbus 1.8.20-1 ii libpam-systemd 225-1 Versions of packages systemd suggests: ii systemd-container 225-1 pn systemd-ui <none> -- Configuration Files: /etc/systemd/journald.conf changed [not included] -- no debconf information
bootctl-ESP.diff
Description: inode/empty