Page suivante Page précédente Table des matières

4. Composants

4.1 Systèmes de fichiers

Le noyau Linux accepte maintenant deux systèmes de fichiers pour des disques racines copiés automatiquement dans des disques mémoire. ext2 a été ajouté quelque part entre les versions 1.1.17 et 1.1.57 (j'ignore quand exactement). Si vous avez un noyau correspondant, cherchez dans /usr/src/linux/drivers/block/ramdisk.c la chaîne "ext2". Si elle n'y est pas, alors il vous faudra utiliser un système de fichiers minix, et en conséquence, la commande mkfs.

Pour créer un système de fichiers sur disquette sur mon système, je lance la commande suivante :

        mke2fs /dev/fd0

La commande mke2fs détectera automatiquement l'espace disponible et ne requiert donc pas de paramètres supplémentaires. ((NdT: vérifiez à deux fois avant de lancer un mke2fs. mke2fs est pratiquement irréversible))

Une manière simple de tester le résultat est alors d'essayer de monter la disquette. Si c'est du ext2, alors :

        mount -t ext2 /dev/fd0 /<répertoire vide>
devrait marcher.

4.2 Noyau

Compiler un noyau

Dans la plupart des cas, il devrait être possible de copier votre noyau courant et d'amorcer la disquette à partir de celui-ci. Par contre il y a des cas où vous voudrez construire une disquette à part.

Une des raisons est la taille. Le noyau est l'un des fichiers les plus gros dans un système minimal, donc si vous voulez créer une disquette d'amorce/racine, vous devrez réduire la taille du noyau autant que possible. Le noyau accepte maintenant le changement de disquette après l'amorçage et avant de monter la racine, donc il n'est plus nécessaire de mettre le noyau et le reste sur la même disquette ; dans ce cas ces commentaires ne s'appliquent pas.

Il y a deux moyens de réduire la taille du noyau :

  • Le compiler avec le minimum d'options nécessaire, et laisser tomber tout le reste. Le réseau est un bon candidat à la suppression, ainsi que le support pour les périphériques dont vous n'avez pas besoin pour votre système amorce/racine.
  • Le compresser en utilisant l'option standard "noyau compressé" du makefile :
            make zImage
    
    Référez-vous à la documentation du source du noyau pour une description à jour sur la compilation de noyaux compressé. ((NdT: et aussi le Kernel-HOWTO)). Note : le source du noyau est habituellement dans /usr/src/linux.

Ayant déterminé l'ensemble minimum des options à inclure dans un noyau, il se peut que vous en ayez plusieurs à ajouter. L'utilisation la plus fréquente d'une disquette amorce/racine est probablement l'examen et la récupération d'un système de fichiers corrompu. Pour cela il se peut que vous ayez besoin de support du noyau.

Par exemple, si vos archives sont toutes mises sur bande en utilisant Ftape pour accéder à votre lecteur de bande, et si d'aventure vous perdiez votre disque racine, vous seriez dans l'impossibilité de récupérer vos archives. Vous auriez alors à réinstaller Linux et Ftape, puis tenter de lire et extraire vos précieuses archives.

Il est probablement souhaitable de garder une copie de la même version des utilitaires d'archivages utilisés pour écrire les archives pour ne pas perdre du temps et de l'énergie à installer des versions ne pouvant pas les lire.

Bonne idée : ajouter à votre noyau de disquette amorce/racine quelque support I/O que vous ayez ajouté à votre noyau pour l'archivage. Notez toutefois que le module Ftape (tout du moins la version que j'ai) est assez gros et ne tiendra pas sur une disquette amorce/racine. Vous pouvez le mettre sur une disquette utilitaires, comme décrit ci-dessous dans la section "Ajouter des disquettes utilitaires".

La procédure pour compiler le noyau est décrite dans la documentation qui vient avec le noyau. Elle est simple à suivre, donc commencez par regarder dans /usr/src/linux. Note : si vous avez des problèmes de compilation du noyau, vous ne devriez peut-être pas essayer de créer des disquettes de amorce/racine de toute façon.

4.3 Périphériques

Un répertoire /dev contenant tous les fichiers spéciaux pour tous les périphériques utilisés par le système est obligatoire pour tout système Linux. Le répertoire lui-même est un répertoire normal, et peut être créé par la commande mkdir. Les fichiers périphériques spéciaux doivent par contre être créés par la commande mknod.

Il y a un raccourci heureusement : plutôt que de faire un zillion de mknod, copiez le contenu du répertoire /dev et supprimez ce dont vous n'avez pas besoin. Le seul impératif est de copier les fichiers en utilisant l'option -R. Ceci copiera le répertoire sans tenter de copier le contenu des fichiers. Notez que si vous utilisez la minuscule -r, le résultat sera très différent puisque vous copiez le contenu de tous vos périphériques (disques, lecteurs de cd). Ou tout du moins la partie pouvant tenir sur une disquette. Donc attention et utilisez :

        cp -dpR /dev /mnt
en supposant que la disquette soit montée sur /mnt. Les options dp font que les liens symboliques sont copiés comme des liens, plutôt que, assez peu judicieusement, leur contenu ; et que les attributs du fichier sont préservés, en particulier les droits d'accès, et les groupes et propriétaires.

Si vous voulez créer les fichiers de périphérique sur la disquette à la force du poignet, faites un ls -l pour afficher les numéros de périphérique mineurs et majeurs et créez-les sur disquette avec mknod. Beaucoup de distributions incluent un script MAKEDEV dans le répertoire /dev. Il peut être utilisé pour créer les fichiers périphériques mais il est probablement plus facile de copier le /dev, particulièrement dans le cas de disques de secours.

4.4 Répertoires

Il se peut qu'avec simplement /dev, /proc et /etc vous puissiez amorcer un système Linux - je ne sais pas, je n'ai pas essayé. Par contre un ensemble minimum raisonnable de répertoires consiste en :

/dev

Requis pour les entrées/sorties avec les périphériques

/proc

Utilisé par la commande ps

/etc

Répertoire des fichiers de configuration système

/bin

Utilitaires exécutables faisant partie du système

/lib

Bibliothèques partagées

/mnt

Répertoire sur lequel monter les partitions à maintenir

/usr

Applications et utilitaires supplémentaires

Notez que l'arborescence présentée ici est valable uniquement pour la disquette racine. Voyez le Linux File System Standard pour des informations plus précises sur la façon de structurer un système Linux "standard".

Quatre de ces répertoires se créent très simplement :

  • /dev comme décrit ci-dessus dans la section "Périphériques".
  • /proc doit juste exister, donc il suffit de le créer avec mkdir.
  • Deux autres, /mnt et /usr sont (aussi) des répertoires où des partitions sont montées, utilisés plus tard quand le système amorce/racine tournera. Donc, il faut aussi juste les créer.

Les trois répertoires restants sont décrits dans les sections qui suivent.

/etc

Ce répertoire doit contenir un certain nombre de fichiers de configuration. Sur la plupart des systèmes, ceux-ci peuvent être divisés en trois groupes :

  • Ceux qui sont absolument requis, comme rc, fstab, passwd.
  • Ceux qui sont peut-être nécessaires, mais personne n'en est sûr.
  • Ceux qui n'ont aucune utilité.

Les fichiers secondaires peuvent être identifiés avec la commande :

        ls -trul
qui donne les fichiers dans l'ordre inverse de date de dernier accès. Les fichiers non utilisés ne sont évidemment pas nécessaires pour une disquette racine.

Sur mes disquettes racines, j'ai réduit le nombre de fichiers à 15. Ceci réduit le travail à trois ensembles de fichiers :

  • Ceux que je dois configurer pour un système amorce/racine :
            rc      le script de démarrage système
            fstab   liste des partitions à monter
            inittab paramètres pour le processus init, le 
                    premier processus lancé lors du démarrage.
    
  • ceux que je réduis pour un système amorce/racine :
            passwd  liste des utilisateurs
            shadow  contient les mots de passes 
            ((NdT: dans un système avec les shadow-passwords))
    
    Ceux-ci devraient être raccourcis sur les systèmes sécurisés pour éviter de de copier les mots de passe des utilisateurs hors du système, et de telle manière que lorsque vous amorcez depuis la disquette, les "login" non désirés soient rejetés avec toute la vigueur nécessaire.
  • Les autres. Ils marchent pour l'instant, donc je les laisse.

A part ceux-ci, je n'ai eu réellement qu'à adapter deux fichiers, et ce qu'ils doivent contenir est étonnement court.

  • rc devrait contenir :
            #!/bin/sh       
            /etc/mount -av
            /bin/hostname amorce_racine
    
    et vous n'avez pas besoin en réalité d'utiliser hostname. Même mount n'est nécessaire que pour monter /proc pour ps ; Linux tournerait sans. ((NdT: vous voudrez probablement ajouter quelque chose comme /bin/loadkeys /etc/fr-latin1.fr pour avoir un clavier français. La présence de mount dans /etc comme celle de loadkeys dans /bin et celle de fr-latin1.map dans /etc n'est pas très conforme au "Linux FileSystem Standard". Sur votre partition disque, ce serait mal)).
  • fstab devrait contenir :
            /dev/fd0        /               ext2    defaults
            /proc           /proc           proc    defaults
    
    Je ne crois pas que la première ligne soit nécessaire non plus, mais il se trouve que si je l'enlève, mount ne montera pas /proc.

Inittab devrait être correct tel quel, à moins que vous ne vouliez vous assurer que des utilisateurs ne puissent se loger via le port série. Pour empêcher cela, mettez en commentaire les lignes de /etc/getty qui ont des ttys ou des ttyS à la fin de la ligne. Quoiqu'il en soit, il n'est pas totalement inutile de laisser les/des tty ((tout court)) de façon à ce que vous puissez quand même vous loger vous.

Pour le reste, copier simplement tous les fichiers texte dans le répertoire /etc ainsi que tous les exécutables dont vous n'êtes pas sûr qu'ils ne soient pas utiles. Comme modèle, voir l'exemple dans la section "Exemple de liste (ls-lR) d'une disquette amorce/racine".

/bin

C'est un endroit pratique pour mettre les utilitaires supplémentaires dont vous avez besoin pour effectuer les opérations de base ; des utilitaires comme ls, mv, cat, dd, etc...

Voir la section intitulée "Exemple de liste (ls-lR) d'une disquette amorce/racine" pour la liste des fichiers que j'ai mis dans mon répertoire /bin. Vous remarquerez peut-être que je n'ai mis aucun des utilitaires requis pour récupérer depuis une archive, comme cpio, tar, gzip, etc... En effet, je les mets sur une disquette utilitaires pour économiser l'espace de la disquette amorce/racine. Une fois que j'ai démarré avec celle-ci, elle est copiée dans le disque mémoire laissant le lecteur de disquette libre pour monter une autre disquette (la disquette utilitaires donc). Je la monte habituellement dans /usr.

La création d'une disquette utilitaire est décrite ci-dessous dans la section intitulée "Ajouter des disquettes utilitaires".

/lib

Deux bibliothèques doivent être présentes pour lancer de nombreux programmes sous Linux :

  • ld.so
  • libc.so.4

Si elles ne sont pas trouvées dans votre répertoire /lib, alors le système est dans l'impossibilité de démarrer. Si vous avez de la chance peut-être verrez-vous un message vous expliquant pourquoi.

Elles doivent être présentes dans un répertoire existant, /lib. Remarquez que libc.so.4 peut être un lien symbolique vers une bibliothèque avec un numéro de version inclus dans le nom du fichier. Si vous faites :

        ls -l /lib
vous verrez quelque chose comme :
        libc.so.4 -> libc.so.4.5.21

Dans ce cas, la bibliothèque libc dont vous avez besoin est libc.so.4.5.21. (( NDT : naturellement il se peut même que ce soit un fichier différent de libc.so.4 comme libc.so.5 ))

4.5 LILO

Aperçu

Pour que l'amorce/racine soit utile, il faut qu'elle soit amorçable. Pour cela, la manière la plus simple (la seule ?) est d'installer un lanceur, qui est un morceau de programme contenu dans la disquette secteur 0, cylindre 0. Voir la section "Disquette d'amorce" pour un aperçu du déroulement du démarrage.

LILO est un lanceur disponible dans n'importe quel site ftp Linux. Il vous permet de déterminer entre autres :

  • Le périphérique à utiliser pour la racine.
  • S'il faut utiliser un disque virtuel en mémoire.

Exemple de fichier configuration LILO

C'est un endroit pratique pour fixer certaines options de démarrage du noyau. Mon fichier de configuration LILO racine/amorce, utilisé avec LILO 0.15 est :


boot = /dev/fd0
install = ./mnt/boot.b
map = ./mnt/lilo.map
delay = 50
message = ./mnt/lilo.msg
timeout = 150
compact
image = ./mnt/vmlinux 
        ramdisk = 1440
        root = /dev/fd0

Remarquez que boot.b, lilo.msg et le noyau doivent d'abord avoir été copiés sur la disquette en utilisant une commande comme :


cp /boot/boot.b ./mnt

Si ça n'est pas fait, et si le disque dur n'est pas disponible, LILO ne fonctionnera pas correctement à l'amorçage. Mauvaise idée : créer une disquette de secours qui a besoin du disque dur pour se lancer.

Je lance lilo avec la commande :

        /sbin/lilo -C <fichier configuration>

Je le lance dans répertoire qui contient le répertoire mnt sur lequel j'ai monté la disquette ((NdT: i.e. /). Ceci signifie que j'indique à LILO d'installer un lanceur sur le périphérique d'amorçage (/dev/fd0 dans ce cas), pour lancer un noyau dans le répertoire racine de la disquette.

J'ai aussi spécifié que je voulais le périphérique racine comme étant la disquette et qu'un disque mémoire serait créé avec 1440 1K blocs, la taille d'une disquette. Comme j'avais créé un système de fichiers ext2 sur la disquette, ceci complète les conditions requises pour que Linux puisse copier au démarrage le périphérique d'amorce dans un disque mémoire.

Les caractéristiques du disque virtuel en mémoire sont décrites dans la section intitulée "Disque virtuel en mémoire et disquettes racines" plus haut.

Ajoutons aussi que le paramètre "single" fait que Linux ne démarrera qu'en mode simple utilisateur. Ceci peut être utile pour empêcher les utilisateurs de se connecter à partir des ports série. ((NdT: voir telinit et /etc/inittab pour en savoir plus sur le mode simple utilisateur)).

J'utilise aussi des commandes DELAY, MESSAGE et TIMEOUT, de telle sorte que lorsque je lance le disque, LILO me donne la possibilité d'entrer des options en ligne de commande si je le désire. Je n'en n'ai pas besoin pour l'instant, mais qui sait de quoi demain sera fait ? Je peux avoir besoin de monter une autre partition ou de monter un système de fichiers en lecture seule.

Le fichier message que j'utilise contient :

Linux - Disquette d'amorce/racine
=================================
 
Entrer une ligne de commande de la forme :

      vmlinux [ options ]

Si rien n'est entré, Linux sera chargé avec les 
paramètres par défaut après 15 secondes.

Cela permet simplement de me rappeler des options que j'ai choisies.

Les lecteurs sont invités à consulter la documentation de LILO, avec attention, avant d'installer quoi que ce soit. Il est assez facile de détruire des partitions si vous utilisez le mauvais paramètre boot =. Si vous manquez d'expérience, NE lancez PAS LILO à moins que vous compreniez tout, et que vous ayez vérifié trois fois vos paramètres.

Enlever LILO

Puisque nous parlons de LILO, voici une chose à ajouter : si vous avez un problème avec LILO sur un disque contenant DOS, vous pouvez toujours remplacer le secteur d'amorçage par le lanceur DOS en utilisant la commande DOS :

        FDISK /MBR

où MBR signifie "Master Boot Record". Remarquez que certains puristes sont en désaccord avec cette interprétation et peut-être à raison, mais en tout cas, ça marche.

Options de LILO utiles

LILO a plusieurs options utiles à garder en tête lors de la création de disquettes d'amorce.

  • Option en ligne de commande - vous pouvez entrer des options en ligne de commande pour définir le périphérique racine, la taille du disque mémoire, des paramètres pour les périphériques, ou d'autres choses encore. Si vous mettez une commande DELAY = nn dans votre fichier de configuration LILO, alors ce dernier s'arrêtera pour vous permettre de choisir le noyau à charger, ainsi que sur la même ligne toute option. Par exemple :
            vmlinux aha152x=0x340,11,3,1 ro
    
    passera les paramètres aha152x suivants au pilote du disque aha152x SCSI (sous réserve que ce pilote ait été inclus dans le noyau lors de sa compilation), et demandera à ce que la racine soit montée en lecture seule (ro).
  • L'option "lock" en ligne de commande. Cette option demande à LILO de conserver la ligne de commande entrée comme la ligne de commande par défaut à utiliser pour tous les prochains amorçages. C'est particulièrement utile lorsque vous avez un périphérique qui ne peut pas être sélectionné automatiquement. En utilisant lock, vous pouvez éviter d'avoir à entrer les paramètres du périphérique à chaque démarrage. Par exemple :
            vmlinux aha152x=0x340,11,3,1 root=/dev/sda8 ro lock
    
  • Commande de configuration APPEND. Elle vous permet de donner une liste de paramètres de périphériques. C'est une alternative à lock. Remarque : toutes les parties de la forme <nom>=<valeur> DOIVENT être mises entre guillemets. Par exemple :
            APPEND = "aha152x=0x340,11,3,1"
    
  • Commande de configuration DELAY. Elle oblige LILO à faire une pause d'un certain nombre de dixièmes de seconde, et permet à l'utilisateur d'interrompre l'amorçage automatique de la ligne de commande par défaut pour en entrer une autre.


Page suivante Page précédente Table des matières