Après la configuration de LFS

L'intention de LFS est d'apporter un système basique à partir duquel vous pouvez continuer la construction. Beaucoup de personnes se posent des questions sur comment améliorer leur système une fois qu'ils ont terminé l'installation de base. Nous espérons couvrir ces questions dans ce chapitre.

Beaucoup de personnes venant de Windows et passant à Linux trouvent le concept de fichiers de configurations texte légèrement étrange. Sur Linux, pratiquement toute la configuration est faite via des fichiers textes. La majorité de ces fichiers peut être trouvé dans le répertoire /etc. Il existe souvent des programmes graphiques de configuration pour différents sous-systèmes, mais ce sont en majorité de simples et jolis outils qui s'occupent de l'édition du fichier. L'avantage de la configuration en texte seulement est que vous pouvez éditer les paramètres en utilisant votre éditeur de texte favori, qu'il soit vim, emacs ou un autre.

La première tâche concerne la création d'une disquette de démarrage parce qu'il s'agit du besoin le plus critique. Ensuite, le système est configuré pour faciliter l'ajout de nouveaux utilisateurs, dans "Configurer l'ajout d'utilisateurs", parce que ceci peut affecter les choix à faire dans les trois thèmes suivants - "/etc/inputrc", "Fichiers de démarrage du Shell Bash" et "/etc/vimrc, ~/.vimrc".

Les thèmes restants, "/etc/issue (Personnaliser votre connexion)", "/etc/shells", "Génération de nombres aléatoires", "Problèmes de pages man" et "Problèmes des pages info" sont ensuite couverts. Ils n'ont pas beaucoup d'interaction avec les autres thèmes de ce chapitre.

Créer un disque de démarrage personnalisé

Besoins décents pour une disque de démarrage de dépannage

Cette section se concentre particulièrement sur la création d'une disquette de dépannage (rescue). Comme le nom l'indique, le système hôte a un problème, souvent des informations de partition perdues ou des systèmes de fichiers corrompus qui l'empêchent de se lancer ou d'opérer correctement. Pour cette raison, vous ne devez pas dépendre de ressources disponibles sur l'hôte à réparer. Présumer qu'une partition ou un disque dur donné sera disponible est très risqué.

Suivant cet avertissement, le disque de dépannage créé ici n'a pas de dépendances avec les ressources de l'hôte système, autres que le démarrage et le matériel. Au minimum, les raisons les plus communes d'échec nécessitant un disque de dépannage devraient être résolues par le contenu de ce disque. Ceci inclut la perte d'une partition (MBR perdu ou corrompu), la corruption d'un système de fichiers et le besoin de permettre la création et l'édition de fichiers qui pourraient avoir été perdus ou corrompus, un possible effet des deux autres problèmes.

Des utilitaires supplémentaires doivent être disponibles pour rechercher du texte ou des fichiers, copier, déplacer et supprimer des fichiers et plein d'autres opérations normales qui pourraient être nécessaires lors de la reconstruction.

La disquette de dépannage minimale

Le but ici est de créer une disquette de démarrage qui supportera les opérations communes listées ci-dessus. Ces fonctions sont fournies en incluant les exécutables sélectionnés à partir de busybox et e2fsprogs. Un éditeur basique et un outil de partionnement rudimentaire pourraient aussi être inclus, de manière optionnelle.

Néanmoins, ceci n'est pas la limite. Un disque minimal est décrit ici mais vous pouvez ajouter tout ce qui peut tenir sur la disquette. De plus, si un disquette n'est pas suffisante pour vos besoins, vous pouvez réaliser un système multi-disquettes de secours, ce qui sous-entend que vous n'avez pas de limite. Ceci est discuté plus bas. Le nombre des variations est trop grand pour être mentionné ici.

Construire la disquette de dépannage

Prérequis

