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 mkroot pour votre système et créez un disque racine. Utilisez les exemples de contenus ci-dessus comme guide pour savoir quoi inclure.
  • utilisez mkutil pour 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_disk et util_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