Vous avez maintenant un noyau et un système de fichiers compressé. Si vous construisez un disque d'amorce/racine unique, vérifiez que leur taille ne dépasse pas celle du disque. Si vous avez un découpage sur deux disquettes, vérifiez que la taille du système racine ne dépasse pas celle de la disquette.
Il vous faut choisir entre l'utilisation de LILO pour démarrer le noyau du disque d'amorce et la copie du noyau directement sur la disquette d'amorce, sans LILO. L'avantage de LILO est la possibilité de passer des paramètres au noyau, ce qui peut être nécessaire pour initialiser votre matériel (Regardez le fichier /etc/lilo.conf sur votre machine. S'il existe et contient une ligne du type append=…, vous avez besoin de passer des paramètres). Son inconvénient est une complexité accrue dans la construction du disque d'amorce, ainsi qu'une place occupée sur la disquette légèrement plus importante. Vous devrez configurer un petit système de fichier séparé que nous appellerons le système noyau, où vous transférerez le noyau ainsi que quelques autres fichiers nécessaires à LILO.
Si vous décidez d'utiliser LILO, continuez la lecture ; si par contre vous voulez copier le noyau directement sur la disquette, passez directement à la Section 6.2.
La première chose à faire est de vérifier que vous avez une version récente de LILO. Ensuite, il faut créer un petit fichier de configuration pour LILO. Il doit ressembler à :
boot =/dev/fd0 install =/boot/boot.b map =/boot/map read-write backup =/dev/null compact image = NOYAU label = Bootdisk root =/dev/fd0 |
Pour la signification de ces paramètres, voir la documentation utilisateur de LILO. Il vous faudra probablement aussi rajouter une ligne append=… à ce fichier, comme dans le fichier /etc/lilo.conf de votre disque dur.
Sauvez-le en tant que bdlilo.conf.
Vous devez maintenant créer un petit système de fichier, que nous appellerons système noyau, pour le différencier du système racine.
Tout d'abord, calculez la taille que celui-ci doit faire. Prenez la taille de votre noyau en blocs (la taille donnée par ls -s NOYAU et ajoutez 50. Cinquante blocs sont en gros la taille nécessaire aux i-n½uds ainsi qu'aux autres fichiers. Vous pouvez calculer le nombre exact si vous voulez, ou simplement utiliser 50. Si vous créez un ensemble avec deux disques, vous pouvez carrément surestimer l'espace nécessaire puisque le disque n'est utilisé que par le noyau de toute manière. Appelez ce nombre BLOCS_NOYAU.
Mettez une disquette dans le lecteur (pour simplifier, supposons qu'il s'agit de /dev/fd0) et créez le système noyau ext2 dessus :
mke2fs -N 24 -m 0 /dev/fd0 BLOCS_NOYAU |
L'option -N 24 indique que l'on souhaite 24 i-n½uds, ce qui est largement suffisant pour ce système de fichiers. Ensuite, montez le système, supprimez le répertoire lost+found et créez des répertoire dev et boot pour LILO :
mount /dev/fd0 /mnt rm -rf /mnt/lost+found mkdir /mnt/{boot,dev} |
Ensuite, créez les périphériques /dev/null et /dev/fd0. Au lieu de chercher leurs numéros de périphériques, vous pouvez simplement les copier depuis votre disque dur avec l'option -R :
cp -R /dev/{null,fd0} /mnt/dev |
LILO a besoin d'une copie de son chargeur d'amorce, boot.b, que vous pouvez trouver sur votre disque dur. Il est d'habitude dans le répertoire /boot.
cp /boot/boot.b /mnt/boot |
Enfin, copiez le fichier de configuration de LILO que vous avez créé précédemment avec votre noyau. Les deux peuvent être placés dans le répertoire racine :
cp bdlilo.conf NOYAU /mnt |
Tout ce dont LILO a besoin est maintenant sur le système noyau, vous pouvez donc le lancer. Le paramètre -r de LILO est utilisé pour installer le chargeur sur une autre racine que la courante :
lilo -v -C bdlilo.conf -r /mnt |
LILO doit s'exécuter sans erreur, après quoi le système noyau devrait ressembler à :
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null |
Ne vous inquiétez pas si la taille des fichiers n'est pas exactement la même que la votre.
Laissez maintenant le disque dans le lecteur et allez à la Section 6.3.
Si vous n'utilisez pas LILO, transférez le noyau sur le disque d'amorce avec la commande dd :
% dd if=NOYAU of=/dev/fd0 bs=1k 353+1 records in 353+1 records out |
Dans ce exemple, dd a écrit 353 enregistrements complets, plus 1 partiel, ce qui signifie que le noyau occupe les 354 premiers blocs de la disquette. Appelez ce nombre BLOCS_NOYAU et pensez à l'utiliser dans la section suivante.
Enfin, indiquez que le périphérique racine doit être la disquette elle-même, et que le noyau doit être chargé en lecture/écriture.
rdev /dev/fd0 /dev/fd0 rdev -R /dev/fd0 0 |
Attention à bien utiliser un -R majuscule dans la seconde commande rdev.
Le mot disque mémoire situé dans l'image du noyau permet de spécifier où se trouve le système racine, ainsi que d'autres options. Le mot peut être lu et modifié avec la commande rdev, et sa valeur s'interprète de la manière suivante :
bits 0-10 : Décalage jusqu'au début du disque mémoire, en blocs de 1024 octets bits 11-13 : Inutilisé bit 14 : Drapeau indiquant s'il faut charger un disque mémoire bit 15 : Drapeau pour faire une pause avant de charger le système racine |
Si le bit 15 est mis à 1, le noyau vous demandera au moment du démarrage de changer la disquette dans le lecteur. C'est nécessaire si vous utilisez un ensemble de deux disques. Il y a deux cas, suivant que vous créez une disquette d'amorce/racine unique ou un ensemble « amorce+racine » séparé.
Si vous créez un disque unique, le système racine compressé sera placé juste après le noyau, et donc le décalage sera le premier bloc libre (qui doit être au même endroit que BLOCS_NOYAU). Le bit 14 sera mis à 1, et le bit 15 à 0.
Supposons par exemple que vous construisiez un disque unique dont le système racine doit commencer au bloc 253 (valeur décimale). Le mot disque mémoire devrait valoir 253 (toujours en décimal) avec le bit 14 à 1 et le bit 15 à 0. Pour calculer sa valeur vous pouvez simplement additionner les valeurs décimales. 253 + (2^14) = 253 + 16384 = 16637. Si vous ne comprenez pas d'où sort ce nombre, entrez-le dans une calculatrice scientifique et convertissez-le en binaire.
Si vous créez par contre un ensemble de deux disques, le système racine sera au bloc zéro du second disque, et le décalage sera donc zéro. Le bit 14 sera mis à 1 tout comme le bit 15. La valeur décimale sera donc de 2^14 + 2^15 = 49152 dans ce cas.
Après avoir bien calculé la valeur du mot disque mémoire, écrivez-le avec rdev -r. Attention à utiliser la valeur décimale. Si vous utilisez LILO, l'argument de rdev doit être le chemin d'accès au noyau monté, c'est à dire /mnt/vmlinuz ; si vous avez copié le noyau avec dd, utilisez à la place le nom du périphérique du lecteur de disquette (c'est à dire /dev/fd0).
rdev -r NOYAU_OU_LECTEUR_DE_DISQUETTE VALEUR |
Si vous avez utilisé LILO, démontez maintenant la disquette.
Ne croyez pas ce que dit la page de manuel de rdev/ramsize à propos de la taille du disque mémoire. Cette page est obsolète. À partir du noyau 2.0, le mot disque mémoire ne détermine plus la taille du disque mémoire ; au lieu de cela, ce mot est déterminé à partir du tableau donné au début de cette section. Pour une explication détaillée, voir le fichier de documentation ramdisk.txt ou http://www.tamacom.com/tour/linux/S/9075.html.
La dernière étape concerne le transfert du système racine.
Si le système racine doit être placé sur le même disque que le noyau, transférez-le avec dd et son option seek, qui indique combien de blocs il faut sauter :
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOCS_NOYAU |
Si le système racine doit être placé sur un second disque, sortez la première disquette, mettez la seconde dans le disque, puis transférez-y le système racine :
dd if=rootfs.gz of=/dev/fd0 bs=1k |
Bravo, vous avez fini ! Vous devriez toujours tester un disque d'amorce avant de le ranger jusqu'à la prochaine urgence ! S'il n'arrive pas à démarrer, continuez à lire.