EFI support: fix for grub-install usage with efivarfs
authorMichael Prokop <mika@grml.org>
Mon, 16 Aug 2021 19:19:20 +0000 (21:19 +0200)
committerMichael Prokop <mika@grml.org>
Mon, 23 Aug 2021 14:14:41 +0000 (16:14 +0200)
We had to apply fixes due to efivars vs efivarfs in Debian kernel
versions >=5.10, and addressed them in commit d91d9f3ef.

Those changes were incomplete though: while efibootmgr was invoked in
the according and expected environment, invocation of grub-install
doesn't reliably work (as at that time /sys/firmware/efi/efivars is no
longer accessible).

GRUB installation on EFI systems without /sys/firmware/efi/efivars
present warns with (also see https://sources.debian.org/src/grub2/2.04-20/debian/patches/efi-variable-storage-minimise-writes.patch/?hl=650#L650):

| EFI variables are not supported on this system

But it returns with exit code 0. This leaves us with an incomplete and
therefore not booting GRUB EFI environment. Fix it by unmounting
/sys/firmware/efi/efivars only from within our final stage.

chroot-script

index 8104df1..e59b829 100755 (executable)
@@ -604,9 +604,6 @@ efi_setup() {
 
   echo "Invoking efibootmgr"
   efibootmgr || return 1
-
-  umount /sys/firmware/efi/efivars &>/dev/null || true
-
 }
 
 # grub configuration/installation {{{
@@ -725,6 +722,8 @@ finalize() {
 
   [ -n "$POLICYRCD" ] && rm -f /usr/sbin/policy-rc.d
 
+  umount /sys/firmware/efi/efivars &>/dev/null || true
+
   umount /sys >/dev/null 2>/dev/null || true
   umount /proc >/dev/null 2>/dev/null || true
 }