Vous devez avoir des disquettes, reconnues bonnes. Certains préfèrent utiliser la commande fdformat pour les préparer parce qu'elle effectue aussi une vérification. Voir la page man pour plus de détails. Une autre bonne idée est de toujours préparer des duplications de la disquette de dépannage. Un média peut se déteriorer.

Ces instructions présument une installation LFS de base utilisant le système de fichiers ext2/ext3.

Vous avez besoin du support du périphérique loopback activé dans le noyau de votre hôte pour utiliser cette procédure.

Vous devez construire un noyau personnalisé incluant seulement les fonctionnalités nécessaires pour dépanner votre système, de façon à ce qu'il ait la plus petite taille possible. Aucune raison de compiler ici le support de fonctionnalités comme XFree86, DRI, etc, car la plupart des dépannages sont réalisés à partir de la ligne de commande. Si vous avez GCC-2.95.3, celui-ci est connu pour produire des noyaux petits. Donc, vous pouvez utiliser ce compilateur pour ce noyau. Si vous le faites, n'oubliez pas les modules chargeables dont vous avez besoin, ils devront nécessairement être compilé avec le même compilateur que celui qui a créé le noyau.

L'image de la disquette de dépannage doit inclure le support du système de fichiers de votre choix (nous présummons ext2/3 ici), d'un disque ram et d'un disque ram initial (initrd). Désactivez tout ce que vous pouvez dans la configuration du noyau. Vous devez conserver le support du système de fichiers proc et tempfs à cause de leur utilité générame. Le système de fichiers proc est nécessaire notamment à la commande mount pour travailler correctement.

Si vous installez seulement l'ensemble minimal de composants indiqués dans ce document, vous aurez un noyau de 643 blocs, voire plus petit. Si vous voulez des programmes optionnels - un éditeur basique comme ed et un outil de partionnement rudimentaire comme sfdisk - le noyau aura besoin d'une taille de 595 blocs. Cela ne devrait pas être un problème majeur à moins que vos besoins ne soient ésotériques. Sur le système utilisé pour développer cette version des procédures, en utilisant seulement les systèmes de fichiers ext2 et en n'utilisant pas le réseau ou les CD pour le dépannage, l'image du noyau pèse seulement 481 blocs. Et vous pouvez gagner plus - aucun examen plus complet n'a été effectué pour des gains supplémentaires.

Cette image du noyau sera appelée "rescueimage" après. Vous pouvez appeler votre image de la façon que vous voulez et utiliser simplement ce nom dans toutes les commandes qui incluent "rescueimage".

Si vous ne pouvez pas diminuer la taille de votre image de démarrage à une taille suffisante pour que tout tienne sur le disque, pas d'inquiétude. Vous pouvez toujours construire un ensemble de deux disquettes, une de démarrage et une disquette root. Le noyau vous demandera d'insérer la disquette de démarrage root. Ceci donnera plus de place à l'image de disque ram compressée. Ceci autorisera l'image du disque ram compressé d'avoir une taille de 1440 blocs et une image de démarrage de même taille.

Les limites en taille de l'image de démarrage données ci-dessus pourraient varier suivant les modifications de locale. Utilisez-les seulement comme exemple et non comme un bible. La taille de l'image de dépannage, montrée par ls -sk est seulement une approximation à cause de l'"overhead". Sur le système utilisé pour développer cette version de ces procédures, la commande affiche 488 blocs mais le vrai nombre de blocs écrits est seulement de 480 et une fraction, ce qui signifie que 481 blocs sont réellements utilisés.

Etapes de la construction de la disquette de dépannage

Les étapes de base seront :

  • créer un point de montage pour un système de fichiers

  • créer un fichier vide pour contenir le système de fichiers

  • lier le fichier vide à un périphérique loopback

  • créer un système de fichiers de 4 Mo

  • monter le système de fichiers

  • ajouter les composants au système de fichiers

  • créer l'initrd compressé

  • joindre rescueimage et initrd sur une disquette

Le disque ram initial sera automatiquement chargé au démarrage si la configuration est faite correctement.

