Marek Felšöci

Facing issues while installing Guix

I have recently performed a clean installation of the GNU Guix [1] Linux distribution on a new laptop computer. During the setup process, I have experienced some serious issues. In this post, I investigate their causes and propose methods for fixing them.

Encryption

If you plan to encrypt the entire hard drive, use the automatic partitionning with encryption. Otherwise, GRUB fails to recognize the booting partition. Note that, defining a separate partition for the /boot filesystem is not supported in Guix.

Struggling with UEFI

On modern computers, the Unified Extensible Firmware Interface (UEFI) comes to replace the legacy Basic Input/Output System (BIOS) firmware interface allowing to start up an operating system. Normally, it is possible to choose whether your machine should use UEFI or BIOS to boot the operating system. Although, sometimes you do not have the choice. This is also the case of DELL Latitude 5490 which I used to install Guix on. This model allows to boot in legacy mode only from external devices such as USB flash drives or SD cards. Internal boot is only possible in UEFI mode. Guix can be installed in UEFI mode but I have experienced several issues during the installation process that I address in following sections.

Secure boot

The first thing to do when booting from an external media in UEFI mode is to disable the Secure boot feature in your UEFI system settings. Otherwise, it prevents the computer from booting from any external device for security reasons.

Searching for missing partition

Another problem may arise on the launch of the setup program from the installation media in the case you are booting from a USB flash drive. The kernel reports Searching for missing partition… but, the partition is never detected and after a couple of tries the setup fails. Apparently, the system is unable to mount one of the partitions present on the bootable USB. The fix is simple, unplug and plug the bootable USB drive again before the detection delay expires.

No bootable devices found

The rest of the setup process should work smoothly. Although, after the final reboot, the freshly installed system may remain unbootable. On a computer using UEFI, you should have a dedicated EFI partition holding the bootloaders of all the operating systems installed on your machine. In the root of this partition, there is a folder named EFI containing a specific folder for each bootloader:

.
└── EFI
    ├── Guix
    │   └── grubx64.efi
    ├── debian
    │   └── grubx64.efi
    └── ...

UEFI should be able to detect these bootloaders and let you choose which operating system you want to launch. Unfortunately, some dumb UEFI implementations make it look for a bootloader only in a fallback location referred to as removable media path. The latter is also present on the EFI partition. While some most popular systems, such as Windows or Ubuntu, install their bootloaders to both locations, Guix as well as many other Linux distributions does not do that by default. This cause a No bootable devices found error message since the first run [2].

The solution is to manually copy the bootloader configuration from the dedicated folder over to the fallback removable media path location. Be careful, because you can copy the configuration of only one boot entry which means that the other operating systems becomes unbootable!

Step 1: Boot from installation media

To perform the repair, you need to have access to a terminal and to the internal hard drive. Boot from your Guix installation media again and on the welcome screen select the Install using the shell based process option. This will bring you to a root shell.

Step 2: Mount the EFI partition

The next step is to mount the EFI partition in oder to be able to manipulate its contents. The mounting command should look as follows.

mount /dev/sda1 /mnt

Here /dev/sda1/ corresponds to the EFI partition and /mnt is the target mount point on the system. Then, navigate to the EFI folder on the EFI partition:

cd /mnt/EFI

In this folder, you should see folders corresponding to the boot entries present on your system. In my case, there was only one folder named Guix corresponding to my Guix installation. Before proceeding to the next step, create the removable media path folder (if it does not exist yet) named boot under the EFI folder:

mkdir boot

At this point, the boot folder should be at /mnt/EFI/boot.

Step 3: Copy the bootloader configuration

Pick a bootloader and copy the associated .efi file from the dedicated folder to /mnt/EFI/boot using the name bootx64.efi. Just replace x64 by the correct architecture name:

  • amd64: bootx64.efi
  • i386: bootia32.efi
  • armhf: bootarm.efi
  • arm64: bootaa64.efi

Guix uses the GRUB bootloader by default. In my case, I have used the following copy command:

cp Guix/grubx64.efi boot/bootx64.efi

Yours should look similarly.

Step 4: Reboot

After a reboot the system should start normally.

Step 5: Restoring broken multi-boot configuration

As I have mentionned before, this manipulation makes other operating systems on your machine unbootable. For now, I did not investigate any restoration method as I use only one system. Although, [3] may be helpful.

References

[1]
“GNU Guix software distribution and transactional package manager.” https://guix.gnu.org.
[2]
M. Garrett, “Booting with EFI.” https://mjg59.livejournal.com/138188.html.
[3]
“Grub EFI Reinstall.” https://wiki.debian.org/GrubEFIReinstall.

Last update on 18/08/2022


This site is proudly powered by Org mode for Emacs on the servers of Websupport, spol. s r. o.

Source code of the site is publicly available on GitHub.

Featured icons come from the open-source sets Chicago95 and flag-icons.

Content is available under the Creative Commons BY NC ND 4.0 International license unless otherwise stated.

Creative Commons License