10.4. Utiliser GRUB pour paramétrer le processus de démarrage

10.4.1. Introduction

[Avertissement]

Avertissement

Une mauvaise configuration de GRUB peut rendre votre système inutilisable si vous n'avez pas d'autre périphérique d'amorçage comme un cédérom. Cette section n'est pas obligatoire pour démarrer votre système LFS. Il se peut que vous vouliez simplement modifier votre chargeur de démarrage actuel, comme Grub-Legacy ou GRUB2.

Assurez-vous d'avoir un disque de démarrage de façon à pouvoir « dépanner » l'ordinateur si celui-ci devenait inutilisable (non amorçable). Si vous n'avez pas déjà de périphérique de démarrage, vous pouvez en créer un. Afin que la procédure ci-dessous fonctionne, vous devez faire un tour du côté de BLFS et installer xorriso qui est dans le paquet libisoburn.

cd /tmp
grub-mkrescue --output=grub-img.iso
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso

10.4.2. Désactivez le démarrage sécurisé (Secure Boot)

LFS ne contient pas les paquets essentiels à la prise en charge du démarrage sécurité. Pour configurer le processus de démarrage suivant les instructions de cette section, le démarrage sécurité doit être désactivé dans l'interface de configuration du micrologiciel. Consultez la documentation fournie par le constructeur de votre système pour trouver comment désactiver la prise en charge du démarrage sécurisé.

10.4.3. Conventions de nommage de GRUB

GRUB utilise son propre système de dénomination des disques et des partitions. Il prend la forme (hdn,m) : n indique le numéro du disque dur et m le numéro de la partition. Le numéro du disque dur commence à partir de zéro, mais le numéro de la partition commence à partir d'un pour les partitions normales et à partir de cinq pour les partitions étendues. Ceci diffère des versions précédentes où les deux numéros commençaient à partir de zéro. Par exemple, la partition sda1 correspond à (hd0,1) pour GRUB et la partition sdb3 correspond à (hd1,3). Contrairement à Linux, GRUB ne considère pas les lecteurs de CD-ROM comme des disques durs. Par exemple, si un CD se trouve sur hdb et un second disque dur sur hdc, ce dernier disque sera malgré tout (hd1).

10.4.4. Réglage de la configuration