Créer un point de montage et un fichier vide pour contenir le système de fichiers

mkdir -p /mnt/loop1
dd if=/dev/zero of=/tmp/rfloppy bs=1k count=4096

Explication des commandes

dd: C'est un outil général de copie entrée-vers-sortie disposant de nombreuses fonctionnalités de transformation.

if=/dev/zero: Ce paramètre affecte le fichier d'entrée de dd à un périphérique renvoyant un flux infini de zéros.

of=/tmp/rfloppy: Ce paramètre redirige la sortie de dd vers /tmp/rfloppy.

bs=1k count=4096: Ces paramètres indiquent à dd de lire et écrire par paquets de 1024 octets et d'en traiter 4096.

Lier le fichier au périphérique loopback, créer un système de fichier et le monter.

La raison pour laquelles ces commandes sont utilisées est qu'elles fonctionnent quelle que soit la version de mount (les plus anciennes n'ont pas l'option -o loop) ou si /etc/mtab est un lien symbolique de /proc (ce qui fait que mount se révèle incapable de "délier" proprement un périphérique loop, à cause de la "perte" d'informations). Un autre ensemble de commandes est fourni, après ces trois commandes, que vous pouvez utiliser si vous n'êtes dans aucune de ces situations.

losetup /dev/loop1 /tmp/rfloppy
mke2fs -m 0 -N 504 /dev/loop1
mount -t ext2 /dev/loop1 /mnt/loop1

Explication des commandes

losetup /dev/loop1 /tmp/rfloppy: Cette commande "lie" le périphérique loopback au fichier vide.

