Le chargement au démarrage est un domaine complexe. Tout d'abord, quelques mots de mise en garde sont nécessaires. Vous devez vraiment connaître le chargeur actuel et tout autre système d'exploitation présent sur le disque dur amorçable. Assurez-vous d'avoir une disquette de démarrage de façon à pouvoir « sauver » l'ordinateur si, par malheur, celui-ci devenait inutilisable (non amorçable).
La procédure implique d'écrire quelques fichiers GRUB spéciaux à des endroits sur le disque dur. Nous vous recommandons hautement de créer une disquette de démarrage GRUB de sauvegarde. Insérez une disquette vierge et lancez les commandes suivantes :
cd /tmp grub-mkrescue --output=grub-img.iso dd if=grub-img.iso of=/dev/fd0 bs=1440 count=1
Vous pouvez aussi créer un CD d'amorçage en utilisant le outils de
gravure de CD de votre système hôte pour graver grub-img.iso
sur un CD vierge.
Grub utilise sa propre structure de nommage des disques et
partitions, de la forme (hdn,m), où n est le numéro du disque dur et
m le numéro de la partition.
Le numéro du disque dur commence à zéro, mais le numéro de la
partition commence à un pour des partition normales et à cinq pour
les partitions étendues. Notez que ceci change des versions des
versions précédentes où les deux numéros commençaient à zéro. Par
exemple, la partition sda1
signifie
(hd0,1) pour GRUB et
sdb3
signifie (hd1,3). Contrairement à Linux, Grub ne
considère pas les lecteurs de CDRoms 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).
Vous pouvez déterminer la façon de voir vos lecteurs de disque par GRUB en lançant :
grub-mkdevicemap --device-map=device.map cat device.map
L'emplacement de la partition de démarrage est un choix de
l'utilisateur qui change la configuration. Une recommendation est
d'avoir une petite (la taille suggérée est de 100 Mio) partition à
part pour les informations d'amorçage. 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 on
peut y accéder à partir n'importe quel système amorcé. Si vous
choisissez de faire cela, vous aurez besoin de monter la partition
à part, de déplacer tous les fichiers du répertoire /boot
actuel (par exemple, le noyau linux que
vous venez de construire à la section 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 le faites, assurez-vous de mettre à jour /etc/fstab
.
L'utilisation de la partition lfs actuelle fonctionnera également, mais la configuration pour plusieurs systèmes est 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
à part). Pour l'exemple suivant, on suppose que la partition racine
(ou (de démarrage à part) est sda2
.
Installez les fichiers de GRUB dans /boot/grub
:
grub-install --grub-setup=/bin/true /dev/sda
Nous utilisons pour l'instant --grub-setup=/bin/true pour empêcher la mise à jour du Master Boot Record (MBR). De cette façon, nous pouvons tester notre installation avant de faire un changement sur lequel il est difficile de revenir.
Générez /boot/grub/grub.cfg
:
grub-mkconfig -o /boot/grub/grub.cfg
Ici grub-mkconfig
utilise les fichiers de /etc/grub.d/
pour déterminer le contenu de ce fichier. Le fichier de
configuration ressemblera à quelque chose comme :
#
# N'ÉDITEZ PAS CE FICHIER
#
# Il est généré automatiquement par /usr/sbin/grub-mkconfig en utilisant
# les modèles de /etc/grub.d et les paramètres de /etc/default/grub
### DÉBUT /etc/grub.d/00_header ###
set default=0
set timeout=5
### FIN DE /etc/grub.d/00_header ###
### DÉBUT DE /etc/grub.d/10_linux ###
menuentry "GNU/Linux, Linux 2.6.35.4-lfs-6.7" {
insmod ext2
set root=(hd0,2)
search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
linux /boot/vmlinux-2.6.35.4-lfs-6.7 root=/dev/sda2 ro
}
menuentry "GNU/Linux, Linux 2.6.35.4-lfs-6.7" (recovery mode)" {
insmod ext2
set root=(hd0,2)
search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
linux /boot/vmlinux-2.6.35.4-lfs-6.7 root=/dev/sda2 ro single
}
menuentry "GNU/Linux, Linux 2.6.28-11-server" {
insmod ext2
set root=(hd0,2)
search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
linux /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro
initrd /boot/initrd.img-2.6.28-11-server
}
menuentry "GNU/Linux, Linux 2.6.28-11-server (recovery mode)" {
insmod ext2
set root=(hd0,2)
search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
linux /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro single
initrd /boot/initrd.img-2.6.28-11-server
}
### FIN DE /etc/grub.d/10_linux ###
### DÉBUT DE /etc/grub.d/30_os-prober ###
### FIN DE /etc/grub.d/30_os-prober ###
### DÉBUT DE /etc/grub.d/40_custom ###
# Ce fichier fournit une façon facile d'ajouter des
# entrées de menu personnalisées. Tapez simlement
# les entrées de menu que vous voulez à ajouter après ce
# commentaire. Prenez garde à ne pas modifier la ligne
# 'exec tail'
### FIN DE /etc/grub.d/40_custom ###
Remarquez que même s'il y a un avertissement pour que vous n'éditiez pas le fichier, vous pouvez le faire tant que vous ne relancez pas grub-mkconfig.
Les lignes search ne servent en général à rien dans des systèmes LFS car cette commande ne fait que paramétrer une une variable interne de GRUB utilisée pour trouver l'image du noyau. La commande set root offre la même possibilité sans l'overhead de ;a recherche..
Vous pouvez déplacer les commandes set root et insmod ext2 à l'extérieur des sections menuentry pour l'appliquer à toutes les sections du fichier. Cela conduit à une section simple comme :
menuentry "Linux 2.6.35.4-lfs-6.7" {
linux /boot/vmlinux-2.6.35.4-lfs-6.7 root=/dev/sda2 ro
}
Passer un UUID au noyau exige un disque RAM initial (initrd) qui n'est pas construit par LFS.
Si la partition /boot
est
installée sur une partition séparée, les lignes linux et
initrd ne devraient pas avoir de chaîne /boot en préfixe des noms de
fichiers.
Dans cet exemple les fichiers du noyau pour une
installation Ubuntu se trouvent aussi dans /boot
.
L'image cœoeur de GRUB est aussi un noyau multiboot (multiamorçage), donc si vous avez déjà chargé GRUB Legacy, vous pouvez charger GRUB-1.98 à travers votre ancien chargeur de démarrage. Pour faire cela, vous devrez quitter l'environnement chroot et revenez-y pour finir le peu qui reste à faire dans le livre.
/sbin/reboot ... grub> root (hd0,1) grub> kernel /boot/grub/core.img grub> boot
Remarquez que les commandes GRUB ci-dessus sont supposées liées à GRUB. À ce moment, l'invite de GRUB apparaîtra (très semblable à GRUB Legacy) et vous pourrez explorer l'interface ou démarrer sur un des systèmes du fichier grub.cfg.
Si vous avez testé la configuration de GRUB comme indiqué ci-dessus, ré-entrez dans l'environnement chroot.
La commande suivante va écraser le chargeur de démarrage actuel. Ne lancez pas la commande si vous ne désirez pas cela, par exemple si vous utilisez un gestionnaire de démarrage tiers pour gérer le Master Boot Record (MBR).
Mettez à jour la MBR avec :
grub-setup '<DEVICE>'
Modifiez DEVICE ci-dessus selon votre disque d'amorçage, en principe '(hd0)' ou /dev/sda. Si vous utilisez (hd0) assurez-vous d'exclure l'interprétation des parenthèses avec des anti-slashs ou des guillemets simples pour empêcher le shell de les voir comme un sous-shell.
Ce programme utilise les paramètres par défaut suivant, qui sont corrects si vous n'avez pas dévié des instructions ci-dessus :
image de démarrage - boot.img
image principale - core.img
répertoire - /boot/grub
plan de périphériques - device.map
paramètre racine par défaut - deviné
Le paramètre racine est la valeur par défaut de si une instruction 'set root' n'est pas trouvée dans grub.cfg. C'est la partition qui est explorée pour trouver le noyau et d'autres fichiers de soutien. Il est différent du paramètre 'root=' de la ligne 'linux' dans la ligne configuration. La dernière est la partition que le noyau monte en tant que '/'. Dans l'exemple de grub.cfg ci-dessus, les deux valeurs pointent vers /dev/sda2, mais s'il y a une partition d'amorçage distincte, elles seront différentes.