Page suivante Page précédente Table des matières
9. Exemples
9.1 Contenu des répertoires du disque
Ceci est le contenu des répertoires de mes disquettes racine et utilitaire. Ces listes sont uniquement fournies en tant qu'exemple des fichiers inclus pour créer un système fonctionnel. J'ai ajouté quelques notes là où cela semblait utile.
Contenu des répertoires du disque racine (ls -lR)
total 18 drwxr-xr-x 2 root root 1024 Jul 29 21:16 bin/ drwxr-xr-x 2 root root 9216 Jul 28 16:21 dev/ drwxr-xr-x 3 root root 1024 Jul 29 20:25 etc/ drwxr-xr-x 2 root root 1024 Jul 28 19:53 lib/ drwxr-xr-x 2 root root 1024 Jul 24 22:47 mnt/ drwxr-xr-x 2 root root 1024 Jul 24 22:47 proc/ drwxr-xr-x 2 root root 1024 Jul 28 19:07 sbin/ drwxr-xr-x 2 root root 1024 Jul 29 20:57 tmp/ drwxr-xr-x 4 root root 1024 Jul 29 21:35 usr/ drwxr-xr-x 3 root root 1024 Jul 28 19:52 var/ bin: total 713 -rwxr-xr-x 1 root bin 7737 Jul 24 22:16 cat* -rwxr-xr-x 1 root bin 9232 Jul 24 22:48 chmod* -rwxr-xr-x 1 root bin 8156 Jul 24 22:48 chown* -rwxr-xr-x 1 root bin 19652 Jul 24 22:48 cp* -rwxr-xr-x 1 root root 8313 Jul 29 21:16 cut* -rwxr-xr-x 1 root bin 12136 Jul 24 22:48 dd* -rwxr-xr-x 1 root bin 9308 Jul 24 22:48 df* -rwxr-xr-x 1 root root 9036 Jul 29 20:24 dircolors* -rwxr-xr-x 1 root bin 9064 Jul 24 22:48 du* -rwxr-x--- 1 root bin 69252 Jul 24 22:51 e2fsck* -rwxr-xr-x 1 root bin 5361 Jul 24 22:48 echo* -rwxr-xr-x 1 root bin 5696 Jul 24 22:16 hostname* -rwxr-xr-x 1 root bin 6596 Jul 24 22:49 kill* -rwxr-xr-x 1 root bin 10644 Jul 24 22:17 ln* -rwxr-xr-x 1 root bin 13508 Jul 24 22:17 login* -rwxr-xr-x 1 root bin 26976 Jul 24 22:17 ls* -rwxr-xr-x 1 root bin 7416 Jul 24 22:49 mkdir* -rwxr-x--- 1 root bin 34596 Jul 24 22:51 mke2fs* -rwxr-xr-x 1 root bin 6712 Jul 24 22:49 mknod* -rwxr-xr-x 1 root bin 20304 Jul 24 22:17 more* -rwxr-xr-x 1 root bin 24704 Jul 24 22:17 mount* -rwxr-xr-x 1 root bin 12464 Jul 24 22:17 mv* -rwxr-xr-x 1 root bin 20829 Jul 24 22:50 ps* -rwxr-xr-x 1 root bin 9424 Jul 24 22:50 rm* -rwxr-xr-x 1 root bin 4344 Jul 24 22:50 rmdir* -rwxr-xr-x 1 root root 299649 Jul 27 14:12 sh* -rwxr-xr-x 1 root bin 9853 Jul 24 22:17 su* -rwxr-xr-x 1 root bin 380 Jul 27 14:12 sync* -rwxr-xr-x 1 root bin 13620 Jul 24 22:17 umount* -rwxr-xr-x 1 root root 5013 Jul 29 20:03 uname* dev: total 0 lrwxrwxrwx 1 root root 10 Jul 24 22:34 cdrom -> /dev/sbpcd crw--w--w- 1 root tty 4, 0 Jul 24 21:49 console brw-rw---- 1 root floppy 2, 0 Apr 28 1995 fd0 lrwxrwxrwx 1 root root 4 Jul 24 22:34 ftape -> rft0 crw-rw-rw- 1 root sys 10, 2 Jul 18 1994 inportbm crw-rw---- 1 root kmem 1, 2 Jul 28 16:21 kmem crw-rw---- 1 root kmem 1, 1 Jul 18 1994 mem lrwxrwxrwx 1 root root 4 Jul 24 22:34 modem -> cua0 lrwxrwxrwx 1 root root 4 Jul 24 22:34 mouse -> cua1 crw-rw-rw- 1 root sys 1, 3 Jul 18 1994 null brw-rw---- 1 root disk 1, 1 Jul 18 1994 ram crw-rw---- 1 root disk 27, 0 Jul 18 1994 rft0 brw-rw---- 1 root disk 25, 0 Jul 19 1994 sbpcd ** Je n'ai inclus les périphériques que pour les partitions SCSI que *** j'utilise. Si vous utilisez de l'IDE, utilisez /dev/hdxx à la place. brw-rw---- 1 root disk 8, 0 Apr 29 1995 sda brw-rw---- 1 root disk 8, 6 Apr 29 1995 sda6 brw-rw---- 1 root disk 8, 7 Apr 29 1995 sda7 brw-rw---- 1 root disk 8, 8 Apr 29 1995 sda8 lrwxrwxrwx 1 root root 7 Jul 28 12:56 systty -> console *** ce lien de systty vers console est nécessaire crw-rw-rw- 1 root tty 5, 0 Jul 18 1994 tty crw--w--w- 1 root tty 4, 0 Jul 18 1994 tty0 crw--w---- 1 root tty 4, 1 Jul 24 22:33 tty1 crw--w---- 1 root tty 4, 2 Jul 24 22:34 tty2 crw--w--w- 1 root root 4, 3 Jul 24 21:49 tty3 crw--w--w- 1 root root 4, 4 Jul 24 21:49 tty4 crw--w--w- 1 root root 4, 5 Jul 24 21:49 tty5 crw--w--w- 1 root root 4, 6 Jul 24 21:49 tty6 crw-rw-rw- 1 root tty 4, 7 Jul 18 1994 tty7 crw-rw-rw- 1 root tty 4, 8 Jul 18 1994 tty8 crw-rw-rw- 1 root tty 4, 9 Jul 19 1994 tty9 crw-rw-rw- 1 root sys 1, 5 Jul 18 1994 zero etc: total 20 -rw-r--r-- 1 root root 2167 Jul 29 20:25 DIR_COLORS -rw-r--r-- 1 root root 20 Jul 28 12:37 HOSTNAME -rw-r--r-- 1 root root 109 Jul 24 22:57 fstab -rw-r--r-- 1 root root 271 Jul 24 22:21 group -rw-r--r-- 1 root root 2353 Jul 24 22:27 inittab -rw-r--r-- 1 root root 0 Jul 29 21:02 issue -rw-r--r-- 1 root root 2881 Jul 28 19:38 ld.so.cache *** De nombreuses choses ne marchent pas au démarrage si ld.so.cache *** est absent, mais vérifiez que ldconfig est présent et lancé depuis *** rc.x pour le mettre à jour. -rw-r--r-- 1 root root 12 Jul 24 22:22 motd -rw-r--r-- 1 root root 606 Jul 28 19:25 passwd -rw-r--r-- 1 root root 1065 Jul 24 22:21 profile drwxr-xr-x 2 root root 1024 Jul 29 21:01 rc.d/ -rw-r--r-- 1 root root 18 Jul 24 22:21 shells -rw-r--r-- 1 root root 774 Jul 28 13:43 termcap -rw-r--r-- 1 root root 126 Jul 28 13:44 ttys -rw-r--r-- 1 root root 0 Jul 24 22:47 utmp etc/rc.d: total 5 *** Je ne me suis pas encombré des scripts pour l'extinction - tout *** tourne dans un disque mémoire, qui ne présente que peu d'intérêt *** pour une procédure d'extinction (shutdown) -rwxr-xr-x 1 root root 1158 Jul 24 22:23 rc.K* -rwxr-xr-x 1 root root 1151 Jul 28 19:08 rc.M* -rwxr-xr-x 1 root root 507 Jul 29 20:25 rc.S* lib: total 588 *** J'ai un système ELF, et donc j'inclus mon chargeur ELF *** ld-linux.so. Si vous êtes toujours en a.out, vous avez besoin de *** ld.so. Utilisez la commande file pour savoir de quelles *** bibliothèques vous avez besoin. lrwxrwxrwx 1 root root 17 Jul 24 23:36 ld-linux.so.1 -> ld-linux.so.1.7.3* -rwxr-xr-x 1 root root 20722 Aug 15 1995 ld-linux.so.1.7.3* lrwxrwxrwx 1 root root 13 Jul 24 23:36 libc.so.5 -> libc.so.5.0.9* -rwxr-xr-x 1 root root 562683 May 19 1995 libc.so.5.0.9* *** Il faut inclure libtermcap lrwxrwxrwx 1 root root 19 Jul 28 19:53 libtermcap.so.2 -> libtermcap.so.2.0.0* -rwxr-xr-x 1 root root 11360 May 19 1995 libtermcap.so.2.0.0* mnt: total 0 proc: total 0 sbin: total 191 *** J'utilise Slackware, qui utilise agetty. De nombreux systèmes *** utilisent getty. Vérifiez /etc/inittab pour savoir lequel il *** utilise. Notez bien que vous avez besoin de (a)getty et de login *** pour espérer pouvoir faire quelque chose. -rwxr-xr-x 1 root bin 11309 Jul 24 22:54 agetty* -rwxr-xr-x 1 root bin 5204 Jul 24 22:19 halt* *** Nécessaire pour démarrer -rwxr-xr-x 1 root bin 20592 Jul 24 22:19 init* -rwxr-xr-x 1 root root 86020 Jul 28 19:07 ldconfig* -rwxr-xr-x 1 root bin 5329 Jul 27 14:10 mkswap* -rwxr-xr-x 1 root root 5204 Jul 24 22:20 reboot* -rwxr-xr-x 1 root bin 12340 Jul 24 22:20 shutdown* -rwxr-xr-x 1 root root 5029 Jul 24 22:20 swapoff* -rwxr-xr-x 1 root bin 5029 Jul 24 22:20 swapon* -rwxr-xr-x 1 root root 20592 Jul 27 18:18 telinit* -rwxr-xr-x 1 root root 7077 Jul 24 22:20 update* tmp: total 0 usr: total 2 drwxr-xr-x 2 root root 1024 Jul 29 21:00 adm/ drwxr-xr-x 2 root root 1024 Jul 29 21:16 lib/ usr/adm: total 0 usr/lib: total 0 var: total 1 *** Un certain nombre d'erreurs apparurent jusqu'à ce que j'inclus *** ceci et le code de /etc/rc.S pour initialiser /var/run/utmp, mais *** ceci ne s'appliquera pas forcément à votre système. drwxr-xr-x 2 root root 1024 Jul 28 19:52 run/ var/run: total 0
Contenu des répertoires du disque utilitaire (ls -lR)
total 579 -rwxr-xr-x 1 root root 42333 Jul 28 19:05 cpio* -rwxr-xr-x 1 root root 103560 Jul 29 21:31 elvis* -rwxr-xr-x 1 root root 56401 Jul 28 19:06 find* -rw-r--r-- 1 root root 128254 Jul 28 19:03 ftape.o -rwxr-xr-x 1 root root 64161 Jul 29 20:47 grep* -rwxr-xr-x 1 root root 45309 Jul 29 20:48 gzip* -rwxr-xr-x 1 root root 23560 Jul 28 19:04 insmod* -rwxr-xr-x 1 root root 118 Jul 28 19:04 lsmod* lrwxrwxrwx 1 root root 5 Jul 28 19:04 mt -> mt-st* -rwxr-xr-x 1 root root 9573 Jul 28 19:03 mt-st* lrwxrwxrwx 1 root root 6 Jul 28 19:05 rmmod -> insmod* -rwxr-xr-x 1 root root 104085 Jul 28 19:05 tar* lrwxrwxrwx 1 root root 5 Jul 29 21:35 vi -> elvis*
9.2 Scripts shell pour construire des disquettes
Ces scripts shell sont fournis uniquement à titre d'exemple. Je les utilise sur mon système pour créer des disquettes de secours. Vous pourrez les trouver utiles, mais dans ce cas, lisez les instructions attentivement - par exemple, si vous spécifiez le mauvais périphérique de pagination, vous retrouverez votre système de fichiers racine méthodiquement et définitivement effacé... faites donc bien attention à la configuration avant de les utiliser !
L'avantage de ces scripts est qu'ils fournissent un moyen rapide de créer un ensemble de disques de secours, en effectuant les taches suivantes :
- copiez un noyau sur un disque d'amorce, et configurez-le grâce à
rdev, comme expliqué précédemment.- configurez
mkrootpour votre système et créez un disque racine. Utilisez les exemples de contenus ci-dessus comme guide pour savoir quoi inclure.- utilisez
mkutilpour remplir un ou plusieurs disques utilitaires avec vos programmes favoris.Il y a deux scripts shell :
mkroot- construit une disquette racine ou amorce/racine.mkutil- construit une disquette utilitaire.Tous deux sont actuellement configurés pour être lancés depuis le répertoire père de
boot_disketutil_disk, chacun d'entre eux contenant tout ce qui doit être copié sur sa disquette. Notez que ces scripts shell NE CONFIGURENT PAS automatiquement, ni ne copient tous les fichiers pour vous - vous devez choisir vous-même quels fichiers sont nécessaires, créer les répertoires et copier les fichiers dans ces répertoires. Les scripts shell ne sont que des exemples qui copient le contenu de ces répertoires. Notez aussi que ce sont des scripts primitifs qui ne sont pas destinés à des utilisateurs novices.Ces scripts contiennent tous deux des variables de configuration au début qui permettent de les configurer facilement pour fonctionner n'importe où. Tout d'abord, configurez les répertoires modèles et copiez dedans tous les fichiers requis. Pour savoir quels répertories et fichiers prendre, jetez un coup d'oeil aux exemples de contenus dans les sections précédentes.
Vérifiez les variables de configuration dans les scripts shell et modifiez les en fonction de vos besoins avant de lancer les scripts.
mkroot - Fabriquer une disquette racine
# mkroot : fabrication d'un disque racine - crée une disquette racine # en construisant un système de fichiers dessus, puis la # monte et y copie les fichiers nécessaires d'après un modèle. # Note : le modèle d'après lequel la copie est effectuée doit # d'abord être mis en place, après quoi vous pouvez modifier # les variables de configuration ci-dessous pour correspondre # à votre système. # # Utilisation : mkroot [ -d swap | ram ] # où swap demande d'utiliser $SWAPDEV comme périphérique de # pagination, et ram demande d'utiliser le périphérique du # disque mémoire $RAMDISKDEV # Copyright (c) Graham Chapman 1996. All rights reserved. # Permission is granted for this material to be freely # used and distributed, provided the source is acknowledged. # No warranty of any kind is provided. You use this material # at your own risk. # Variables de configuration - adaptez les valeurs à votre système # #### Indiquez le périphérique où construire le système de fichiers #### racines. Un disque mémoire est plus sûr - la zone de pagination #### peut convenir si vous avez beaucoup de mémoire libre. Si Linux ne #### peut pas paginer, les choses se gâtent. USEDEVICE="ramdisk" # indiquez "ramdisk" (pour un disque mémoire) # ou "swap" (pour la zone de pagination) RAMDISKDEV="/dev/ram" # périphérique du disque mémoire <==== à # changer si vous utilisez "ramdisk" SWAPDEV="/dev/sda7" # périphérique de pagination <==== à # changer si vous utilisez "swap" FSBLOCKS=3072 # taille souhaitée du système de fichiers, # en blocs # #### Indiquez le répertoire dans lequel vous avez configuré votre #### modèle de disque racine. ROOTDISKDIR="./root_disk" # répertoire du disque racine MOUNTPOINT="/mnt" # point de montage temporaire pour la # disquette DISKETTEDEV="/dev/fd0" # périphérique de la disquette LOGFL="`pwd`/mkroot.log" # nom du fichier de log TEMPROOTFS="/tmp/mkrootfs.gz" # fichier temporaire pour le système de # fichiers compressé # Fin des variables de configuration # Variables internes ROOTDISKDEV= case $USEDEVICE in swap|ramdisk) :;; *) echo "Valeur invalide pour la variable USEDEVICE" exit;; esac clear echo " ***************** A T T E N T I O N ****************** Utilisez ce script avec précautions. Si vous ne comprenez pas son utilisation, quittez le programme MAINTENANT !" if [ "$USEDEVICE" = "swap" ] then ROOTDISKDEV=$SWAPDEV echo -e "\nCe script va temporairement retirer la zone de pagination $SWAPDEV" echo "et utiliser son espace pour construire un système de fichiers" echo "compressé à partir des fichiers situés dans l'arborescence sous" echo "$ROOTDISKDIR. Pour que cela soit sans danger, vous devez avoir 8 Mo" echo "ou plus de mémoire, et vous devriez passer dans le mode utilisateur unique" echo "grâce à 'init 1'." echo -e "\nSi vous avez utilisé un disque mémoire depuis le dernier redémarrage," echo "redémarrez MAINTENANT avant d'utiliser ce script." echo -e "\nSi ce script échoue, vous pouvez ne plus avoir de partition de pagination." echo "Utilisez 'free' et vérifier la taille totale pour voir si elle est" echo "correcte. Si la partition de pagination $SWAPDEV manque, effectuez" echo "les opérations suivantes :" echo " umount $MOUNTPOINT" echo " mkswap $SWAPDEV" echo " swapon $SWAPDEV" echo "pour restaurer la partition de pagination $SWAPDEV." else ROOTDISKDEV=$RAMDISKDEV echo -e "\nCe script va utiliser un disque mémoire de $FSBLOCKS ko. Pour" echo "le faire en toute sécurité, vous devez avoir au moins 8 Mo de mémoire." echo "Si vous n'avez que 8 Mo de mémoire, vous devriez vous assurer que rien" echo "d'autre ne tourne sur la machine." echo -e "\nQuand le script est terminé, le disque mémoire sera toujours présent," echo "et vous devrez donc redémarrer pour récupérer la mémoire allouée au" echo "disque mémoire." fi echo -e " Voulez-vous continuer (o/n)? \c" read ans if [ "$ans" != "O" -a $ans != "o" ] then echo "Pas de confirmation - abandon" exit fi echo "Démarrage de mkroot à `date`" > $LOGFL if [ "$USEDEVICE" = "swap" ] then echo "Démontage du périphérique de pagination $SWAPDEV" | tee -a $LOGFL swapoff $SWAPDEV >> $LOGFL 2>&1 fi echo Réinitialisation du périphérique $ROOTDISKDEV" | tee -a $LOGFL dd if=/dev/zero of=$ROOTDISKDEV bs=1024 count=$FSBLOCKS >> $LOGFL 2>&1 if [ $? -ne 0 ] then echo "Réinitialisation par dd de $ROOTDISKDEV ratée" | tee -a $LOGFL exit 1 fi echo "Création du système de fichiers sur le périphérique $ROOTDISKDEV" | tee -a $LOGFL mke2fs -m0 $ROOTDISKDEV $FSBLOCKS >> $LOGFL 2>&1 echo "Montage du système de fichiers $ROOTDISKDEV sur $MOUNTPOINT" | tee -a $LOGFL mount -t ext2 $ROOTDISKDEV $MOUNTPOINT >> $LOGFL 2>&1 if [ $? -ne 0 ] then echo "mount a échoué" exit 1 fi # Copie des répertoires contenant les fichiers echo "Copie des fichiers depuis $ROOTDISKDIR vers $MOUNTPOINT" | tee -a $LOGFL currdir=`pwd` cd $ROOTDISKDIR find . -print | cpio -dpumv $MOUNTPOINT >> $LOGFL 2>&1 if [ $? -ne 0 ] then echo "cpio a échoué." cd $currdir exit 1 fi cd $currdir fssize=`du -sk $MOUNTPOINT|cut -d" " -f1` echo "La taille du système de fichiers racine non-compressé est $fssize ko" | tee -a $LOGFL echo "Démontage du système de fichiers de $ROOTDISKDEV" | tee -a $LOGFL umount $MOUNTPOINT >> $LOGFL 2>&1 echo "Compression du système de fichiers de $ROOTDISKDEV dans $TEMPROOTFS. Cela peut prendre quelques minutes..." | tee -a $LOGFL # Pas la peine d'utiliser gzip -9 ici - il prend deux fois plus de # temps, et ne sauve que moins d'1 % sur mon disque racine... dd if=$ROOTDISKDEV bs=1024 count=$FSBLOCKS 2>>$LOGFL | gzip -c > $TEMPROOTFS fssize=`du -k $TEMPROOTFS|cut -d" " -f1` echo "La taille du système de fichiers racine compressé est $fssize ko" | tee -a $LOGFL echo -e "Insérez la disquette dans $DISKETTEDEV et appuyez sur une touche *** Attention : toute donnée sur la disquette sera effacée !\c" read ans echo "Copie du système de fichiers compressé de $TEMPROOTFS vers $DISKETTEDEV" | tee -a $LOGFL dd if=$TEMPROOTFS of=$DISKETTEDEV >>$LOGFL 2>&1 if [ $? -ne 0 ] then echo "La copie a échoué." exit 1 fi if [ "$USEDEVICE" = "swap" ] then echo "Réinitialisation du périphérique de pagination $SWAPDEV" | tee -a $LOGFL mkswap $SWAPDEV >> $LOGFL 2>&1 echo "Démarrage de la pagination sur le périphérique $SWAPDEV" | tee -a $LOGFL swapon $SWAPDEV >> $LOGFL 2>&1 fi echo "Destruction de $TEMPROOTFS" | tee -a $LOGFL rm $TEMPROOTFS echo "mkroot terminé à `date`" >> $LOGFL echo "Création de la disquette racine terminée - lisez le fichier de log $LOGFL"
mkutil - Fabriquer une disquette utilitaire
# mkutil : fabrication d'une disquette utilitaire - crée une disquette # utilitaire en construisant un système de fichiers dessus, # puis en le montant et en copiant dessus les fichiers requis # d'après un modèle. # Note : le modèle d'après lequel sont copiés les fichiers # doit être configuré d'abord, après quoi vous pouvez changer # les variables de configuration ci-dessous pour correspondre # à votre système. # Copyright (c) Graham Chapman 1996. All rights reserved. # Permission is granted for this material to be freely # used and distributed, provided the source is acknowledged. # No warranty of any kind is provided. You use this material # at your own risk. # Variables de configuration ... UTILDISKDIR=./util_disk # nom du répertoire contenant le modèle MOUNTPOINT=/mnt # point de montage temporaire pour la # disquette DISKETTEDEV=/dev/fd0 # nom du périphérique du lecteur de disquette echo $0: création d'une disquette utilitaire echo Attention : toute donnée présente sur la disquette sera écrasée ! echo Insérez une disquette dans $DISKETTEDEV et appuyez sur une touche ... read anything mke2fs $DISKETTEDEV if [ $? -ne 0 ] then echo mke2fs a échoué exit fi # Tout type de système de fichiers peut convenir ici mount -t ext2 $DISKETTEDEV $MOUNTPOINT if [ $? -ne 0 ] then echo mount a échoué exit fi # Copie des répertoires contenant les fichiers cp -dpr $UTILDISKDIR/* $MOUNTPOINT umount $MOUNTPOINT echo Disquette utilitaire créée
Page suivante Page précédente Table des matières