mke2fs -m 0 -N 504 /dev/loop1: Cette commande crée un système de fichiers ext2 sur le périphérique loopback (ce qui signifie réellement qu'il est créé dans le fichier vers lequel pointe le périphérique loopback) et ne réserve aucun bloc. Le paramètre -N 504 fait que seules 504 inodes sont allouées, laissant plus d'espace pour d'autres choses nécessaires dans le système de fichiers.

mount -t ext2 /dev/loop1 /mnt/loop1: Ceci monte le système de fichiers tout juste créé, comme s'il s'agissait d'un vrai périphérique comme un disque dur ou une disquette. Ceci permet toutes les commandes habituelles du système d'entrées/sorties comme si un vrai périphérique était présent.

Si votre commande mount supporte l'option -o loop et que votre /etc/mtab est un vrai fichier, plutôt qu'un lien symbolique vers /proc, les trois commandes ci-dessus peuvent être remplacées par ces deux commandes.

mke2fs -F -m 0 -N 504 /tmp/rfloppy
mount -o loop /tmp/rfloppy /mnt/loop1

Explication des commandes

mke2fs -F -m 0 -N 504 /tmp/rfloppy: Comme auparavant, un système de fichiers est créé avec seulement 504 inodes et aucun bloc réservé, qui sera lié au périphérique loopback. Le paramètre -F supprime simplement une question irritante lorsque mke2fs réalisé que vous n'accédez pas à un périphérique.

mount -o loop /tmp/rfloppy /mnt/loop1: Cette commande indique à mount de lier le fichier nommé vers un périphérique loopback qu'il détecte automatiquement (le premier disponible) et monte le périphérique sur /mnt/loop1.

Ajouter des composants au système de fichiers

Note d'avertissement: Si vous n'êtes pas dans un environnement chroot, assurez-vous que vous n'omettez pas accidentellement la référence /mnt/loop1 dans les commandes. Si vous le faites, vous pourriez remplacer les composants équivalents de votre hôte avec les composants installés avec ces procédures. Même si vous vous trouvez dans un environnement chroot, vous aurez besoin de faire attention si l'environnement est votre système LFS fraichement construit que vous comptez utiliser comme hôte dans le futur.

Tout d'abord, pour conserver autant de place libre que possible, supprimez le répertoire lost+found, qui n'est pas nécessaire sauf dans le cas d'un fsck. Comme fsck ne sera jamais exécuté sur ce système de fichiers, il n'est pas nécessaire.

rmdir /mnt/loop1/lost+found/

Maintenant, créez un ensemble minimal de répertoires.

mkdir /mnt/loop1/{dev,proc,etc,sbin,bin,lib,mnt,usr,var}

Ajoutez les périphérique nécessaires pour l'image initrd. Si vous utilisez devfs, la commande suivante fonctionne aussi, car vous n'avez que les périphériques que vous utilisez.

cp -dpR /dev/* /mnt/loop1/dev

Si vous utilisez MAKEDEV pour créer vos périphériques dans votre hôte, vous voudrez utiliser quelque chose de similaire à cette longue commande, pour minimiser l'espace perdu si les inodes ne sont pas nécessaires.

Vous devez modifier ceci pour convenir à la configuration de la disquette de démarrage. Par exemple, vous avez besoin de périphériques SCSI et vous n'avez pas besoin des périphériques frame buffer ou des pseudo-terminaux. De même, le nombre de disques durs et de partitions que vous incluez doit être minimal. Des analyses poussées n'ont pas été effectuées dans la liste di-dessous, donc il peut rester des inodes et de l'espace disque à récupérer en optimisant cet ensemble.

mkdir /mnt/loop1/dev/pts
cp -a \ 
    /dev/null /dev/console \
    /dev/fb[0-7] /dev/fd /dev/fd0 /dev/fd0h1440 /dev/full \
    /dev/hda* /dev/hdb* /dev/hdc* /dev/hdd* /dev/initctl /dev/kmem \
    /dev/loop[0-3] /dev/lp0 /dev/mem /dev/port \
    /dev/psaux /dev/ram \
    /dev/ram0 /dev/ram1 /dev/ram2 /dev/ram3 /dev/random /dev/rtc \
    /dev/shm /dev/stderr /dev/stdin /dev/stdout /dev/tty \
    /dev/tty[0-9] /dev/ttyS0 /dev/ttyS1 /dev/urandom /dev/zero \
  /mnt/loop1/dev

Qu'est-il nécessaire dans le répertoire /etc

Si vous voulez, vous pouvez copier tout ou partie de vos fichiers /etc/passwd et /etc/group. Mais même si chacun d'entre eux fait moins que 1024 octets, vous perdrez deux inodes et deux blocs sur le disque ram initial. Cela a vraiment une importance car nous essayons de gagner tout ce qui est possible comme espace disque sur cette disquette de 1,44 Mo. Chaque bit nous aide. La stratégie prise ici est de créer ces deux fichiers los de la phase de démarrage et d'initialisation. Les commandes pour créer ces deux fichiers seront intégrées dans le script rcS que linuxrc (en fait busybox ) appelle après le chargement de initrd. De cette façon, aucune inode et bloc n'est utilisé sur la disquette pour emporter ces fichiers.

Certains aimeraient copier leur répertoire /etc/rc* dans l'image du disque ram mais ceci pourrait n'avoir aucune valeur, autre qu'une archive, dans un scénario de dépannage grave. Si vous voulez une initialisation automatique du système après réparation, ils pourraient avoir une certaine valeur. Mais peu de personnes en ont besoin ou le souhaitent. Si un système de fichiers sur les disques durs est corrompu, quel intérêt auront les scripts de montage ? Certains scripts pourraient être utile, comme l'accès au réseau pour copier des données sauvegardées une fois que les systèmes de fichier sont de nouveau utilisables. Le but est que vous devez copier seulement les parties que vous pouvez utiliser parce que l'espace disque est le point critique.

Ici, seul fstab sera inclus. Il facilite le montage des partitions qui pourraient être utiles et peut être utilisé comme guide sur les partitions disponibles et pouvant avoir besoin d'être reconstruites. Comme il pourrait être plus gros que nécessaire, vous devez l'éditre pour supprimer toute entrée inutile et pour minimiser les commentaires. Aucune autre édition n'est nécessaire parce que les scripts de démarrage ne sont pas inclus et qu'aucun montage automatique ne sera fait en utilisant fstab. Si vous décidez d'inclure certains scripts de démarrage qui pourraient essayer de monter quelque chose, modifiez les entrées de fstab avec l'option noauto dans le champ des options pour qu'ils n'essaient pas de monter une partition potentiellement corrompue. Copiez-le dans /tmp, éditez-le puis faites:

cp -a /tmp/fstab /mnt/loop1/etc

Maintenant, le script d'initialisation va être ajouté. Comme mentionné ci-dessus, linuxrc est lié symboliquement à busybox . Après le chargement du noyau et du disque ram initial, le noyau donne le contrôle à linuxrc ( busybox ). Il veut lancer un script /etc/init.d/rcS pour réaliser la configuration initiale.

Si vous utilisez devfsd, vous aurez besoin de configurer le script rcS pour gérer le lancement de devfsd. Placez les commandes suivantes dans /mnt/loop1/etc/init.d/rcS. Vous pouvez aussi ajouter quelques-unes des étapes montrées dans la version non devfs qui suit.

#!/bin/sh
mount -t devfs devfs /dev
/sbin/devfsd /dev

Si vous ne voulez pas utiliser devfsd, mais que vous souhaitez créer un répertoire /dev statique en utilisant MAKEDEV, ou tout autre outil, le script rcS fera les choses d'une façon légèrement différente. De même, n'oubliez pas qu'il crée les fichiers /etc/passwd et /etc/group sauvant ainsi de l'espace sur la disquette.

Ensuite, le script montera /proc, activera le swap (aucun problème si cela échoue), crée les fichiers /etc/passwd et /etc/group, crée un répertoire de traces. Créez le script avec:

mkdir -p /mnt/loop1/etc/init.d
cat >/mnt/loop1/etc/init.d/rcS << EOD
#!/bin/sh
mount -t proc proc /proc
swapon -a

echo "root:x:0:0:root:/root:/bin/bash" > /etc/passwd

cat > /etc/group <<EOF
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
EOF
chmod 644 /etc/passwd /etc/group

mkdir /var/log

EOD
chmod u+x /mnt/loop1/etc/init.d/rcS

Sauf si vous ajoutez beaucoup de commandes dans ce script, ce qui est encouragé, ce qui se trouve ci-dessus est raisonnablement proche de ce dont vous avez besoin.

Installer les packages

Deux packages doivent êtres installés. Le package busybox incorpore les fonctions de base fournissant un shell et beaucoup d'outils basiques. Un package pour le système de fichiers, comme e2fsprogs, ou le package pour le système de fichiers que vous utilisez, fournira un ensemble minimal d'outils pour la vérification et la reconstruction du système de fichiers. Le package complet ne sera pas installé car nous n'avons besoin que de certains composants.

Si vous utilisez devfsd, vous aurez aussi besoin d'installer ce logiciel.

Installez busybox dans l'image du disque ram initial. Busybox incorpore un grand nombre d'outils Unix en un seul petit exécutable.

make &&
make PREFIX=/mnt/loop1 install &&
> /mnt/loop1/var/utmp

Un fichier var/utmp est créé parce que busybox en a besoin pour que la commande de redémarrage fonctionne correctement. Si ce fichier n'existe pas lorsque busybox est démarré, la commande reboot ne fonctionnera pas. Ceci serait une mauvaise chose pour les personnes ne disposant pas du bouton de réinitialisation.

Si vous utilisez devfs pour créer les périphériques à la volée et libérer ainsi quelques précieuses inodes sur la disquette, vous installerez aussi devfsd pour faciliter l'usage des périphériques que busybox s'attend à trouver. Utilisez les commandes suivantes pour faire l'installation.

mv GNUmakefile Makefile &&
make &&
make PREFIX=/mnt/loop1 install

Installez une partie de e2fsprogs

Si vous utilisez le système de fichiers ext2 ou ext3 (journalisé), vous pouvez utiliser les commandes ci-dessous pour installer les fonctionnalités minimales qui devraient vous permettre de ré-utiliser vos disques durs. Si vous utilisez ext3, gardez en tête qu'il fait partie du package e2fsprogs et que vous pouvez obtenir les composants qui ne sont pratiquement que des liens physiques à partir des mêmes endroits montrés ci-dessous. Si vous utilisez un autre système de fichiers, tel que reiserfs, vous deviez appliquer le principal de ce que vous voyez ici pour installler les parties de votre package.

LDFLAGS='-s'
mkdir build &&
cd build &&
../configure --prefix=/mnt/loop1/usr --with-root-prefix="" \
    --disable-swapfs --disable-debugfs \
    --enable-dynamic-e2fsck --disable-nls --disable-evms \
    --disable-rpath &&
make LDFLAGS="$LDFLAGS" &&
strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/sbin/mke2fs misc/mke2fs &&
strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/sbin/e2fsck e2fsck/e2fsck &&
chmod 555 /mnt/loop1/sbin/{mke2fs,e2fsck}

Deux outils bien utiles

Voici deux outils que devrait posséder toute disquette de dépannage. Le premier est un outil de partitionnement. Le programme sfdisk est utilisé ici à cause de sa petite taille et de ses grandes capacités. Faites attention - il n'est pas considéré comme étant très facile d'utilisation. Mais les programmes fdisk et cfdisk sont bien plus gros et requièrent bien plus d'objets partagés comme ncurses.

Le second outil est un éditeur. La plupart des éditeurs graphiques sont très gros et nécessitent aussi des objets partagés supplémentaires. Pour cette raison, ed est utilisé ici. Il est petit, requiert aucun objet partagé et est un éditeur basé sur les expressions régulières, ancêtre de pratiquement tous les éditeurs suivants supportant l'édition basée sur les expressions régulières, graphiques ou non. C'est un éditeur contextuel et offre des fonctionnalités d'édition puissantes, mais non graphiques. Il existe plein d'autres éditeurs qui pourraient convenir - vous pouvez choisir un d'entre eux à la place.

Lisez les fichiers INSTALL et README de busybox pour voir comment inclure un éditeur vi. Cela n'a pas encore été testé, donc cela pourrait tenir ou pas dans une seule image de disquette.

Vous pouvez les installer ou non, mais il est important pour vous d'avoir certaines des capacités qu'ils offrent. La façon exacte de l'installation des outils que vous avez choisi devra être déterminé par vous.

Sfdisk et ed sont installés essentiellement par une copie depuis votre hôte. Strip est utilisé uniquement pour s'assurer qu'ils font le point minimum, même si l'installation de base de LFS devrait déjà les avoir passé sur cette commande. Utilisez les commandes suivantes:

strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/sbin/sfdisk /sbin/sfdisk
strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/bin/ed /bin/ed
chmod 555 /mnt/loop1/sbin/sfdisk /mnt/loop1/bin/ed

De même, gardez en tête vos limitations en espace disque, copiez tous les autres binaires et bibliothèques dont vous avez besoin sur l'image. Utilisez la commande ldd pour savoir de quelles bibliothèques vous aurez besoin pour utiliser ces exécutables. N'oubliez pas de lancer strip avant de les copier sur l'image du disque ram ou d'utiliser strip, comme ci-dessus, pour les "copier".

Configurer le répertoire lib

Une fois que vous avez installé tous les outils ci-dessus et y compris ceux que vous souhaitez, utilisez la commande ldd command, comme indiquée co-dessus, sur ceux qui n'ont pas été donné dans ce document. Si des bibliothèques supplémentaires sont nécessaires, ajoutez-les aux commandes de configuration montrées ci-dessous.

Si vous avez installé seulement ceux du document, les objets partagés nécessaires seront minimes. Vous pouvez les ajouter au disque ram avec:

strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/lib/libc.so.6 /lib/libc-2.3.3.so &&
strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/lib/ld-linux.so.2 /lib/ld-2.3.3.so &&
strip -p --strip-unneeded --remove-section=.comment \
    -o /mnt/loop1/lib/libdl.so.2 /lib/libdl-2.3.3.so &&
chmod 555 /mnt/loop1/lib/{libc.so.6,ld-linux.so.2,libdl.so.2}

Notez que les commandes ci-dessus modifient le nom des bibliothèques, supprimant le besoin des liens symboliques habituels. Si vous ajoutez des objets partagés supplémentaires, profitez des opportunités similaires mais faites attention aux problèmes qui pourraient se présenter.

Créer le fichier initrd compressé

Démontez le fichier loopback. Si vous utilisez l'option -o loop de la commande mount, le lien entre le périphérique loop et le fichier sera supprimé lorsque le démontage sera terminé. Omettez simplement le losetup -d /dev/loop1 de la séquence suivante. Le paramètre -9 est utilisé avec gzip pour compresser au maximum l'image. Pour s'assurer qu'elle tient sur la disquette, affichez la taille du fichier.

umount /mnt/loop1 &&
losetup -d /dev/loop1 &&  # Oubliez l'option -o loop de mount a été utilisé
gzip -9 < /tmp/rfloppy > /tmp/rootfs.gz
ls -l /tmp/rootfs.gz

Joindre l'image de dépannage et le disque ram initial sur une disquette

Maintenant, l'image de dépannage et le disque ram initial vont être écrit sur une disquette démarrable. Avant de le faire, calculez le nombre de blocs nécessaires pour l'image de dépannage et pour /tmp/rootfs.gz (le disque ram initial), individuellement, en divisant leur taille par 1024 et en ajoutant un s'il y a un reste. Additionnez ces deux résultats. Ils doivent avoir un total de maximum 1440 blocs. Si le résultat est plus important, ne vous inquiétez pas trop. Les modifications nécessaires pour créer un ensemble de deux disquettes sont présentées plus tard. Bien sûr, vous pouvez ré-examiner vos choix et essayer de diminuer soit le disque de dépannage soit l'image de disque ram initial.

Pour créer une disquette de dépannage, utilisant devfs, utilisez les commandes suivantes. Si vous utilisez la configuration du /dev statique, utilisez /dev/fd0 au lieu de /dev/floppy/0.

dd if=rescueimage of=/dev/floppy/0 bs=1k
rdev /dev/floppy/0 0,0
rdev -R /dev/floppy/0 0

Explication des commandes

rdev /dev/floppy/0 0,0: initialise le système de fichiers racine que le noyau utilisera au démarrage. Parce qu'il charge le disque ram initial, il configurera automatiquement le périphérique root. Donc, 0,0 lui donnera "sans valeur", indiquant au noyau de ne pas monter les autres périphériques. Certains donnent /dev/fd0 ou quelque chose de similaire. Mais, ceci a un effet seulement lorsque linuxrc (en fait busybox ) quitte et que les processus init normaux sont appelés. Comme cela n'est pas le cas ici et que la disquette n'est pas un système de fichiers valide, cela serait inutile ici. Un disque dur serait un meilleur choix si vous cherchez à relancer automatiquement le système après réparation. Comme busybox fournit la commande reboot, une initialisation automatique n'est pas nécessaire.

rdev -R /dev/floppy/0 0 initialisera les options de la racine à zéro. Elles n'ont pas d'utilité dans cette application.

La commande dd ci-dessus affichera quelques résultats du type

        480+1 records in
        480+1 records out

Dans cet exemple, l'image de dépannage (noyau) faisait une taille de 480+1 blocs. Assurez-vous que ce nombre, qui pourrait être différent pour vous, correspond à vos calculs ci-dessus. Vous avez besoin de calculer le "nombre magique" qui sera inséré dans l'image de dépannage. La valeur consiste en trois parties distinctes. Deux sont discutées ici. La troisième est abordée plus tard.

Les bits 0 - 10 contiendront la taille de l'image de dépannage en blocs que vous avez calculé ci-dessus et qui doit correspondre au résultat du dd. Le bit 14 (le 15è, qui est 2 puissant 14, soit 16,384) est un drapeau qui, initialisé à 1, indique au noyau que le disque ram initial doit être chargé. Donc, pour la disquette de dépannage, les deux nombres 16384 et 481 (ou quelque soit le bon nombre pour votre taille d'image de dépannage) sont ajoutés ensemble pour produire une valeur décimale, comme 16865. Cette valeur est insérée à sa bonne place dans l'image de dépannage par la commande rdev exécutée tout de suite après.

Insérez le "nombre magique" dans l'image de dépannage puis écrivez le système de fichiers racine juste après l'image de dépannage sur la disquette en exécutant les commandes suivantes avec les bons nombres insérés. Notez que le numéro de paramètre de seek doit être la taille, en blocs, de votre image de dépannage. Si vous utilisez la configuration du /dev statique, utilisez /dev/fd0 dans la commande ci-dessous, au lieu de /dev/floppy/0.

rdev -r /dev/floppy/0 16865
dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k seek=481

Dans cette commande, seek a été utilisé pour positionner le bloc suivant la fin de l'image de dépannage (480+1) et commencé l'écriture du système de fichiers racine sur la disquette.

Configurer un ensemble de deux disquettes de dépannage

Si vous ne pouvez pas vivre avec un système à seule disquette de dépannage, voici comment faire un système à deux disquettes. Notez que les possibilités infinies présentés par la disponibilité de linuxrc et d'autres composants ne sont pas adressées ici. Ici, vous utiliserez seulement la capacité du noyau à demander une seconde disquette contenant l'image du disque ram initial pour le charger.

Modifiez les instructions ci-dessus de la façon suivante. Tout d'abord, un nombre magique différent est nécessaire. Le quinzième bit est toujours nécessaire mais la taille de l'image du disque ram est remplacé par un zéro. Le troisième composant, qui n'a pas été discuté ci-dessus, est maintenant utilisé. C'est le seizième bit (bit 15) du nombre magique. Une fois activé, il indique au noyau de demander à l'utiliser d'insérer la disquette "root". Il charge ensuite l'image du disque ram initial à partir de cette disquette. Comme la taille de l'image de dépannage a été diminué à zéro, le noyau commence à charger à partir du bloc zéro (le premier) de la seconde disquette.

Le seizième bit (bit 15) représente 2 à la puissance 15, soit 32768. Donc le nouveau nombre magique est 32768 + 16384, ce qui vaut 49152. Cette valeur indique au noyau de réclamer puis de charger l'image du disque ram initiale à partir du premier bloc de la disquette insérée. Donc votre première modification concerne la commande d'écriture du nombre magique sur l'image de dépannage de la disquette.

rdev -r /dev/floppy/0 49152

Notez que l'image du disque ram initial n'est pas encore copiée sur la disquette. Supprimez la disquette de démarrage et insérez une autre disquette qui contiendra votre système de fichiers racine. Lancez cette commande modifiée (n'oubliez pas d'utiliser /dev/fd0 si vous n'utilisez pas devfs). Notez qu'aucun paramètre seek n'est utilisé.

dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k

Voici tout ce qu'il y avait à faire. Les possibilités à partir de là sont limitées seulement par votre imagination et par votre ténacité à poursuivre vos améliorations. Et par votre volonté de rechercher la documentation disponible. Un bon point de départ est le répertoire Documentation du répertoire des sources du noyau. Plus d'aide sont disponibles dans les astuces LFS (merci d'utiliser un miroir convenable) et au TLDP.