Français
Anglais

Documentations
Programmes

Liens
Divers

Comment ce site est généré

Retour à la page principale




Valid HTML 4.01!

Valid CSS!

Best Viewed With Any Browser

Créer sa propre distribution Linux tenant sur une ou deux disquettes

Pré-requis

Pour utiliser creatux.sh, il faut être root, avoir au moins 8 Mo de mémoire vive, et avoir compilé de noyau avec le périphérique loopback (ce qui est la cas de la plupart des noyaux) :

Block devices  --->
<*> Loop device support (CONFIG_BLK_DEV_LOOP)

Il faut avoir également le périphérique de boucle (/dev/loop0 ou /dev/loop1). Si ce n'est pas le cas, il faut les créer :

# mknod /dev/loop0 b 7 0
#

Comment utiliser creatux.sh

En tant que root :

# ./creatux.sh
low-mem/ACOPIER trouve
Disquette..................... /dev/fd0 (1440 Ko)
Noyau......................... 2.2.16/bzImage-disk-net-modules-ppp 2.2.16
Fichiers systeme.............. low-mem
Point de montage temporaire... /mnt
Taille du ramdisk............. 4096
Fichier lance par init........ /etc/init.d/rcS
Sur une seule disquette
 
Creation du systeme de fichiers.
Copie des fichiers systeme..........
Liste des fichiers copies dans ./rootfs.fic
Creation de l'image.
Taille du noyau : 534953
Taille du systeme de fichier : 854229
Il reste 939607 pour le systeme de fichiers -> OK.
85378 octets de libre
 
Mettre une disquette...
Attention ! Toute les donnees seront effacees
Appuyer sur [Entree] pour continuer.

#

On voit ici que tous les fichiers contenus dans le répertoire low-mem vont être copiés sur la disquette, avec comme noyau l'image 2.2.16/bzImage-disk-net-modules-ppp. Le fichier low-mem/ACOPIER peut être édité pour spécifier les fichiers système à copier :

#
# Fichiers
#
 
ListeFichiers="etc/protocols etc/host.conf etc/services etc/resolv.conf \
etc/nsswitch.conf usr/share/terminfo/l/linux etc/terminfo/l/linux"
 
#
# Peripheriques
#
# Au minimun il faut des peripheriques :
# ListePeriph="/dev/console /dev/kmem /dev/mem /dev/null /dev/ram0 /dev/tty1 \
# /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty0"
# dev/ptys* et /dev/ppp pour pppd
 
ListePeriph="dev/fd* dev/hd* dev/mem dev/ppp dev/rtc dev/full dev/kmem \
dev/null dev/ram* dev/tty* dev/zero dev/console dev/audio \
dev/cdrom dev/ippp0 dev/mixer dev/modem dev/urandom dev/ptys*"

#
# Librairies qui ne sont pas affichees par un ldd
#
# * libresolv.so.2 et libnss_dns.so.2 pour que les programmes comme ping
#   ou telnet resolvent un nom (ie. ping tarsier execute ping sur l'adresse
#   IP de tarsier)
# * libnss_files.so.2 pour ftp
# * libm.so.6, libnsl.so.1 et libncurses.so.4 pour w3m
# * libpam.so.0, libdl.so.2 et libutil.so.1 pour pppd
# * libnss_files.so.2, libnss_compat.so.2 et libnsl.so pour voir afficher les
# noms d'utilisateurs
# et de groupe au lieu du numero par un ls -l ou id
# * ... (liste a completer)
#
 
ListeLibrairies="libresolv.so.2 libnss_dns.so.2 libnss_files.so.2 \
libnss_compat.so.2 libnsl.so"

#
# Repertoires (avec ou sans le '/' au debut, c'est pareil)
#
 
ListeRepertoires="mnt root proc tmp var/log var/run floppy cdrom home \
pub/incoming"
 
#
# Modules pour le noyau (en chemin relatif par rapport au repertoire
# /lib/modules//
# ou  est la version du noyau mis sur la disquette
#
# * net/ne2k-pci pour une carte Ethernet NE2000
# * net/ppp_deflate pour utiliser PPP comme client
# ppp_generic et ppp_synctty a partir de 2.3.13
# * net/plip pour utiliser PLIP
# * ... (liste a completer)
#
 
ListeModules="net/ne2k-pci"

#
# Les utilisateurs a rajouter
#
 
Utilisateurs="mdecore piou"

Créer et utiliser la disquette addon

Dans le sous répertoire addon lancer le script make-addon.sh :

$ make-addon.sh
fh-rad.tar
ppp-2.2.16.tar
ppp.tar
w3m.tar
install-archive.sh
Mettre une disquette...
 
$

Par défaut, toutes les archives .tar seront utilisées, mais on peut specifier en argument quelles archives on veut inclure :

 
$ make-addon.sh ppp-2.2.16.tar w3m.tar
ppp-2.2.16.tar
w3m.tar
install-archive.sh
Mettre une disquette...

935+1 enregistrements lus.
935+1 enregistrements écrits.
$

