Subject: bug#40496: cannot install bootloader

From: Marius Bakke <[email-masked]>
Date: Wed, 08 Apr 2020 00:38:56 +0200

Arne Babenhauserheide <[email-masked]> writes:

> Marius Bakke <[email-masked]> writes:
>
>> Arne Babenhauserheide <[email-masked]> writes:
>>
>>> The error I receive:
>>>
>>> building /gnu/store/fyn1cmq9p38ipp5mlbx1z4gs84qd5jg4-install-bootloader.scm.drv...
>>> Backtrace:
>>>            1 (primitive-load "/root/.config/guix/current/bin/guix")
>>> In guix/ui.scm:
>>>   1936:12  0 (run-guix-command _ . _)
>>>
>>> guix/ui.scm:1936:12: In procedure run-guix-command:
>>> ERROR:
>>>   1. &message: "'/gnu/store/xlcbi7dc89n4wvyz4jk6j0g4590ymi6q-grub-efi-2.04/sbin/grub-install --boot-directory //boot --bootloader-id=Guix --efi-directory //boot/efi' exited with status 1; output follows:\n\n  /gnu/store/xlcbi7dc89n4wvyz4jk6j0g4590ymi6q-grub-efi-2.04/sbin/grub-install: error: /gnu/store/xlcbi7dc89n4wvyz4jk6j0g4590ymi6q-grub-efi-2.04/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.\n"
>>
>> This error suggests that you are attempting to use EFI GRUB on a non-EFI
>> system.
>>
>> More specifically, you are using 'grub-efi-bootloader', but 'grub-efi'
>> failed to detect a UEFI system and attempts to install the 'i386-pc'
>> (BIOS) target instead, which does not exist in 'grub-efi'.
>>
>> Does that ring a bell?
>
> Yes: I’m now booting from the live-USB Stick of Guix, so grub might not
> detect that this is a UEFI system.

Disabling "legacy BIOS compatibility" in your firmware configuration
should work around this.  Some firmwares tend to try "legacy" boot
before a native UEFI boot on external media.

The GRUB EFI detection code just checks whether /sys/firmware/efi
exists, which is only the case when you are already booted in "UEFI
mode".

> I don’t know why it stopped booting. After a pull + system reconfigure
> on 30th of March, the bios did not see my system disk as bootable
> anymore — but this could also be due to problems in the disk, so I’m not
> sure that it’s due to Guix.

That's terrible.  I hope you are able to recover your system.  If the
problem is "just" that the boot entry is missing, you should be able to
create a new one with "efibootmgr --create" manually.  Here is a typical
entry with the EFI System Partition as the first partition of a disk:

# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0002
Boot0000* Guix  HD(1,GPT,32944052-6012-4cda-b270-fe653d430c84,0x800,0x4800)/File(\EFI\Guix\grubx64.efi)

1 is the partition number, and the UUID is the same as 'lsblk -o
PARTUUID /dev/sda1' assuming your disk is /dev/sda.  I don't remember
what 0x800 and 0x4800 means, but don't think they are required.

HTH!