Pour créer un système racine, il faut sélectionner les fichiers nécessaires au système pour fonctionner. Dans cette section nous décrivons comment créer un système racine compressé. Une option moins courante est de créer un système non compressé sur une disquette que l'on monte directement ; cette alternative est décrite dans la Section 9.1.
Un système racine doit contenir tout ce qui est nécessaire au bon fonctionnement d'un système Linux complet. Pour cela, le disque doit contenir un système Linux minimum :
La structure de base des fichiers ;
Un ensemble minimum de répertoires : /dev, /proc, /bin, /etc, /lib, /usr, /tmp ;
Un ensemble d'utilitaires de base : sh, ls, cp, mv, et cætera ;
Un ensemble minimum de fichiers de configuration : rc, inittab, fstab, et cætera ;
Des périphériques : /dev/hd*, /dev/tty*, /dev/fd0, et cætera ;
Des bibliothèques d'exécution fournissant les fonctions de base nécessaires aux utilitaires.
Bien sûr, n'importe quel système devient utile dès que l'on peut faire tourner quelque chose dessus, et une disquette racine ne devient en général utilisable que lorsque vous pouvez faire quelque chose du genre :
Contrôler un système de fichiers sur un autre disque ; par exemple, pour contrôler le système racine de votre disque dur, vous devez pouvoir démarrer Linux depuis un autre disque, telle qu'une disquette racine. Vous pouvez alors lancer fsck sur votre disque racine habituel tant qu'il n'est pas monté ;
Récupérer tout ou partie de votre disque racine initial à partir d'une sauvegarde en utilisant des utilitaires d'archivage et de compression tels que cpio, tar, gzip et ftape.
Nous décrirons comment construire un système compressé, ainsi appelé car il est compressé sur disque et qu'une fois démarré, le noyau le décompresse dans un disque mémoire. Avec un système compressé vous pouvez faire tenir beaucoup de fichiers (à peu près six méga-octets) sur une disquette standard de 1440 ko. Puisque le système de fichiers est bien plus gros que la disquette, il ne peut être construit directement sur la disquette. Il nous faut le construire ailleurs et le compresser avant de le copier sur la disquette.
Pour créer un tel système racine, il vous faut un autre périphérique capable de stocker tous les fichiers avant leur compression. Ce périphérique doit pouvoir contenir à peu près quatre méga-octets. Plusieurs solutions s'offrent à vous :
Utiliser un disque mémoire (PÉRIPHÉRIQUE = /dev/ram0). Dans ce cas, la mémoire est utilisée pour simuler un disque physique. Le disque mémoire doit être suffisamment grand pour contenir un système de fichiers de la bonne taille. Si vous utilisez LILO, cherchez dans votre fichier de configuration (/etc/lilo.conf) une ligne du type :
RAMDISK_SIZE = nnn |
qui détermine combien de mémoire peut être au plus allouée à un disque mémoire. La valeur par défaut est de 4096 ko, ce qui devrait suffire. Il ne sert probablement à rien de créer un tel disque mémoire sur une machine possédant moins de 8 Mo de RAM.
Vérifiez que vous avez un périphérique tel que /dev/ram0, /dev/ram ou /dev/ramdisk. Si ce n'est pas le cas, créez /dev/ram0 avec mknod (numéro majeur 1, numéro mineur 0).
Une partition de disque dur inutilisée et assez grande (plusieurs méga-octets) est aussi une bonne solution.
Utiliser un périphérique de boucle (loopback), qui permet d'utiliser un fichier comme s'il s'agissait d'un périphérique normal. Avec un périphérique de boucle, vous pouvez créer un fichier de 3 méga-octets sur votre disque dur et construire le système de fichiers dedans.
Tapez man losetup pour savoir comment utiliser un périphérique de boucle. Si vous n'avez pas losetup, vous pouvez le récupérer, ainsi que des versions compatibles de mount et umount, dans le paquetage util-linux disponible dans le répertoire ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/.
Si vous n'avez pas de périphérique de boucle (/dev/loop0, /dev/loop1, et cætera) sur votre système, vous devez en créer un avec mknod /dev/loop0 b 7 0. Une fois les exécutables mount et umount spéciaux installés, créez un fichier temporaire sur le disque dur suffisamment grand (par exemple, /tmp/fsfile). Vous pouvez utiliser une commande du type :
dd if=/dev/zero of=/tmp/fsfile bs=1k count=nnn |
pour créer un fichier de nnn blocs.
Utilisez le nom du fichier à la place de PÉRIPHÉRIQUE ci-dessous. Quand vous exécutez une commande mount, vous devez inclure l'option -o loop pour dire au programme d'utiliser un périphérique de boucle. Par exemple :
mount -o loop -t ext2 /tmp/fsfile /mnt |
va monter /tmp/fsfile (par périphérique de boucle) sur le point de montage /mnt. Un coup de df le confirmera.
Après avoir choisi une de ces options, préparez le PÉRIPHÉRIQUE avec :
dd if=/dev/zero of=PÉRIPHÉRIQUE bs=1k count=4096 |
Cette commande initialise à zéro le périphérique. Cette étape est importante pour la compression ultérieure du système de fichiers, afin que toutes les portions inutilisées soient remplies de zéros pour une compression maximum. Gardez cela à l'esprit si vous déplacez ou effacez des fichiers sur le système de fichiers. Le système de fichiers va désallouer correctement les blocs, mais ne va pas les initialiser à zéro à nouveau . Si vous effectuez beaucoup d'effacements et de copies, votre système de fichiers compressé risque d'être bien plus grand que nécessaire.
Ensuite, créez le système de fichiers. Le noyau Linux sait charger automatiquement deux types de système de fichiers dans un disque mémoire : minix et ext2, avec une préférence pour ext2. Si vous le choisissez, vous voudrez peut-être utiliser l'option -i afin de créer plus d'i-n½uds que par défaut ; -i 2000 est une bonne valeur qui vous évitera de tomber à court d'i-n½uds. Vous pouvez sinon économiser des i-n½uds en supprimant pas mal de fichiers /dev/ inutiles. mke2fs crée par défaut 360 i-n½uds sur une disquette de 1,44 Mo. Je trouve 120 i-n½uds largement suffisants pour ma disquette racine de secours, mais si vous conservez tous les périphériques dans le répertoire /dev vous dépasserez facilement les 360. L'utilisation d'un système racine compressé permet de créer un système de fichiers plus grand, contenant donc plus d'i-n½uds par défaut, mais vous pourrez quand même vouloir réduire le nombre de fichiers ou augmenter le nombre d'i-n½uds.
Vous allez donc taper une commande du genre :
mke2fs -m 0 -i 2000 PÉRIPHÉRIQUE |
(Si vous utilisez un périphérique de boucle, le fichier que vous utilisez doit être indiqué à la place de ce PÉRIPHÉRIQUE. mke2fs vous demandera alors si vous voulez vraiment faire cela ; répondez oui.)
La commande mke2fs détectera automatiquement l'espace disponible et se configurera selon ce dernier. Le paramètre -m 0 permet de ne pas réserver d'espace pour root, et laisse donc plus d'espace disponible sur le disque.
Ensuite, montez le périphérique :
mount -t ext2 PÉRIPHÉRIQUE /mnt |
(Vous devez créer un point de montage /mnt s'il n'existe pas encore.) Dans les sections suivantes, tous les répertoires destination sont supposés relatifs à /mnt.
Voici un minimum raisonnable de répertoires à créer sur votre système racine [1] :
/dev : Périphériques, nécessaires aux E/S ;
/proc : Répertoire de base nécessaire au système de fichiers proc ;
/etc : Fichiers de configuration du système ;
/sbin : Exécutables systèmes critiques ;
/bin : Exécutables de base considérés comme partie intégrante du système ;
/lib : Bibliothèques partagées nécessaires à l'exécution des programmes ;
/mnt : Un point de montage pour la maintenance des autres disques ;
/usr : Utilitaires et applications supplémentaires.
Trois de ces répertoires resteront vides sur les systèmes racine, il suffit donc de les créer avec mkdir. Le répertoire /proc n'est qu'une base sous laquelle le système proc est placé. /mnt et /usr ne sont que des points de montage utilisés une fois que le système amorce/racine tourne. Encore une fois, il suffit de créer ces répertoires.
Les quatre autres répertoires sont décrits dans les sections suivantes.
Tous les systèmes Linux ont besoin d'un répertoire /dev contenant un fichier spécial par périphérique accessible au système. Le répertoire en lui-même est normal, et peut être créé avec mkdir de la manière habituelle. Les fichiers spéciaux de périphérique doivent par contre être créés différemment, à l'aide de la commande mknod.
Il y a un raccourci par contre : copiez le contenu de votre répertoire /dev existant, puis supprimez ceux dont vous n'avez pas besoin. Il suffit juste de copier les fichiers spéciaux avec l'option -R. Cela copie le répertoire sans tenter de copier le contenu des fichiers. Attention à bien utiliser un R en majuscule ! Si vous utilisez l'option en minuscule -r, vous allez vous retrouver en train de copier le contenu complet de votre disque dur — ou au moins tout ce que pourra en contenir une disquette ! Prenez donc vos précautions, et utilisez par exemple les commandes :
cp -dpR /dev/fd[01]* /mnt/dev cp -dpR /dev/tty[0-6] /mnt/dev |
en supposant que la disquette est montée sur /mnt. Les options dp demandent la copie des liens symboliques en tant que lien, plutôt que celle du fichier qui se trouve au bout de celui-ci, et la conservation des attributs originaux des fichiers, pour garder les bons propriétaires.
Si vous voulez le faire vous-mêmes, utilisez ls -l pour afficher les numéros majeurs et mineurs des périphériques qui vous intéressent, et créez-les sur la disquette en utilisant mknod.
Quelle que soit la manière retenue pour copier les périphériques, il faut vérifier que tous les périphériques dont vous aurez besoin sont bien présents sur la disquette de secours. Par exemple, ftape utilise les périphériques de bande, qu'il vous faudra donc tous copier si vous comptez utiliser votre lecteur de bande depuis le disque amorce.
À noter qu'un i-n½ud est nécessaire pour chaque fichier de périphérique, et que les i-n½uds sont parfois une ressource rare, spécialement sur les systèmes de fichiers sur disquette. Il n'est donc pas idiot d'enlever du répertoire /dev de la disquette tous les fichiers de périphérique dont vous n'avez pas besoin. Bien des périphériques ne sont clairement pas nécessaires sur des systèmes spécifiques. Par exemple, si vous n'avez pas de disques SCSI vous pouvez tranquillement enlever tous les fichiers commençant par sd. De même, si vous ne comptez pas utiliser de port série vous pouvez supprimer tous les fichiers commençant par ttyS.
Si, en construisant le système de fichiers, vous obtenez l'erreur :
No space left on device |
et que la commande df indique qu'il reste de l'espace disponible, c'est sans doutes qu'il n'y a plus d'i-n½ud disponible. Un df -i affichera l'utilisation des i-n½uds.
N'oubliez pas d'inclure les fichiers suivants dans le répertoire : console, kmem, mem, null, ram0, tty1.
Ce répertoire doit contenir un certain nombre de fichiers de configuration. Ce qu'il devrait contenir dépend des programmes que vous avez l'intention d'exécuter. Sur la plupart des systèmes, on peut les répartir en trois groupes :
Nécessaires à tout moment, par exemple rc, fstab, passwd ;
Peut-être nécessaires, mais on n'en est pas sûr ;
Du bazar oublié là.
Les fichiers non essentiels peuvent être identifiés avec la commande :
ls -ltru |
Les fichiers sont classés dans l'ordre inverse de dernière date d'accès, donc tout fichier qui n'est jamais lu peut être exclu d'une disquette racine.
Sur mes disquettes racine, je n'ai que 15 fichiers de configuration. Mon travail se réduit alors à gérer trois groupes de fichiers :
Ceux que je dois configurer pour un système d'amorce et racine :
rc.d/* : scripts de démarrage du système et de changement de niveau d'exécution ;
fstab : liste des systèmes de fichiers à monter ;
inittab : paramètres pour le processus init, le premier à être lancé au démarrage.
gettydefs : paramètres pour le processus init, le premier à être lancé au démarrage.
Ceux que je dois nettoyer pour un système d'amorce et racine :
passwd : liste des utilisateurs, des répertoires utilisateurs, et cætera ;
group : groupes d'utilisateurs ;
shadow : mots de passe cachés des utilisateurs. Il se peut que vous n'ayez pas ce fichier ;
termcap : la base de données de fonctionnalités des terminaux.
Si la sécurité est importante, passwd et shadow doivent être nettoyés pour ne pas copier de mots de passe d'utilisateurs hors du système et pour qu'en cas de démarrage sur disquette, les logins indésirables soient rejetés.
Assurez-vous que passwd contienne au moins root. Si vous comptez donner accès à d'autres utilisateurs, vérifiez l'existence de leurs répertoires utilisateurs et de leurs shells.
termcap, la base de données de terminaux, fait en général plusieurs centaines de kilo-octets. Vous devrez faire du ménage dans la version de votre disquette d'amorce/racine pour ne conserver que le ou les terminaux que vous utilisez, ce qui se réduit en général à l'entrée linux ou linux-console.
Le reste. Ils fonctionnent très bien tels quel, je ne les modifie donc pas.
Parmi tout cela, je n'ai en réalité que deux fichiers à configurer, et ils ne doivent contenir qu'étonnamment peu de choses.
rc doit contenir :
#!/bin/sh /bin/mount -av /bin/hostname Kangaroo |
Vérifiez qu'il est exécutable, qu'il contient bien une ligne #!/bin/sh au début et que ce sont les bons répertoires. Il n'est pas réellement nécessaire de lancer hostname, mais cela donne juste une meilleure allure.
fstab doit au moins contenir :
/dev/ram0 / ext2 defaults /dev/fd0 / ext2 defaults /proc /proc proc defaults |
Vous pouvez copier des lignes de votre vrai fstab, mais vous ne devriez pas monter automatiquement de partitions de votre disque dur ; utilisez le mot clé noauto pour celles-là. Votre disque peut être endommagé ou mort quand vous utilisez le disque d'amorce.
Votre inittab doit être modifié pour que la ligne sysinit lance rc ou quelque autre script basique d'amorce. De plus, si vous ne souhaitez pas que les utilisateurs se loguent sur les ports série, commentez toutes les entrées getty qui font référence à des périphériques ttys ou ttyS à la fin de la ligne. Laissez les ports tty pour pouvoir vous connecter sur la console.
Un fichier inittab minimal contient ce qui suit :
id:2:initdefault si::sysinit:/etc/rc 1:2345:respawn:/sbin/getty 9600 tty1 2:23:respawn:/sbin/getty 9600 tty2 |
Le fichier inittab décrit ce que va lancer le système dans divers états, dont le démarrage, le passage en mode multi utilisateurs, et cætera. Attention aux noms de fichiers référencés dans inittab ; si init ne peut trouver le programme, le disque d'amorce s'arrêtera, et vous n'aurez peut-être même pas de message d'erreur.
Notez que certains programmes ne peuvent être déplacés en raison d'autres programmes qui référencent en dur leur position. Par exemple sur mon système, /etc/shutdown référence en dur /etc/reboot. Si je déplace reboot vers /bin/reboot, et que je lance une commande shutdown, elle va échouer en ne trouvant pas le fichier reboot.
Pour le reste, copiez juste tous les fichiers texte de votre répertoire /etc, ainsi que tous les exécutables présents dans /etc dont vous n'êtes pas sûr de pouvoir vous passer. Basez-vous sur l'exemple de l'Annexe C. Exemple de contenu de répertoires sur un disque racine. Il vous suffira probablement de copier ces fichiers, mais les systèmes pouvant être très différents, il n'est pas certain que le même ensemble de fichiers sur votre système soit équivalent aux fichiers listés. La seule méthode sûre est de partir d'inittab et d'en déduire ce qui est nécessaire.
La plupart des systèmes utilisent maintenant un répertoire /etc/rc.d/ contenant des scripts shell pour les différents niveaux d'exécution. Il faut au minimum avoir un script rc unique, mais il peut être plus simple de carrément copier inittab et le répertoire /etc/rc.d depuis votre système puis de nettoyer les scripts shell dans le répertoire rc.d pour enlever tous les traitements inutiles pour un système sur disquette.
Le répertoire /bin est un endroit pratique pour tous les utilitaires nécessaires aux opérations de base, tels que ls, mv, cat et dd. Voir l'Annexe C. Exemple de contenu de répertoires sur un disque racine pour un exemple d'ensemble de fichiers pouvant aller dans les répertoires /bin et /sbin. Il ne contient aucun des utilitaires nécessaires à la récupération d'une sauvegarde, tels que cpio, tar et gzip. C'est parce que je place ceux-ci sur une disquette utilitaire séparée, pour conserver de la place sur la disquette d'amorce et racine. Une fois la disquette d'amorce/racine démarrée, elle est copiée sur le disque mémoire, laissant ainsi le lecteur de disquette libre pour en monter une autre, la disquette utilitaire. En général je la monte sur /usr.
La création d'une disquette utilitaire est décrite ci-dessous dans la Section 9.2 . Il est probablement souhaitable d'y maintenir une copie des mêmes versions d'utilitaires de sauvegarde que ceux utilisés pour écrire les sauvegardes, histoire de ne pas perdre de temps en essayant d'installer des versions qui ne peuvent pas lire vos bandes de sauvegarde.
Vérifiez que vous y mettez les programmes suivants : init, getty ou un équivalent, login, mount, un shell capable de faire tourner votre script rc, un lien de sh vers le shell en question.
Vous mettez dans /lib les bibliothèques partagées et les chargeurs nécessaires. Si les bibliothèques nécessaires ne sont pas trouvées dans /lib, le système ne pourra pas démarrer. Avec de la chance, un message vous expliquera pourquoi.
Pratiquement tous les programmes ont au moins besoin de la bibliothèque libc, libc.so.N, N étant le numéro de version courant. Vérifiez votre répertoire /lib, libc.so.N est en général un lien symbolique vers un fichier avec un numéro de version complet :
% ls -l /lib/libc.so* -rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so* lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so* |
Dans le cas présent, il vous faut libc-2.1.1.so. Pour trouver les autres bibliothèques nécessaires, il faut lancer la commande ldd sur tous les exécutables que vous prévoyez de mettre sur la disquette. Par exemple :
% ldd /sbin/mke2fs libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000) libuuid.so.1 => /lib/libuuid.so.1 (0x40028000) libc.so.6 => /lib/libc.so.6 (0x4002c000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) |
Tous les fichiers à droite sont nécessaires. Le fichier peut en réalité être un lien symbolique.
Notez que certaines bibliothèques sont assez grosses et ne tiendront pas facilement sur votre système racine. Par exemple, la libc.so citée précédemment fait environ 4 méga-octets. Vous devrez probablement nettoyer les bibliothèques avant de les copier sur votre système racine. Reportez-vous à la Section 8 pour plus d'informations.
Il faut également inclure dans /lib un chargeur pour les bibliothèques. Il s'agira soit de ld.so (pour les bibliothèques a.out), soit de ld-linux.so (pour les bibliothèques ELF). Les versions récentes de ldd vous indiquent de quel chargeur vous avez besoin, comme dans l'exemple ci-dessus, mais de plus anciennes versions ne le font pas forcément. Si vous ne savez pas duquel vous avez besoin, utilisez la commande file sur la bibliothèque. Par exemple :
% file/lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so /lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped /lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped /lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped |
Le mot QMAGIC indique que 4.7.2 est pour les bibliothèques a.out, et ELF que 5.4.33 et 2.1.1 sont pour les ELF.
Copiez le ou les chargeurs dont vous avez besoin sur le système racine que vous êtes en train de construire. Les bibliothèques et chargeurs doivent être testés attentivement avec les exécutables inclus. Si le noyau ne peut charger une bibliothèque nécessaire, il s'arrêtera en général brutalement, sans message d'erreur.
Votre système peut utiliser des bibliothèques chargées dynamiquement mais invisibles pour ldd. Si vous ne les incluez pas, vous risquez de ne pas pouvoir vous connecter ou utiliser votre disquette d'amorce.
Si votre système utilise PAM (Pluggable Authentication Modules, soit Modules Externes d'authentification), tenez-en compte dans la construction de votre disque d'amorce, sans quoi vous ne pourrez pas vous connecter. En quelques mots, PAM est une méthode modulaire sophistiquée pour authentifier les utilisateurs et contrôler leur accès aux services. Pour déterminer simplement si votre système utilise PAM, cherchez dans le répertoire /etc de votre disque dur un fichier pam.conf ou un répertoire pam.d ; si l'un des deux existe, vous devez prévoir un minimum de support pour PAM. (Vous pouvez aussi lancer ldd sur votre exécutable login ; si la sortie contient libpam.so, vous avez besoin de PAM.)
Heureusement, la sécurité est rarement un problème avec les disques d'amorce étant donné que quiconque avec un accès physique à la machine peut en général faire tout ce qu'il veut dessus. Vous pouvez donc complètement désactiver PAM en créant un fichier /etc/pam.conf simple sur votre système racine contenant :
OTHER auth optional /lib/security/pam_permit.so OTHER account optional /lib/security/pam_permit.so OTHER password optional /lib/security/pam_permit.so OTHER session optional /lib/security/pam_permit.so |
Copiez également le fichier /lib/security/pam_permit.so sur votre système racine. Cette bibliothèque ne fait qu'environ 8 ko et ne coûte donc pas grand chose.
Notez bien que cette configuration donne à tous un accès complet aux fichiers et services de votre machine. Si vous avez des impératifs de sécurité sur votre disque d'amorce pour une raison ou une autre, vous devrez copier une partie, voire l'ensemble de la configuration PAM de votre disque dur vers le système racine. Lisez bien attentivement la documentation de PAM, et copiez toutes les bibliothèques nécessaires depuis /lib/security vers votre système racine.
Vous devez aussi inclure /lib/libpam.so sur le disque racine. Mais vous le saviez déjà puisque vous avez lancé ldd sur /bin/login qui vous a montré cette dépendance.
Si vous utilisez glibc (appelée aussi libc6), vous devez tenir compte des services de noms sans quoi vous ne pourrez pas vous connecter. Le fichier /etc/nsswitch.conf contrôle les recherches dans les bases de données pour divers services. Si vous ne comptez pas accéder à des services du réseau (tels que des recherches DNS ou NIS), un simple fichier nsswitch.conf comme suit suffit :
passwd: files shadow: files group: files hosts: files services: files networks: files protocols: files rpc: files ethers: files netmasks: files bootparams: files automount: files aliases: files netgroup: files publickey: files |
Ce fichier spécifie que tous les services ne sont fournis que par des fichiers locaux de la machine. Vous devez aussi inclure le fichier /lib/libnss_files.so.X, où X vaut 1 pour une glibc 2.0 et 2 pour une glibc 2.1. Cette bibliothèque est chargée dynamiquement pour gérer les recherches dans les fichiers.
Si vous comptez accéder au réseau depuis votre disque d'amorce, vous pouvez créer un fichier nsswitch.conf plus complet. Voir la page de manuel de nsswitch pour plus de détails. N'oubliez pas d'inclure un fichier /lib/libnss_service.so.1 pour chaque service que vous ajoutez.
Si votre noyau est modulaire, vous devez savoir quels modules vous voudrez charger depuis votre disque d'amorce une fois le système démarré. Il vous faudra inclure les modules ftape et zftape si vos sauvegardes sont sur bandes, les modules pour périphériques SCSI si vous en avez, et éventuellement ceux pour le support PPP ou SLIP si vous souhaitez accéder au réseau en cas d'urgence.
Ces modules doivent être placés dans /lib/modules. Vous devez aussi inclure insmod, rmmod et lsmod. Si vous souhaitez charger les modules automatiquement, prenez modprobe, depmod et swapout. Et si vous utilisez kerneld, prenez le avec son fichier de configuration /etc/conf.modules.
Néanmoins, le principal avantage d'utiliser les modules est que vous pouvez déplacer les modules non essentiels sur un disque utilitaire et ne les charger que lorsque c'est nécessaire, ce qui prend alors moins de place sur le disque racine. Si vous devez gérer beaucoup de périphériques, il vaut mieux procéder de cette manière plutôt que de construire un seul gros noyau contenant tous les gestionnaires.
Attention, pour démarrer avec un système de fichiers ext2 compressé, vous devez avoir inclus le support pour disque mémoire et ext2. Ils ne peuvent être installés par des modules.
Certains programmes, tels que login, se plaignent si le fichier /var/run/utmp et le répertoire /var/log n'existent pas.
Donc :
mkdir -p /mnt/var/{log,run} touch /mnt/var/run/utmp |
Enfin, après avoir installé toutes les bibliothèques dont vous avez besoin, lancez ldconfig pour refabriquer /etc/ld.so.cache sur le système racine. Le cache indique au loader où trouver les bibliothèques. Pour refabriquer ld.so.cache, lancez la commande suivante :
ldconfig -r /mnt |
Une fois le système racine construit, démontez-le, copiez-le dans un fichier et compressez-le :
umount /mnt dd if=PÉRIPHÉRIQUE bs=1k | gzip -v9 > rootfs.gz |
Une fois cette étape effectuée, vous obtenez un fichier rootfs.gz contenant votre système racine compressé. Vérifiez sa taille pour être sûr qu'il tient sur une disquette. Si ça n'est pas le cas vous devrez y retourner pour supprimer certains fichiers. La Section 8 vous donnera des astuces pour y arriver.
[1] La structure de répertoires présentée ici concerne une disquette racine seule. Les vrais systèmes Linux obéissent à un ensemble de règles bien plus complexes et contrôlées, appelé le Filesystem Hierarchy Standard, pour déterminer où les fichiers doivent aller.