Utiliser GRUB pour paramétrer le processus de démarrage avec UEFI

Désactiver le Secure Boot

BLFS ne propose pas les paquets essentiels pour prendre en charge Secure Boot. Pour paramétrer le processus de démarrage avec GRUB pour UEFI installé dans BLFS, Secure Boot doit être désactivé dans l'interface de configuration du micrologiciel. Lisez la documentation fournie par le fabriquant de votre système pour trouver comment faire.

Créer un disque de démarrage d'urgence

Assurez-vous qu'un disque de démarrage d'urgence est prêt pour « secourir » le système au cas où le système ne puisse démarrer. Pour créer un disque de démarrage d'urgence avec GRUB pour un système EFI, trouvez un clé USB libre et créez un système de fichiers vfat dessus. Installez d'abord dosfstools-4.2, puis en tant qu'utilisateur root :

[Avertissement]

Avertissement

La commande suivante supprimera tous les répertoires et fichiers de la partition. Assurez-vous que votre clé USB ne contient aucune donnée requise, et remplacez sdx1 par le nœud de périphérique correspondant à la première partition de la clé USB. Faites attention à ne pas écraser votre disque dur à cause d'une coquille !

mkfs.vfat /dev/sdx1

Toujours en tant qu'utilisateur root, utilisez l'utilitaire fdisk pour faire de la première partition de la clé USB une partition « EFI system » (remplacez sdx par le nœud de périphérique correspondant à votre clé USB) :

fdisk /dev/sdx

Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t
Partition number (1-9, default 9): 1
Partition type or alias (type L to list all): uefi
Changed type of partition 'Linux filesystem' to 'EFI System'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Toujours en tant qu'utilisateur root, créez un point de montage pour la partition EFI sur la clé USB et montez-la :

mkdir -pv /mnt/rescue &&
mount -v -t vfat /dev/sdx1 /mnt/rescue

Installez GRUB pour EFI sur la partition :

grub-install --removable --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue/grub

Démontez la partition :

umount /mnt/rescue

Maintenant vous pouvez utiliser la clé USB comme un disque de démarrage d'urgence sur la plateforme UEFI x86-64. Elle démarrera le système et affichera le shell de GRUB. Ensuite vous pourrez taper des commandes pour démarrer votre système d'exploitation sur votre disque dur. Pour apprendre à choisir le périphérique de démarrage, lisez le manuel de votre carte mère ou de votre ordinateur portable.

Configuration du noyau pour la prise en charge de l'UEFI

Activez les options suivantes dans la configuration du noyau et recompilez le noyau si nécessaire :

Processor type and features --->
  [*] EFI runtime service support                              [CONFIG_EFI]
  [*]   EFI stub support                                       [CONFIG_EFI_STUB]
Enable the block layer --->
  Partition Types --->
    [*] Advanced partition selection                           [CONFIG_PARTITION_ADVANCED]
    [*] EFI GUID Partition support                             [CONFIG_EFI_PARTITION]
Device Drivers --->
  Firmware Drivers --->
    [*] Mark VGA/VBE/EFI FB as generic system framebuffer      [CONFIG_SYSFB_SIMPLEFB]
    EFI (Extensible Firmware Interface) Support --->
      < > EFI Variable Support via sysfs                       [CONFIG_EFI_VARS]
      [*] Export efi runtime maps to sysfs                     [CONFIG_EFI_RUNTIME_MAP]
  Graphics support --->
    <*> Direct Rendering Manager                               [CONFIG_DRM]
    <*> Simple framebuffer driver                              [CONFIG_SIMPLEDRM]
    Frame buffer Devices --->
      <*> Support for frame buffer devices --->                [CONFIG_FB]
    Console display driver support --->
      [*] Framebuffer Console support                          [CONFIG_FRAMEBUFFER_CONSOLE]
File systems --->
  Pseudo filesystems --->
    <*/M> EFI Variable filesystem                              [CONFIG_EFIVAR_FS]

Voici la signification des options de configure :

CONFIG_EFI_STUB

