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
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é.
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).
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.
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.
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.
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.
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 :
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
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 :
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.
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 devrait
correspondre à celui sur lequel vous installez LFS. Le numéro
de partition <x><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, qui n'est plus requis pour le processus de démarrage, puisque le système de fichier n'est utilisé que pour manipuler les variables EFI :
umount -v /sys/firmware/efi/efivars
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-wip" {
linux /boot/vmlinuz-6.19.12-lfs-r13.0-69-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.
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.
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 et remplacez <UUID du système de fichiers où le noyau
est installé>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= au lieu de
<UUID du
système de fichiers>root=PARTUUID=, mais cela nécessitera un
initramfs qui va au-delà des objectifs de LFS.
<UUID de la
partition>
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= dans <UUID de la
partition>/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.
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.