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.
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 peripheriques que pour les partitions SCSI que
*** j'utilise. Si vous utilisez de l'IDE, utilisez /dev/hdxx a 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 necessaire
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 demarrage si ld.so.cache
*** est absent, mais verifiez que ldconfig est present et lance depuis
*** rc.x pour le mettre a 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 encombre des scripts pour l'extinction_- tout
*** tourne dans un disque memoire, qui ne presente que peu d'interet
*** pour une procedure 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 systeme ELF, et donc j'inclus mon chargeur ELF
*** ld-linux.so. Si vous etes toujours en a.out, vous avez besoin de
*** ld.so. Utilisez la commande file pour savoir de quelles
*** bibliotheques 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 systemes
*** utilisent getty. Verifiez /etc/inittab pour savoir lequel il
*** utilise. Notez bien que vous avez besoin de (a)getty et de login
*** pour esperer 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*
*** Necessaire pour demarrer
-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'a ce que j'inclus
*** ceci et le code de /etc/rc.S pour initialiser /var/run/utmp, mais
*** ceci ne s'appliquera pas forcement a votre systeme.
drwxr-xr-x 2 root root 1024 Jul 28 19:52 run/
var/run:
total 0
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*
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 :
rdev
, comme expliqué précédemment.mkroot
pour votre système et créez un disque
racine. Utilisez les exemples de contenus ci-dessus comme guide pour
savoir quoi inclure.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 : 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 : 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
Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre