Page suivante Page précédente Table des matières
4. Composants
4.1 Systèmes de fichiers
Le noyau Linux supporte maintenant deux types de systèmes de fichiers pour les disques racines à copier automatiquement sur disque mémoire. Ce sont minix et ext2, ext2 étant le système de fichier préféré. Ce support ext2 a été rajouté quelque part entre les versions 1.1.17 et 1.1.57, je ne sais pas exactement quand. Si vous avez un noyau parmi ces versions, éditez
/usr/src/linux/drivers/block/ramdisk.cet cherchez le mot ``ext2''. Si vous ne le trouvez pas, vous aurez à utiliser un système de fichiers minix, créé au moyen de la commandemkfs. Si vous utilisez ext2, vous pourrez trouver pratique d'utiliser l'option-ipour allouer plus d'i-noeuds que par défaut ; on recommande-i 2000pour ne pas manquer d'i-noeuds. Sinon, vous pouvez économiser des i-noeuds en supprimant les nombreux fichiers inutiles de/dev.Mke2fscréera par défaut 360 i-noeuds sur une disquette 1.44 Mo. Pour ma part, 120 i-noeuds sont suffisants sur mon actuelle disquette de secours racine, mais si vous incluez tous les périphériques dans le répertoire/dev, vous dépasserez allègrement 360. Utiliser un système de fichiers compressé pour la racine permet un système plus grand, et donc plus d'i-noeuds par défaut, mais vous pourriez cependant devoir réduire le nombre de fichiers ou bien augmenter le nombre d'i-noeuds.Pour créer un système de fichiers ext2 sur une disquette, sur ma machine, je lance la commande suivante :
mke2fs -m 0 /dev/fd0La commande
mke2fsva automatiquement détecter l'espace disponible et se configurer en fonction. Eventuellement, la taille de la disquette en blocs de 1Ko peut être spécifiée pour accélérer l'opération demke2fs. Le paramètre-m 0évite àmke2fsde réserver de la place pour root, ce qui laisse plus de place disponible sur le disque.Une manière simple de tester le résultat est de créer un système en utilisant la commande ci-dessus ou une commande approchant, et d'essayer ensuite de monter la disquette. S'il s'agit d'un système ext2, alors la commande :
devrait fonctionner.mount -t ext2 /dev/fd0 /<point d'entrée>
4.2 Noyau
Construire un noyau personnalisé
Dans la plupart des cas, il serait possible de copier votre noyau actuel et d'amorcer la disquette avec ça. Cependant, il peut y avoir des cas où vous souhaitez construire un noyau différent.
Une raison peut être la taille. Le noyau est un des plus gros fichiers, sur un système de taille minimale, et si vous souhaitez créer une disquette amorce/racine, vous aurez à réduire la taille du noyau autant que possible. Le noyau supporte désormais le changement de disquette après amorçage et avant de monter la racine, et comme il n'est donc plus nécessaire d'entasser le noyau sur le même disque que tout le reste, ces commentaires ne s'appliquent que si vous décidez de construire une disquette amorce/racine.
Il y a deux manières de réduire la taille du noyau :
- Le construire avec le minimum d'options nécessaires pour faire fonctionner le système désiré. Cela impose de ne conserver que ce dont vous avez besoin. Le support réseau est un candidat à l'élimination, tout comme le support pour tous disques et autres périphériques que vous n'utilisez pas avec votre système amorce/racine.
- Le compresser, en utilisant l'option standard de compression du noyau incluse dans le makefile :
Reportez vous à la documentation incluse avec les sources du noyau pour une information à jour sur la construction de noyaux compressés. Notez que les sources du noyau sont généralement dansmake zImage/usr/src/linux.Une fois choisi le minimum d'options à inclure dans un noyau, vous devez choisir quoi remettre dedans. L'utilisation la plus commune d'une disquette amorce/racine est probablement d'examiner et restaurer un système de fichiers racine corrompu, et cela nécessite éventuellement du support dans le noyau.
Par exemple, si vos sauvegardes sont stockées sur bandes en utilisant
Ftapepour accéder au lecteur et que vous perdez votre disque racine ainsi que les disques contenantFtape, vous ne pourrez alors pas restaurer votre système à partir des bandes de sauvegarde. Vous devrez réinstaller Linux, récupérer et réinstallerFtape, et seulement alors essayer de relire vos sauvegardes.Il est souhaitable de maintenir une copie des mêmes versions des utilitaires servant à écrire les sauvegardes, afin de ne pas perdre de temps à essayer d'installer des versions ne pouvant pas lire vos bandes de sauvegarde.
Ce qu'il faut comprendre, c'est que tout support d'entrées/sorties que vous avez ajouté à votre noyau pour réaliser des sauvegardes doit aussi être ajouté à votre noyau d'amorce/racine.
La procédure pour reconstruire le noyau est decrite dans la documentation accompagnant le noyau. C'est assez simple à suivre, donc commencez par regarder dans
/usr/src/linux. Si vous avez des problèmes pour construire un noyau, vous ne devriez probablement pas essayer de construire des disques amorce/racine de toute manière.
4.3 Périphériques
Tout système Linux nécessite un répertoire
/devcontenant un fichier spécial pour tous les périphériques utilisées par le système. Le répertoire lui-même est un répertoire normal, et peut être créé avec la commandemkdirde la manière habituelle. Les fichiers spéciaux de périphériques doivent par contre être créés d'une certaine manière, avec la commandemknod.Il y a un raccourci cela dit - copiez votre répertoire
/devexistant, et supprimez ceux dont vous n'avez pas besoin. La seule chose à faire est de copier les fichiers spéciaux de périphériques en utilisant l'option-R.
Attention : la commandecpfournie avec la plus récente version des fileutils (3.13) semble ne pas respecter l'option-R.Cela copie le répertoire sans essayer de copier le contenu des fichiers. Si vous utilisez un
rminuscule, à savoir ``-r'', le comportement sera très différent, puisque vous essaierez de copier tout le contenu de tous vos disques - ou tout au moins ce qui tiendra sur une disquette ! Faites donc attention, et utilisez la commande :en supposant que la disquette est montée surcp -dpR /dev /mnt/mnt. Les optionsdpconservent les liens symboliques en tant que tels lors de la copie (au lieu de copier le fichier pointé) ainsi que les attributs des fichiers originaux, préservant donc les informations de propriété.Vous pouvez aussi utiliser l'option
-pdecpio, carcpiotraitera les fichiers spéciaux de périphériques correctement et n'essaiera pas d'en copier le contenu. Par exemple :copiera tous les fichiers spéciaux decd /dev find . -print | cpio -pmd /mnt/dev/devsur/mnt/dev. En fait, cela copiera tous les fichiers dans l'arborescence de répertoires commençant à/dev, et créera tous les sous-répertoires nécessaires dans l'arborescence cible.Si vous cherchez la complexité, utilisez
ls -lpour connaître les numéros de périphériques majeurs et mineurs de ceux que vous voulez, et créez les sur la disquette en utilisantmknod.De nombreuses distributions incluent un script shell appelé
MAKEDEVdans le répertoire/dev. Ce script shell pourrait être utilisé les périphériques, mais il est sans doute plus facile de copier ceux existant, surtout pour un disque de secours.Quelle que soit la manière dont le répertoire de périphériques est copié, cela vaut la peine de vérifier que tous les fichiers spéciaux dont vous avez besoin sont présents sur la disquette de secours. Par exemple,
Ftapeutilise des périphériques de bande, et vous devrez donc copier tous ceux-là.Notez qu'un i-noeud est requis pour chaque fichier spécial et que les i-noeuds peuvent parfois être rares, surtout pour des systèmes de fichiers sur disquette. Il est donc utile de supprimer tous les fichiers spéciaux dont vous n'avez pas besoin dans le répertoire
/devde la disquette. De nombreux périphériques sont clairement inutiles sur des systèmes spécifiques. Par exemple, si vous n'avez pas de disques SCSI, vous pouvez supprimer sans problèmes tous les fichiers de périphériques commençant par ``sd''. De même, si vous n'avez pas l'intention d'utiliser le port série, tous les fichiers commençant par ``cua'' peuvent disparaître.
4.4 Répertoires
Il est peut-être possible de faire fonctionner un système Linux uniquement avec
/dev,/procet/etc. Je ne sais pas - je n'ai jamais essayé. Toutefois, cela risque de s'avérer difficile, car sans bibliothèques partagées tous vos exécutables devraient être compilés statiquement. Il est raisonnable d'avoir au minimum les répertoires :
- /dev
Nécessaire pour les entrées/sorties avec les périphériques
- /proc
Nécessaire pour la commande ps
- /etc
Fichiers de configuration du système
- /bin
Exécutables des utilitaires considérés comme faisant partie du système
- /lib
Bibliothèques partagées nécessaires au fonctionnement
- /mnt
Un point de montage pour effectuer des opérations de maintenance sur d'autres disques
- /usr
Utilitaires et applications supplémentaires
L'arborescence présentée ici n'est à utiliser que sur une disquette racine. Consultez le Standard de Système de Fichiers Linux (Linux File System Standart) pour de plus amples informations sur la structure des systèmes de fichiers sur des systèmes Linux ``standards''.
Quatre de ces répertoires peuvent être créés facilement :
/devest décrit ci-dessus dans la section intitulée Périphériques./procdoit juste être présent. Il n'y a juste qu'à créer le répertoire avecmkdir./mntet/usrsont uniquement inclus dans cette liste comme points de montage à utiliser une fois que le système amorce/racine fonctionne. Ici aussi, ces répertoires n'ont qu'à être créés.Les 3 répertoires restants sont décrits dans les sections suivantes.
/etc
Ce répertoire doit contenir un certain nombre de fichiers de configuration. Sur la plupart des systèmes, on peut les répartir en 3 groupes :
- Nécessaire en permanence, par exemple
rc,fstab,passwd.- Eventuellement nécessaire, mais personne n'est sûr.
- Le bazar qui s'est accumulé
Les fichiers non essentiels peuvent être identifiés avec la commande :
On obtient la liste des fichiers dans l'ordre inverse de leur date de dernier lecture, et si des fichiers ne sont jamais lus, ils peuvent être omis de la disquette racine.ls -ltruSur mes disquettes racine, je n'ai conservé que 15 fichiers de configuration. Mon travail se trouve réduit à trois groupes de fichiers :
- Ceux que je dois configurer pour un système amorce/racine :
rc.d/* scripts de démarrage et de changement de niveau de fonctionnement (run level) fstab liste de systèmes de fichiers à monter inittab paramètres pour le processus init - le premier processus lancé au démarrage.- Ceux que je dois nettoyer pour un système amorce/racine :
Ces fichiers doivent être nettoyés sur des systèmes sécurisés afin de ne pas copier les mots de passe des utilisateurs ailleurs que sur le système, et pour que lorsque vous démarrez depuis une disquette, les logins invalides soient rejetés.passwd liste des utilisateurs shadow qui contient les mots de passeNotez qu'il y a une raison pour ne pas nettoyerpasswdetshadow.Tar(et probablement d'autres programmes d'archives) stocke les noms d'utilisateurs et de groupes avec les fichiers. Si vous restaurez des fichiers sur votre disque dur depuis une bande, les fichiers seront restaurés avec leurs noms originaux, Si ces noms n'existent pas danspasswd/groupquand ils sont restaurés, les IUD/GID ne seront pas corrects.- Le reste. Ils fonctionnent pour l'instant, je n'y touche donc pas.
Parmi tout ça, je n'ai réellement que deux fichiers à configurer, et leur contenu est étonnamment petit.
rcdoit contenir :où je n'ai pas vraiment besoin de lancer#!/bin/sh /etc/mount -av /bin/hostname boot_roothostname- ça a juste meilleure allure si je le fais. Mêmemountest uniquement nécessaire pour monter/procpour quepsfonctionne - Linux fonctionne sans ça, bien que les opérations de secours soient assez limitées sansmount!fstabdoit contenir :Je ne crois pas que la première ligne soit vraiment nécessaire, mais j'ai remarqué que si je ne la mets pas,/dev/ram / ext2 defaults /dev/fd0 / ext2 defaults /proc /proc proc defaultsmountne monte pas/proc.
Inittabdevrait convenir tel quel, sauf si vous voulez vous assurer que les utilisateurs par port série ne peuvent pas se connecter. Pour éviter cela, commentez toutes les lignes avec/etc/gettycontenant un périphériquettyouttySau bout de la ligne. Laissez les portsttypour pouvoir vous connecter sur la console.
Inittabdéfinit ce que le système lance ou relance à différents moments, comme le démarrage, le passage en mode multi-utilisateurs, les pertes d'alimentation, etc. Il faut faire s'assurer que les commandes présentes dansinittabcorrespondent à des programmes présents, ainsi qu'au bon répertoire. Si vous placez vos fichiers de commandes sur le disque de secours en utilisant l'exemple de contenu de répertoires fourni dans ce HOWTO comme guide, puis copiez votreinittabsur le disque de secours sans le vérifier, il y a de fortes chances que cela ne fonctionne pas, car la moitié des lignes de l'inittabferont référence à des programmes inexistants ou placés dans le mauvais répertoire.Il faut aussi noter que certains programmes ne peuvent être déplacés d'un répertoire vers un autre sans mal fonctionner au démarrage car ils référencent directement dans leur code le nom d'un autre programme qu'ils essayent de lancer. Par exemple sur mon système,
/etc/shutdowncontient directement le chemin/etc/reboot. Si je déplacerebootvers/bin/rebootpuis que je lance une commandeshutdown, elle ne va pas marcher puisqu'elle ne pourra pas trouver le fichierreboot.Pour le reste, copiez simplement tous les fichiers texte dans votre répertoire
/etc, ainsi que tous les exécutables dans votre répertoire/etcdont vous n'êtes pas sûr de pouvoir vous débarrasser. Pour vous guider, consultez la sortie exemple delsdans ``Contenu des répertoires du disque racine (ls -lR)'' - c'est ce que j'ai, et ça devrait donc vous suffire si vous copiez ces fichiers - mais notez que les systèmes peuvent être très différents, et on ne peut donc pas être certain qu'un ensemble de fichiers sur votre système est équivalent au même sur le mien. La seule méthode sure est de démarrer avec inittab et déterminer ce qui est nécessaire.La plupart des systèmes utilisent maintenant un répertoire
/etc/rc.dcontenant des scripts shell pour les différents niveaux de fonctionnement (run levels). Le minimum absolu est un fichierrcunique, mais il sera sans doute beaucoup plus simple en pratique de copier le fichierinittabet le répertoire/etc/rc.dde votre système, et nettoyer les scripts shell dansrc.dpour supprimer tous les traitements inutiles à un environnement système sur disquette.
/bin
C'est le bon endroit pour placer les autres utilitaires dont vous avez besoin pour les opérations de base, tels que
ls,mv,cat,dd, etc.Voir la section intitulée ``Exemple de
ls -lRpour amorce/racine'' pour une liste des fichiers que je place dans le répertoire/binde ma disquette amorce/racine. Vous pourrez remarquer qu'aucun des utilitaires nécessaires à la restauration d'une sauvegarde, tels quecpio,tar,gzip, etc, ne s'y trouvent. C'est parce que je les place sur une disquette utilitaire séparée, pour garder de la place sur la disquette amorce/racine. Après avoir démarré sur ma disquette amorce/racine, son contenu est copié dans le disque mémoire, laissant le lecteur de disquette libre pour monter une autre disquette, la disquette utilitaire. Je la monte en général sur/usr.La création d'une disquette utilitaire est décrite ci-dessous dans la section intitulée ``Ajouter des disquettes utilitaires''.
/lib
Dans
/libvous placez certaines bibliothèques partagées ainsi que les chargeurs. Si les bibliothèques nécessaires ne sont pas trouvées dans votre répertoire/lib, le système ne pourra pas démarrer. Si vous avez de la chance, vous verrez un message d'erreur vous expliquant pourquoi.Pratiquement tous les programmes nécessitent au moins la bibliothèque
libc:où X représente le numéro de version courante. Vérifiez dans votre répertoirelibc.so.X/lib. Notez quelibc.so.4peut être un lien symbolique vers une bibliothèquelibcavec un numéro de version dans le nom. Si vous lancez la commande :vous obtiendrez quelque chose du genre :ls -l /liblibc.so.4 -> libc.so.4.5.21Dans ce cas, la bibliothèque
libcdont vous avez besoin estlibc.so.4.5.21. Ce n'est qu'un exemple - la bibliothèquelibcELF est actuellementlibc.so.5.xxxx.Pour trouver d'autres bibliothèques, vous devrez tester les dépendances de tous les binaires que vous souhaitez utiliser. La commande
lddsert à ça. Par exemple, sur mon système la commande :renvoie comme résultat :ldd /bin/mountindiquant que/bin/mount: libc.so.5 => /lib/libc.so.5.2.18/bin/mounta besoin de la bibliothèquelibc.so.5, qui est un lien symbolique surlibc.so.5.2.18.Vous devez aussi placer dans
/libun ou plusieurs chargeurs pour charger les bibliothèques. Le fichier du chargeur est soitld.so(pour les bibliothèques au format a.out), soitld-linux.so(pour les bibliothèques ELF). Si vous n'êtes pas sûr duquel vous avez besoin, lancez la commande ``file'' sur la bibliothèque. Par exemple, sur mon système :me répond :file /lib/libc.so.5.2.18et par conséquent elle a besoin d'un chargeur ELF. Si vous avez une bibliothèque a.out, vous obtiendrez un résultat du genre :/lib/libc.so.5.2.18: ELF 32-bit LSB shared object .../lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC) ...Copiez le(s) chargeur(s) spécifique(s) dont vous avez besoin.
Il faut vérifier que les bibliothèques et chargeurs correspondent bien aux binaires utilisés. Si le noyau ne peut pas charger une bibliothèque indispensable, il plantera en général sans message d'erreur.
4.5 LILO
Aperçu
Pour que l'amorce/racine soit utilisable, elle doit être amorçable. Pour ce faire, le plus simple est d'installer un chargeur, qui est un morceau de code executable stocké sur le secteur 0 du cylindre 0 de la disquette. Voir la section ci-dessus intitulée ``Disquettes de boot'' pour une description du processus.
LILO est un chargeur longuement testé et éprouvé disponible sur tout site miroir Linux. Il vous permet de configurer le chargeur, en particulier :
- Quel périphérique doit être utilisé comme disque racine
- S'il faut utiliser un disque mémoire
Exemple de configuration de LILO
Cela permet de spécifier au noyau comment il doit démarrer. Mon fichier de configuration de LILO pour l'amorce/racine, 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/zImage ramdisk = 1440 root = /dev/fd0
Notez que je ne l'ai pas testé récemment, car je n'utilise plus de disquettes amorce/racine utilisant LILO. Il n'y a aucune raison de supposer que cela ne fonctionne plus, mais si vous essayez et que cela ne marche pas, vous devez lire la documentation de LILO pour savoir pourquoi.
Notez aussi que les systèmes amorce/racine n'ont plus besoin de LILO, car depuis la version 1.3.48, le noyau supporte le chargement d'un système de fichiers compressé depuis la même disquette que le noyau. Voire la section Création de disquette de démarrage élaborée pour les détails.
Si vous avez un noyau postérieur à la version 1.3.48, la ligne ``
ramdisk = 1440'' est inutile et doit être retirée.Notez que
boot.b,lilo.msget le noyau doivent préalablement avoir été copiés sur la disquette en utilisant une commande du genre :
cp /boot/boot.b ./mnt
Si cela n'est pas fait, LILO ne fonctionnera pas correctement au démarrage si le disque dur n'est pas disponible, et un disque de secours qui nécessite la présence du disque dur pour démarrer est d'une utilité douteuse.
Je lance
liloavec la commande :/sbin/lilo -C <fichier de configuration>Je le lance depuis le répertoire contenant le répertoire
mntoù la disquette est montée. Cela signifie que je demande à LILO d'installer un chargeur sur le périphérique de démarrage (/dev/fd0dans ce cas), pour démarrer un noyau situé dans le répertoire racine de la disquette.J'ai aussi spécifié que je veux utiliser la disquette comme périphérique racine, et que je veux qu'un disque mémoire de 1440 blocs de 1 Ko soit créé, à savoir la taille de la disquette. Puisque j'ai créé un système de fichiers ext2 sur la disquette, toutes les conditions sont remplies pour que Linux utilise automatiquement le disque mémoire comme périphérique racine, et y copie le contenu de la disquette.
Les possibilités de Linux concernant les disques mémoires sont décrites de manière plus poussées dans la section ci-dessus intitulée ``Disques mémoires et systèmes amorce/racine''.
On peut aussi envisager d'utiliser le paramètre ``
single'' pour démarrer Linux en mode mono-utilisateur. Cela permet d'empêcher les utilisateurs de se connecter par les ports série.J'utilise aussi les instructions ``
DELAY'', ``MESSAGE'' et ``TIMEOUT'' pour que lorsque je démarre le disque, LILO me laisse la possibilité d'entrer des options en ligne de commande si je le souhaite. Je n'en ai pas besoin actuellement, mais on ne sait jamais si l'on ne souhaitera pas changer de périphérique racine ou monter un système de fichiers en lecture seule.Le fichier de messages que j'utilise contient le message :
Disquette amorce/racine Linux ============================= Entrez une ligne de commandes de la forme : zImage [ options en ligne ] Si rien n'est entré, Linux sera chargé avec les paramètres par défaut dans 15 secondes.Il ne s'agit que d'un aide-mémoire pour me rappeler mes options.
Les lecteurs sont invités à lire la documentation de LILO de manière attentive avant d'essayer 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 avant d'être sûr que vous le comprenez et d'avoir vérifié de nombreuses fois vos paramètres.Notez que vous devez relancer LILO à chaque fois que vous changez le noyau, pour que LILO puisse mettre à jour sa cartographie en fonction du nouveau noyau. Il est en fait possible de remplacer le noyau par un autre quasiment identique sans relancer LILO, mais mieux vaut ne pas parier la dessus - si vous changez de noyau, relancez LILO.
Retirer LILO
Je peux aussi ajouter ceci tant que j'en suis à parler de LILO : si vous installez par erreur LILO sur un disque contenant DOS, vous pouvez toujours remplacer le secteur d'amorce par le chargeur du DOS en tapant la commande DOS :
FDISK /MBRoù MBR signifie ``Master Boot Record''. Notez que quelques puristes ne sont pas d'accord, éventuellement avec raison, mais cela marche.
Options utiles de LILO
LILO a plusieurs options utiles qu'il est bon de se rappeler lorsque l'on crée des disques de démarrage :
- Options en ligne de commande - vous pouvez entrer des options en ligne de commande pour changer le périphérique racine, la taille du disque mémoire (pour les noyaux antérieurs à 1.3.48), des paramètres spéciaux pour certains périphériques, ou d'autres choses encore. Si vous incluez l'instruction ``
DELAY = nn'' dans votre fichier de configuration LILO, LILO fera alors une pause pour vous permettre de sélectionner une image noyau à amorcer, et d'entrer sur la même ligne, des options. Par exemple :passera les paramètres aha152x jusqu'au gestionnaire de disque SCSIzImage aha152x=0x340,11,3,1 roaha152x(à condition que ce gestionnaire ait été inclus à la construction du noyau) et demandera à ce que le système de fichiers racine soit monté en lecture seule.- Option en ligne de commande ``
lock'' - cette option demande à LILO de stocker la ligne de commande entrée comme ligne de commande par défaut pour tous les démarrages futurs. C'est particulièrement utile lorsque vous utilisez un périphérique qui ne peut pas être auto-sélectionné. En utilisant ``lock'' vous évitez d'avoir à taper la chaîne de paramètre du gestionnaire à chaque démarrage. Par exemple :zImage aha152x=0x340,11,3,1 root=/dev/sda8 ro lock- instruction de configuration
APPEND- cela permet de stocker des chaînes de paramètres pour gestionnaires dans la configuration, comme alternative à l'utilisation de l'option ``lock''. Notez que tous les mots clés de la forme mot=valeur DOIVENT être entourés par des guillemets. Par exemple :APPEND = "aha152x=0x340,11,3,1"- instruction de configuration
DELAY- cela provoque une pause deDELAYdixièmes de secondes et permet à l'utilisateur d'interrompre le démarrage automatique de la ligne de commande par défaut, afin qu'il puisse en entrer une autre.
Page suivante Page précédente Table des matières