L'archive génerée s'appelle addon.tar.bz2. On peut l'utiliser à partir de la disquette génerée en tapant à partir de la disquette d'installation :

 
# encore.sh
Inserer la disquette
 
Decompression des fichiers...
ppp-2.
w3m.
#

Sinon on peut récuperer l'archive via NFS. Pour cela, il faut configurer le serveur NFS en mettant dans le fichier /etc/exports une ligne comme :

/public 192.168.1.0/255.255.255.0(rw,no_root_squash)

si notre mini distribution se voit attribuer une adresse IP commencant par 192.168.1. Relancer le serveur NFS (/sbin/init.d/nfsserver restart pour la SuSE), copier le fichier addon.tar.bz2 dans le repertoire /public/creatux du serveur NFS, et lancer de la mini distribution :

 
# encore.sh -net tarsier:/public/creatux &
#

tarsier est le nom du serveur NFS.

Exemples d'utilisation

# ./creatux.sh -h
Usage : creatux.sh [ -i <fic sys> ] [ -f <periph> ] [ -k <kernel> ]
                  [ -r <point de montage> ] [ -d ] [ -c <count> ]
                  [ -s <fic init> ] [ -t <font> ] [ -a <taille disquette> ]
                  [ -l ]
 
Exemple :
./creatux.sh -f /dev/fd1 -k /usr/src/linux/arch/i386/boot/bzImage
            -i ~mdecore/parted/ -r /tmp/sys -d -s /etc/init.d/rcS
            -t /usr/lib/kbd/consolefonts/m.fnt -d 1722
#

1 - Système minimum

Le système minimum ne comporte qu'un shell (/bin/sh). Ce shell peut être un shell compact comme ash.

Il faut rajouter une librairie, la librairie C et son chargeur (libc.so.6 et ld-linux.so.2) :

$ ldd /mnt/bin/sh
        libc.so.6 => /lib/libc.so.6 (0x4001a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$ ls -R
.:
bin  etc  lib  sbin
 
./bin:
sh
 
./etc:
 
./lib:
ld-2.1.3.so  ld-linux.so.2  libc.so.6 # ld-linux.so.2 -> ld-2.1.3.so
 
./sbin:
$ mkdir /mnt/dev
$ cp -a /dev/console /dev/kmem /dev/mem /dev/null /dev/ram0 /dev/tty1 /mnt/dev
$ mkdir /mnt/etc
$ echo "/lib" > /mnt/etc/ld.so.conf
$

Pour l'utiliser :

# chroot /mnt/ /bin/sh
# echo * # * =  car clavier US !
bin cdrom dev etc floppy home lib lost+found mnt proc root sbin tmp var
# cd /lib # / = ! car clavier US !
# pwd
/lib
# echo *
ld-2.1.3.so ld-linux.so.2 libc.so.6
# exit
#

Taille du systeme de fichier : 453140 octets.

2 - Utiliser busybox

Editer Config.h, compiler.

$ cp /public/busybox-0.60.0/busybox bin/
$ mkdir proc
$ echo "proc /proc proc defaults" > etc/fstab
$ mkdir -p usr/bin usr/sbin

Sur la machine exécutant notre mini distribution ('-' <-> ')', car clavier US) :

# /bin/busybox mount -a
# /bin/busybox --install
#

3 - Utiliser init

Faire les liens :

$ ./liens
$ cd sbin/
$ ln -s ../bin/busybox init
$ mkdir etc/init.d
$ cat > etc/init.d/rcS # script lu par defaut par la version busybox de init
#!/bin/sh
/bin/mount -a   
$ chmod +x etc/init.d/rcS

Rajouter /dev/tty2 /dev/tty3 /dev/tty4 (au moins 4 consoles demandées par init).

4 - Configurer un clavier français

5 - Utiliser getty

Appellé via /etc/inittab, il permet d'avoir un login par console. Se trouve dans tinylogin. Editer Config.h, compiler.

$ cp /public/tinylogin-0.80/tinylogin bin/
$ ./liens
$ cat > etc/inittab
::sysinit:/etc/init.d/rcS
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
::ctrlaltdel:umount -a -r & reboot
$ ldd bin/tinylogin
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x4001a000)
        libc.so.6 => /lib/libc.so.6 (0x40047000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$ cp -a /lib/libcrypt.so.1 lib/
$ echo "root::0:0:root:/root:/bin/sh" > etc/passwd # root sans mot de passe
$ echo "root:x:0:" > etc/group
$ mkdir root

Taille du système de fichier : 683122 octets.

6 - Configurer le réseau

$ cat >> etc/init.d/rcS
ifconfig lo 127.0.0.1 up
ifconfig eth0 192.168.1.3 up
hostname demo-disk
$

7 - Utiliser le resolveur de noms

Mettre les adresses des serveurs DNS dans le fichier /etc/resolv.conf :

$ cat /etc/resolv.conf
search chez.moi
nameserver 192.168.1.4
$

et rajouter les librairies :


Page maintenue par Mathieu DECORE
Dernière mise à jour : 19/01/04 - © mdecore@linux-france.org 2004