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

[Note]

Note

Si votre système prend en charge l'UEFI et que vous souhaitez démarrer LFS avec l'UEFI, ignorez les instructions de cette page mais apprenez quand même la syntaxe de grub.cfg et la manière de spécifier une partition dans le fichier de cette page et configurez GRUB avec la prise en charge de l'UEFI en suivant les instructions de la page BLFS.

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, GRUB2 ou LILO.

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. 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.3. Réglage de la configuration

GRUB fonctionne en écrivant les données sur le premier secteur physique du disque dur. Ce secteur ne fait partie d'aucun système de fichiers. Les programmes accèdent alors aux modules de GRUB dans la partition de démarrage. L'emplacement par défaut est /boot/grub/.

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, chaque construction, que ce soit LFS ou d'autres distributions commerciales, peut accéder aux mêmes fichiers de démarrage et n'importe quel système démarré peut y accéder. 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.

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.

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.

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 Master Boot Record (MBR).

grub-install /dev/sda
[Note]

Note

Si le système a été démarré en UEFI, grub-install essayera d'installer des fichiers pour la cible x86_64-efi, mais ces fichiers n'ont pas été installés au Chapitre 8. Si c'est le cas, ajoutez --target i386-pc à la commande ci-dessus.

10.4.4. 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)

menuentry "GNU/Linux, Linux 6.4.12-lfs-12.0-systemd" {
        linux   /boot/vmlinuz-6.4.12-lfs-12.0-systemd root=/dev/sda2 ro
}
EOF

Les commandes insmod chargent les modules GRUB nommés part_gpt et ext2. Malgré son nom, ext2 prend en fait en charge les systèmes de fichiers ext2, ext3 et ext4. La commande grub-install a intégré certains modules dans l'image principale de GRUB (installée dans le MBR ou la partition BIOS GRUB) pour accéder aux autres modules (dans /boot/grub/i386-pc) sans problème de type « l'œuf ou la poule », donc avec une configuration typique, ces deux modules sont déjà intégrés et ces deux commandes insmod ne feront rien. Mais elles ne posent aucun problème dans tous les cas, et peuvent être requises dans certaines configurations un peu rares.

[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 (plus rarement que les désignations GRUB cependant). 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.