Si vous démarrez le système via BIOS, GRUB fonctionne en écrivant un bouchon sur le premier secteur (l'enregistrement de démarrage principal ou Master Boot Record, MBR) du disque dur. Cet emplacement ne fait partie d'aucun système de fichiers. Le BIOS charge et exécute le contenu du MBR, puis le bouchon charge l'image GRUB principale dans la partition de démarrage BIOS. L'image GRUB est stockée en tant que données brutes plutôt que comme un fichier (il ne doit y avoir aucun système de fichiers sur la partition de démarrage BIOS) pour que le bouchon n'ait pas besoin de prendre en charge le système de fichiers et qu'il soit suffisamment petit pour tenir sur le MBR.

Si vous démarrez le système via UEFI, GRUB fonctionne en stockant l'image GRUB principale dans un fichier exécutable au format PE-COFF à un emplacement standard dans la partition système EFI (ESP) : EFI/BOOT/BOOTX64.EFI (ou EFI/BOOT/BOOTIA32.EFI pour i386-efi). Le micrologiciel UEFI le charge à partir de l'emplacement standard et l'exécute, ce qui lance GRUB.

De nombreuses fonctions de GRUB (y compris le démarrage du noyau Linux) ne sont pas incluses dans l'image GRUB principale. Au lieu de cela, elles sont stockées dans un système de fichier en tant que modules de GRUB. Ce système de fichier est généralement monté de manière à ce que les modules de GRUB soient accessibles dans /boot/grub sur la plupart des distributions Linux. Pour éviter un problème d'œuf et de poule, grub-install intègre les modules nécessaires à l'accès à ce système de fichiers dans l'image GRUB principale, pour qu'il puisse trouver et charger les autres modules.

L'emplacement de la partition de démarrage est un choix de l'utilisateur qui conditionne la configuration. L'utilisation d'une petite partition distincte (la taille suggérée est de 200 Mo) pour les informations de démarrage est recommandée. De cette façon, LFS comme d'autres distributions Linux, peuvent accéder aux mêmes fichiers de démarrage et à n'importe quel système démarré. Si vous choisissez cette option, vous aurez besoin de monter la partition séparément, de déplacer tous les fichiers du répertoire /boot actuel (par exemple, le noyau linux que avez construit à l'étape précédente) vers la nouvelle partition. Vous aurez ensuite besoin de démonter la partition puis de la remonter en tant que /boot. Si vous procédez à ce changement, assurez-vous de mettre à jour /etc/fstab.

[Note]

Note

Si la distribution hôte utilise une partition séparée pour /boot et que vous souhaitez que le système LFS utilise cette partition pour /boot également, montez simplement cette partition sur $LFS/boot dans la distribution hôte. Le noyau Linux prend en charge le montage d'une partition à plusieurs endroits.

Il est possible de laisser la partition LFS actuelle dans le répertoire /boot, mais cela rendra la configuration de plusieurs systèmes plus difficile.

Vous pouvez consulter Section 2.4, « Création d'une nouvelle partition » pour trouver des exemples et plus d'informations sur les dispositions des partitions de démarrage.

En utilisant les informations ci-dessus, déterminez le nom adapté à la partition racine (ou partition de démarrage, s'il en existe une distincte). Pour l'exemple suivant, supposons que la partition racine (ou la partition de démarrage) est sda2.

Les sections suivantes expliquent comment démarrer avec BIOS et UEFI. Les installations de GRUB pour BIOS, UEFI 64 bits et UEFI 32 bits peuvent coexister et partager la même configuration. Les images et les données se situent à des endroits différents, donc vous pouvez aussi bien créer les deux partitions de démarrage BIOS et EFI, et installer GRUB pour tous les types de micrologiciels pris en charge (c'est-à-dire exécuter trois commandes grub-install). Si vous ne savez pas quel est votre type de micrologiciel, ou si vous prévoyez de brancher le disque dur sur un ordinateur différent, c'est ce que vous pouvez faire pour couvrir tous les cas.

[Note]

Note

Si vous utiliser un démarrage UEFI mais avez créé la partition BIOS de Grub, vous devriez exécuter la commande pour le BIOS au cas où le démarrage UEFI ne fonctionne pas correctement.

[Note]

Note

Si vous n'avez besoin d'installer GRUB que pour une seule méthode de démarrage, vous n'avez pas besoin d'exécuter les commandes pour les deux méthodes. Vous pouvez simplement exécuter la commande pour la méthode de démarrage souhaitée.

10.4.4.1. Démarrer en mode BIOS

Pour démarrer en mode BIOS, assurez-vous que la partition de démarrage est montée (si vous utilisez une partition séparée) et que la partition de démarrague BIOS existe. Ensuite, installez les fichiers de GRUB dans /boot/grub et paramétrez le secteur d'amorçage :

[Avertissement]

Avertissement

La commande suivante va écraser le chargeur de démarrage actuel. Ne lancez pas la commande si ce n'est pas ce que vous désirez, par exemple si vous utilisez un gestionnaire de démarrage extérieur pour gérer le MBR.

grub-install /dev/sda --target=i386-pc

10.4.4.2. Démarrer en mode UEFI

Pour démarrer en mode UEFI, assurez-vous que la partition de démarrage soit montée (si vous en utilisez une séparée) et que la partition système EFI (ESP) est montée sur /boot/efi. Ensuite, installez les fichiers GRUB dans /boot/grub et le'image principale de GRUB dans /boot/efi/EFI/BOOT/BOOTX64.EFI :

[Avertissement]

Avertissement

La commande suivante remplacera le fichier /boot/efi/EFI/BOOT/BOOTX64.EFI. S'il existe déjà, il est probable qu'il s'agisse de l'entrée d'un autre chargeur d'amorçage (par exemple l'installation de GRUB de la distribution hôte, ou le gestionnaire de démarrage de Windows). Sauvegardez le fichier pour pouvoir le restaurer plus tard ou le charger comme un chargeur d'amorçage secondaire par la nouvelle installation de GRUB de LFS.

grub-install --target=x86_64-efi --removable

La commande ci-dessus suppose que vous avez un micrologiciel UEFI en 64 bits. Si vous souhaitez rendre le système amorçable avec un micrologiciel UEFI 32 bits, exécutez la commande en remplaçant x86_64-efi par i386-efi.

L'option --removable fait utiliser l'emplacement standard à grub-install, EFI/BOOT/BOOTX64.EFI (ou EFI/BOOT/BOOTIA32.EFI pour i386-efi), au lieu de l'emplacement que GRUB préfère (EFI/GRUB/GRUBX64.EFI ou EFI/GRUB/GRUBIA32.EFI). Utiliser un emplacement non standard ferait enregistrer l'emplacement dans un variable EFI, mais LFS ne contient pas le paquet BLFS efibootmgr, qui est requis pour manipuler les variables EFI.

[Note]

Note

Certains chargeurs d'amorçage EUFI, bien que rares, sautent le chemin EFI en dur. Ces systèmes sont la plupart du temps anciens, comme certains ThinkPads Lenovo ou des ordinateurs de bureau ou portables HP. Lorsque l'entrée de démarrage n'existe pas dans le BIOS, vous devrez installer le paquet BLFS efibootmgr pour créer une entrée de démarrage pour UEFI. Si c'est plus facile, le paquet peut être installé via le gestionnaire de paquets de votre distribution, et vous pouvez l'utiliser sur l'hôte au lieu du système LFS. Cela peut éviter de télécharger plus d'archives sur le système LFS pour le moment.

Commencez par installer le paquet, puis montez le système de fichiers des variables EFI s'il ne l'est pas déjà :

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

Maintenant créez une entrée de démarrage pour EFI :

efibootmgr -c -d /dev/sd<x> \
  -p <y> -L "LFS" -l '\EFI\BOOT\BOOT<X64>.EFI'

Le disque /dev/sd<x> devrait correspondre à celui sur lequel vous installez LFS. Le numéro de partition <y> devrait correspondre au numéro de celle sur laquelle l'ESP est monté. Si l'ESP est sur /dev/sda2, alors le numéro de partition sera 2. Si vous utilisez l'UEFI 32 bits, remplacez <X64> par IA32.

Certains micrologiciels (cassés) peuvent nécessiter des paramètres supplémentaires pour efibootmgr, comme --full-dev-path ou -e 1 -E. Consultez la page de manuel d'efibootmgr(8) pour plus de détails.

Maintenant démontez le système de fichiers des variables EFI :

umount -v /sys/firmware/efi/efivars

10.4.5. Créer le fichier de configuration de GRUB

Générez /boot/grub/grub.cfg :

cat > /boot/grub/grub.cfg << "EOF"
# Début de /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2

set root=(hd0,2)

# Pour UEFI
insmod efi_gop
insmod efi_uga

set gfxpayload=1024x768x32

menuentry "GNU/Linux, Linux 6.19.12-lfs-r13.0-69-systemd-wip" {
        linux   /boot/vmlinuz-6.19.12-lfs-r13.0-69-systemd-wip root=/dev/sda2 ro
}
EOF

Les commandes insmod chargent les modules GRUB nommés part_gpt, ext2 efi_gop et efi_uga. Malgré son nom, ext2 prend en fait en charge les systèmes de fichiers ext2, ext3 et ext4. Sur les systèmes UEFI, efi_gop et efi_uga prennent en charge l'affichage vidéo. GOP (Graphics Output Protocol, ou protocole de sortie graphique), est une approche moderne. UGA (ou UGA Draw Protocol, ou protocole de dessin UGA) est une ancienne manière de gérer l'affichage. Pour une configuration habituelle, les modules part_gpt et ext2 sont déjà intégrés dans l'image GRUB principale par grub-install, et les commandes insmod ne feront rien. Cependant, elles ne posent aucun problème dans tous les cas, et peuvent être requises dans certaines configurations un peu rares.

La commande set gfxpayload=1024x768x32 paramètre la résolution et la profondeur des couleurs du framebuffer VESA à passer au noyau. Elle est nécessaire pour que le pilote SimpleDRM du noyau utilise le framebuffer VESA. Vous pouvez utiliser une résolution ou une profondeur des couleurs différentes qui correspondent mieux à votre écran. Cette ligne ne fait rien si le système est démarré via UEFI, mais elle ne pose aucun problème non plus.

[Note]

Note

Du point de vue de GRUB, les fichiers du noyau sont relatifs à la partition utilisée. Si vous avez utilisé une partition /boot distincte, supprimez /boot de la ligne linux ci-dessus. Vous devrez aussi modifier la ligne set root pour pointer vers la partition d'amorçage.

[Note]

Note

La désignation GRUB pour une partition peut changer si vous ajoutez ou retirez des disques (dont les disques amovibles comme les clés USB). Le changement peut causer des échecs de démarrage parce que grub.cfg se réfère à « d'anciennes » désignations. Pour éviter ce problème, vous pouvez utiliser l'UUID de la partition et du système de fichiers pour indiquer une partition plutôt que d'utiliser la désignation GRUB. Exécutez lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT pour afficher l'UUID de vos systèmes de fichiers (dans la colonne UUID) et de vos partitions (dans la colonne PARTUUID). Remplacez ensuite set root=(hdx,y) par search --set=root --fs-uuid <UUID du système de fichiers où le noyau est installé> et remplacez root=/dev/sda2 par root=PARTUUID=<UUID de la partition où LFS est construit>.

L'UUID d'une partition et l'UUID du système de fichiers dans cette partition sont complètement différents. Certaines ressources en ligne peuvent vous indiquer d'utiliser root=UUID=<UUID du système de fichiers> au lieu de root=PARTUUID=<UUID de la partition>, mais cela nécessitera un initramfs qui va au-delà des objectifs de LFS.

Le nom du nœud de périphérique pour une partition dans /dev peut aussi changer (très fréquemment sur certains systèmes qui ont plusieurs disques NVME). Vous pouvez aussi remplacer les chemins vers les nœuds de périphériques comme /dev/sda1 par PARTUUID=<UUID de la partition> dans /etc/fstab pour éviter un échec au démarrage éventuel dans le cas où le nom du nœud de périphérique aurait changé.

GRUB est un programme extrêmement puissant et il offre un très grand nombre d'options pour démarrer depuis une large gamme de périphériques, de systèmes d'exploitation et de types de partition. Il a aussi beaucoup d'options de personnalisation telles que les écrans d'accueil graphiques, les annonces sonores, l'entrée à la souris, etc. Les détails de ces options vont au-delà des objectifs de cette introduction.

[Attention]

Attention

Il existe une commande, grub-mkconfig qui peut écrire automatiquement un fichier de configuration. Elle utilise un ensemble de scripts situés dans /etc/grub.d/ et elle détruira les personnalisations que vous aurez faites. Ces scripts sont d'abord conçus pour des distributions qui ne se basent pas sur les sources et ils ne sont pas recommandés pour LFS. Si vous installez une distribution Linux commerciale, il est fort probable que ce programme soit lancé. Assurez-vous de sauvegarder votre fichier grub.cfg.