Bien que le bout EFI soit conçu pour démarrer un noyau directement à partir du micrologiciel UEFI (sans un chargeur d'amorçage comme GRUB), GRUB a besoin que le noyau soit chargé pour prendre en charge le protocole de passage de relai autorisé par cette option.

CONFIG_EFI_VARS

N'utilisez pas cette option obsolète à cause d'une limite de taille à 1024 octets. Elle est remplacée par CONFIG_EFIVAR_FS

CONFIG_SYSFB_SIMPLEFB, CONFIG_DRM, CONFIG_SIMPLEDRM, CONFIG_FB et CONFIG_FRAMEBUFFER_CONSOLE

La combinaison de ces options permet au noyau d'afficher des messages de débogage (avec les logos de Tux) pendant les premières étapes du processus de démarrage avec UEFI. Pour vous assurer qu'ils seront fonctionnels pendant ces premières étapes, ils ne doivent pas être construits en tant que modules du noyau à moins que vous n'utilisiez un initramfs.

Trouver ou créer la partition EFI système

Sur les systèmes EFI, les chargeurs d'amorçage sont installés dans une partition FAT32 spéciale appelée partition EFI système (ESP). Si votre système prend EFI en charge, et qu'une version récente de Linux ou Windows est pré-installée, il est probable que l'ESP soit déjà créée. En tant qu'utilisateur root, listez toutes les partitions de votre disque dur (remplacez sda par le périphérique correspondant au disque dur approprié) :

fdisk -l /dev/sda

La colonne « Type » de l'ESP devrait être EFI System.

Si le système ou le disque dur est neuf, ou si c'est la première installation d'un système UEFI sur le système, l'ESP n'existe peut-être pas. Dans ce cas, créez une nouvelle partition, mettez un système de fichier vfat dessus et indiquez « EFI system » comme type de partition. Voir les instructions sur le périphérique de démarrage d'urgence plus haut pour référence.

[Avertissement]

Avertissement

Certaines (vieilles) implémentations UEFI peuvent demander que l'ESP soit la première partition du disque.

Maintenant, en tant qu'utilisateur root, créez le point de montage pour l'ESP et montez-la (remplacez sda1 par le nœud de périphérique correspondant à l'ESP) :

mkdir -pv /boot/efi &&
mount -v -t vfat /dev/sda1 /boot/efi

Ajoutez une entrée pour l'ESP dans /etc/fstab pour qu'elle soient montée automatiquement au démarrage du système :

cat >> /etc/fstab << EOF
/dev/sda1 /boot/efi vfat defaults 0 1
EOF

Monter le système de fichiers des variables EFI

L'installation de GRUB sur une plateforme UEFI demande que le système de fichiers des variables EFI, efivarfs soit monté. En tant qu'utilisateur root, montez-le s'il n'est pas encore monté :

mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
[Note]

Note

Si le système est démarré avec UEFI et systemd, efivarfs sera monté automatiquement. Cependant dans l'environnement chroot de LFS il faudra toujours le monter manuellement.

[Avertissement]

Avertissement

Si le système n'est pas démarré avec UEFI, le répertoire /sys/firmware/efi n'existera pas. Dans ce cas vous devriez démarrer le système en mode UEFI avec le disque de démarrage d'urgence créé plus haut.

Mettre en place la configuration

Sur les systèmes UEFI, GRUB fonctionne en installant une application EFI (un type d'exécutable spécial) dans /boot/efi/EFI/[id]/grubx64.efi, où /boot/efi est le point de montage de l'ESP et [id] est remplacé par un identifiant spécifié à la ligne de commande grub-install. GRUB créera une entrée dans les variables EFI contenant le chemin EFI/[id]/grubx64.efi pour que le micrologiciel puisse trouver grubx64.efi et le charger.

grubx64.efi est très léger (136 Ko pour GRUB-2.06~rc1) donc il n'utilisera pas de place dans l'ESP. Une taille typique d'ESP est 100 Mo (pour le chargeur d'amorçage de Windows, qui prend environ 50 Mo dans l'ESP). Une fois grubx64.efi chargé par le micrologiciel, il chargera les modules GRUB dans la partition de démarrage. L'emplacement par défaut est /boot/grub.

En tant qu'utilisateur root, installez les fichiers de GRUB dans /boot/efi/EFI/LFS/grubx64.efi et /boot/grub. Ensuite paramétrez l'entrée de démarrage dans les variables EFI :

grub-install --bootloader-id=LFS --recheck

Si l'installation se passe correctement, la sortie devrait être :

Installing for x86_64-efi platform.
Installation finished. No error reported.

Tapez efibootmgr | cut -f 1 pour revérifier la configuration de démarrage EFI. Voici un exemple de sortie :

BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0005,0000,0002,0001,0003,0004
Boot0000* ARCH
Boot0001* UEFI:CD/DVD Drive
Boot0002* Windows Boot Manager
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device
Boot0005* LFS

Remarquez que 0005 est en premier dans BootOrder et que Boot0005 est LFS. Cela signifie qu'au prochain démarrage, la version de GRUB installée par LFS sera utilisée pour démarrer le système.

Création du fichier de configuration de GRUB

Générez /boot/grub/grub.cfg pour configurer le menu de démarrage de GRUB :

cat > /boot/grub/grub.cfg << EOF
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2
set root=(hd0,2)

if loadfont /boot/grub/fonts/unicode.pf2; then
  set gfxmode=auto
  insmod all_video
  terminal_output gfxterm
fi

menuentry "GNU/Linux, Linux 5.18.8-lfs-r11.1-147"  {
  linux   /boot/vmlinuz-5.18.8-lfs-r11.1-147 root=/dev/sda2 ro
}

menuentry "Firmware Setup" {
  fwsetup
}
EOF

Vous devez remplacer (hd0,2), sda2 et 5.18.8-lfs-r11.1-147 pour correspondre à votre configuration.

[Note]

Note

Du point de vu de GRUB, les fichiers sont relatifs à la partition utilisée. Si vous utilisez une partition /boot séparée, supprimez /boot dans les chemins précédents (vers le noyau et vers unicode.pf2). Vous devrez aussi changer la ligne set root pour pointer vers la partition de démarrage.

L'entrée Firmware Setup peut être utilisée pour entrer dans l'interface de configuration fournie par le micrologiciel (parfois nommée « configuration BIOS »).

Démarrage double avec Windows

Ajoutew une entrée de menu pour Windows dans grub.cfg :

cat >> /boot/grub/grub.cfg << EOF
# Begin Windows addition

menuentry "Windows 10" {
  insmod fat
  insmod chain
  set root=(hd0,1)
  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
EOF

Vous devriez remplacer (hd0,1) par le nom désigné par GRUB pour l'ESP. Vous pouvez utiliser la directive chainloader pour dire à GRUB de lancer un autre exécutable EFI, dans ce cas le gestionnaire de démarrage de Windows. Vous pouvez ajouter des outils supplémentaires au format exécutable EFI (par exemple un shell EFI) dasn l'ESP et leur créer des entrées GRUB.

Last updated on