6. Assemblage et fabrication de la ou des disquettes

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.

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é.

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.