Package: grub-installer
Version: 1.186
Severity: important


On systems where efivarfs cannot be mounted, the grub installation step fails
even though it would have otherwise worked just fine skipping the mount
efivarfs command, i.e. system installation is successful with this preseed file:

  d-i partman/early_command string sed -i 's/mountvirtfs efivarfs/#/' 

The relevant code in d/postinst looks as follows, suggesting the intention to
ignore failures:

  mountvirtfs efivarfs /target/sys/firmware/efi/efivars || true

However, mountvirtfs itself is exiting with 1 in case of mount errors:

  mountvirtfs () {
          if grep -q "[[:space:]]$fstype\$" /proc/filesystems && \
             ! grep -q "^[^ ]\+ \+$path " /proc/mounts; then
                  mkdir -p "$path" || \
                          die grub-installer/mounterr "Error creating $path"
                  mount -t "$fstype" "$fstype" "$path" || \
                          die grub-installer/mounterr "Error mounting $path"
                  trap "umount $path" HUP INT QUIT KILL PIPE TERM EXIT
I'm unsure as to what the best course of action is here, but perhaps an idea is
to avoid calling "die" when mount fails for efivarfs, and log an error to
/var/log/syslog instead? Of course the relevant umount should be skipped too.

In any case, the "|| true" part in the mountvirtfs efivarfs call should
probably be dropped.

Please note that this issue is different from
In that case, installing grub fails *because* efivarfs does not get mounted
properly, and the surprising bit is that the mountvirtfs efivarfs call does
*not* fail for some reason. :-)

FTR here's the error I get trying to mount efivarfs manually:

  ~ # mount -t efivarfs efivarfs /target/sys/firmware/efi/efivars
  mount: mounting efivarfs on /target/sys/firmware/efi/efivars failed: 
Operation not supported


Reply via email to