When I test my system configuration, I now get an EFI bootloader error

For whatever reason I suddenly have an EFI bootloader issue.
I did not touch anything EFI or GPT related that I know of, so I’m clueless as to where this is coming from.

$ LANGUAGE=en_US sudo guix system vm /etc/config.scm
guix system: error: EFI bootloader required with GPT partitioning

My /etc/config.scm file:

;; Ceci est une configuration de système d'exploitation générée par
;; l'installateur graphique.
;;
;; Une fois l'installation terminée, vous pouvez apprendre à modifier
;; ce fichier pour ajuster la configuration du système et le passer à
;; la commande « guix system reconfigure » pour rendre vos changements
;; effectifs.

;; Indique quels modules importer pour accéder aux variables
;; utilisées dans cette configuration.
(use-modules (gnu))
(use-service-modules cups desktop networking ssh xorg)

(operating-system
  (locale "fr_BE.utf8")
  (timezone "Europe/Amsterdam")
  (keyboard-layout (keyboard-layout "us" "dvorak"))
  (host-name "XXX")

  ;; La liste des comptes utilisateurs (« root » est implicite).
  (users (cons* (user-account
                  (name "xxx")
                  (comment "XXX")
                  (group "users")
                  (home-directory "/home/xxx")
                  (supplementary-groups '("wheel" "netdev" "audio" "video")))
                %base-user-accounts))

  ;; Voici la liste des services du système.  Pour trouver les services
  ;; disponibles, lancez « guix system search MOT-CLÉ » dans un terminal.
  (services
   (append (list (service xfce-desktop-service-type)

                 ;; Pour configurer OpenSSH, passez un enregistrement « openssh-configuration »
                 ;; en deuxième argument à « service » ci-dessous.
                 (service openssh-service-type)
                 (service cups-service-type)
                 (simple-service 'flatpak-service etc-profile-d-service-type
                                 (list (local-file "flatpak.sh")))
                 (set-xorg-configuration
                  (xorg-configuration (keyboard-layout keyboard-layout))))

           ;; Voici la liste des services par défaut à laquelle nous
           ;; ajoutons nos propres services.
           %desktop-services))
  (bootloader (bootloader-configuration
                (bootloader grub-efi-bootloader)
                (targets (list "/boot/efi"))
                (keyboard-layout keyboard-layout)))
  (mapped-devices (list (mapped-device
                          (source (uuid "XXX"))
                          (target "cryptroot")
                          (type luks-device-mapping))))

  ;; La liste des systèmes de fichiers qui seront « montés ».  Les identifiants
  ;; de systèmes de fichiers uniques (« UUIDs ») qui se trouvent ici s'obtiennent
  ;; en exécutant « blkid » dans un terminal.
  (file-systems (cons* (file-system
                         (mount-point "/")
                         (device "/dev/mapper/cryptroot")
                         (type "btrfs")
                         (dependencies mapped-devices))
                       (file-system
                         (mount-point "/boot/efi")
                         (device (uuid "XXX"
                                       'fat32))
                         (type "vfat")) %base-file-systems)))

Maybe your vm has no GPT partition?

1 Like

How can I check and how can I switch to one if it doesn’t?

I think you can use commands like

lsblk #or
fdisk -l #or
parted

to check gpt partition.

To setup a gpt partition, you can use

parted

Please note that the UUID format of GPT EFI is different from MBR.

1 Like

I know I can do fdisk -l and check the disklabel of my own machine, which is GPT.

Disk /dev/sda: 1,86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: INTENSO SSD     
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: XXX-X-X-X-XXX

I’m just not familiar what exactly happens when I type in guix system vm /etc/config.scm, how it creates a vm and in particular where it decides its disklabel type.

I’m assuming here that the vm created uses msdos disklabel type, but I could be wrong.

guix system vm

I think will create qemu script to run. The default is BIOS, not UEFI. Maybe you can pass -uefi to check. Otherwise, you need use a firmware that support UEFI.

This sounds like I will need to install OVMF and somehow get guix system vm to use the /gnu/store/[id_ovmf]/share/firmware/ovmf_code_$arch.bin as it’s bootloader.

some command line like

(guix system vm config.scm) -drive file=the-firmware

The -drive argument doesn’t exist.