Maintenant que les principes g�n�raux ont �t� pr�sent�s, la m�thode pour cr�er le p�riph�rique loopback peut �tre expliqu�e.
La cr�ation du p�riph�rique loopback va n�cessiter un certain nombre de choses.
Le point le plus important est l'acc�s � un syst�me Linux d�j� install�. Ce point est n�cessaire car le p�riph�rique loop ne peut �tre cr�� que sous Linux. Cela signifie qu'il ne sera pas possible d'installer un syst�me � partir de rien. Le syst�me Linux que vous utilisez devra �tre capable de compiler un noyau.
Une fois le p�riph�rique loopback cr��, il repr�sentera un gros fichier. J'ai utilis� un fichier de 80 Mo, mais si c'�tait suffisant pour un terminal X, �a ne sera sans doute pas suffisant pour une utilisation plus importante. Ce fichier doit �tre copi� sur la partition DOS, donc un r�seau ou beaucoup de disquettes seront mis a contribution.
Vous aurez besoin des logiciels suivants :
LOADLIN
version 1.6 ou sup�rieuremount
qui supporte les p�riph�riques loopbackTout ceci devrait �tre disponible en standard sur des installations r�centes de Linux.
J'ai cr�� le p�riph�rique loopback avec le noyau Linux version 2.0.31, d'autres versions devraient faire l'affaire, mais elles devront avoir au moins les options list�es ci-dessous configur�es.
Les options du noyau que vous devrez s�lectionner sont les suivantes :
CONFIG_BLK_DEV_RAM
).CONFIG_BLK_DEV_INITRD
).CONFIG_BLK_DEV_LOOP
).CONFIG_FAT_FS
).CONFIG_MSDOS_FS
).Les deux premi�res sont le disque virtuel lui-m�me et le disque virtuel initial. La suivante est le support pour les p�riph�riques loopback. Les deux derni�res sont le support pour les syst�mes de fichiers msdos, qui est requis pour monter des partitions DOS.
La compilation d'un noyau sans modules est la plus simple, mais si vous voulez utiliser les modules �a devrait �tre possible, bien que je ne l'aie pas essay�. Si vous utilisez des modules, vous devez configurer les options pr�c�dentes dans le noyau, et non comme des modules.
Le code source du noyau lui-m�me devra �tre modifi� d'une fa�on tr�s simple. La version 2.0.34 du noyau telle que fournie ne permet pas au p�riph�rique loopback d'�tre utilis� comme racine. Une tr�s petite modification du noyau peut rendre ceci possible.
Le fichier /init/main.c
a juste besoin qu'on lui ajoute une seule
ligne comme montr� dans la version modifi�e ci-dessous. La ligne qui dit
"loop", 0x0700
est celle qui a �t� ajout�e.
static void parse_root_dev(char * line)
{
int base = 0;
static struct dev_name_struct {
const char *name;
const int num;
} devices[] = {
{ "nfs", 0x00ff },
{ "loop", 0x0700 },
{ "hda", 0x0300 },
...
{ "sonycd", 0x1800 },
{ NULL, 0 }
};
...
}
Une fois le noyau configur�, il devra �tre compil� pour produire une fichier
zImage
(make zImage
). Ce fichier devrait �tre arch/i386/boot/zImage
une fois compil�.
Le disque virtuel initial est simplement cr�e comme un p�riph�rique loopback
au d�part. Vous devrez faire ceci en tant que root. Les commandes que vous devez
ex�cuter sont list�es ci dessous, elles supposent �tre lanc�es depuis le r�pertoire
principal de root (/root
).
mkdir /root/initrd
dd if=/dev/zero of=initrd.img bs=1k count=1024
mke2fs -i 1024 -b 1024 -m 5 -F -v initrd.img
mount initrd.img /root/initrd -t ext2 -o loop
cd initrd
[cr�ez les fichiers]
cd ..
umount /root/initrd
gzip -c -9 initrd.img > initrdgz.img
Il y a un certain nombre d'�tapes, mais on peut les d�crire comme ceci.
Contenu du disque virtuel initial
Les fichiers dont vous avez besoin sur le disque virtuel repr�sentent le minimum n�cessaire pour pouvoir d'ex�cuter une commande.
/linuxrc
Le fichier qui est lanc� pour monter le syst�me de
fichiers msdos (voir plus bas)./lib/*
L'�diteur de liens dynamiques et les librairies dont les
programmes ont besoin./etc/*
Le cache utilis� par l'�diteur de liens dynamiques
(pas strictement requis, mais �a l'emp�che de se plaindre)./bin/*
Un interpr�teur de commandes (ash
car il est
plus petit que bash
). Les programmes mount
et losetup
pour manipuler le disque DOS et configurer les p�riph�riques loopback./dev/*
Les p�riph�riques qui seront utilis�s. Vous avez besoin
de /dev/zero
pour ld-linux.so
, /dev/hda*
pour monter
le disque msdos et /dev/loop*
pour les p�riph�riques loopback./mnt
Un r�pertoire vide pour y monter le disque msdos.Le contenu du disque virtuel initial que j'ai utilis� est �num�r� ci-dessous. Ces fichiers repr�sentent environ 800ko, une fois pris en compte l'espace perdu par les structures du syst�me de fichiers.
total 18
drwxr-xr-x 2 root root 1024 Jun 2 13:57 bin
drwxr-xr-x 2 root root 1024 Jun 2 13:47 dev
drwxr-xr-x 2 root root 1024 May 20 07:43 etc
drwxr-xr-x 2 root root 1024 May 27 07:57 lib
-rwxr-xr-x 1 root root 964 Jun 3 08:47 linuxrc
drwxr-xr-x 2 root root 12288 May 27 08:08 lost+found
drwxr-xr-x 2 root root 1024 Jun 2 14:16 mnt
./bin:
total 168
-rwxr-xr-x 1 root root 60880 May 27 07:56 ash
-rwxr-xr-x 1 root root 5484 May 27 07:56 losetup
-rwsr-xr-x 1 root root 28216 May 27 07:56 mount
lrwxrwxrwx 1 root root 3 May 27 08:08 sh -> ash
./dev:
total 0
brw-r--r-- 1 root root 3, 0 May 20 07:43 hda
brw-r--r-- 1 root root 3, 1 May 20 07:43 hda1
brw-r--r-- 1 root root 3, 2 Jun 2 13:46 hda2
brw-r--r-- 1 root root 3, 3 Jun 2 13:46 hda3
brw-r--r-- 1 root root 7, 0 May 20 07:43 loop0
brw-r--r-- 1 root root 7, 1 Jun 2 13:47 loop1
crw-r--r-- 1 root root 1, 3 May 20 07:42 null
crw-r--r-- 1 root root 5, 0 May 20 07:43 tty
crw-r--r-- 1 root root 4, 1 May 20 07:43 tty1
crw-r--r-- 1 root root 1, 5 May 20 07:42 zero
./etc:
total 3
-rw-r--r-- 1 root root 2539 May 20 07:43 ld.so.cache
./lib:
total 649
lrwxrwxrwx 1 root root 18 May 27 08:08 ld-linux.so.1 -> ld-linux.so.1.7.14
-rwxr-xr-x 1 root root 21367 May 20 07:44 ld-linux.so.1.7.14
lrwxrwxrwx 1 root root 14 May 27 08:08 libc.so.5 -> libc.so.5.3.12
-rwxr-xr-x 1 root root 583795 May 20 07:44 libc.so.5.3.12
./lost+found:
total 0
./mnt:
total 0
La seule �tape complexe est la cr�ation des p�riph�riques dans dev
.
Utilisez le programme mknod
pour les cr�er, et servez vous des
p�riph�riques dans /dev
comme mod�les pour les param�tres requis.
Le fichier /linuxrc
Le fichier /linuxrc
sur le disque virtuel initial est n�cessaire pour
mettre en place le p�riph�rique loopback, avant de l'utiliser comme racine.
L'exemple suivant essaye de monter /dev/hda1
comme une partition msdos
et en cas de r�ussite assigne les fichiers /linux/linuxdsk.img
et
/linux/linuxswp.img
respectivement aux p�riph�riques /dev/loop0
et /dev/loop1
.
#!/bin/sh
echo INITRD: Essaye de monter /dev/hda1 comme partition msdos
if /bin/mount -n -t msdos /dev/hda1 /mnt; then
echo INITRD: Montage r�ussi
/bin/losetup /dev/loop0 /mnt/linux/linuxdsk.img
/bin/losetup /dev/loop1 /mnt/linux/linuxswp.img
exit 0
else
echo INITRD: Echec du montage
exit 1
fi
Le premier p�riph�rique, /dev/loop0
deviendra la racine et le second,
/dev/loop1
deviendra la m�moire virtuelle.
Si vous voulez pouvoir �crire sur la partition racine en tant qu'utilisateur normal
quand vous aurez fini, alors vous devriez plut�t utiliser mount -n -t msdos /dev/hda1 /mnt -o uid=0,gid=0,umask=000
.
Ceci associera tous les acc�s � la partition
DOS � l'utilisateur root et placera les permissions en cons�quences.
Le p�riph�rique racine que vous utiliserez est le fichier linuxdsk.img
.
Vous devrez le cr�er de la m�me fa�on que le disque virtuel initial, en plus grand.
Vous pouvez y mettre l'installation de Linux de votre choix.
La m�thode la plus simple est de copier une installation Linux existante sur ce disque. une alternative est d'y installer une distribution de Linux.
En supposant que ceci est fait, vous avez encore des modifications mineures � apporter.
Le fichier /etc/fstab
doit r�f�rencer les partitions racine et
swap en utilisant les deux p�riph�riques loopback qui sont mis en place
par le disque virtuel initial.
/dev/loop0 / ext2 defaults 1 1
/dev/loop1 swap swap defaults 1 1
Ceci permettra de s'assurer que quand le p�riph�rique racine sera utilis�, le noyau ne sera pas induit en erreur sur son emplacement. L'espace de swap pourra ainsi �tre ajout� de la m�me fa�on qu'une partition de swap normale. Vous devez aussi retirer toute autre r�f�rence vers un disque racine ou swap.
Si vous voulez �tre capable d'acc�der � la partition DOS apr�s le d�marrage de Linux, vous devrez faire quelques petites modifications.
Cr�ez un r�pertoire appel� /initrd
, qui sera le point de montage
du disque virtuel initial une fois que le syst�me de fichier racine sera mont�
en loopback.
Cr�ez un lien symbolique appel� /DOS
qui pointe sur /initrd/mnt
o� la partition DOS sera mont�e.
Ajoutez un ligne dans le fichier rc qui monte les disques. Il devra lancer la
commande mount -f -t msdos /dev/hda1 /initrd/mnt
; ceci cr�era un
montage "fictif" de la partition DOS pour que tous les autres programmes (comme
df
) sachent que la partition DOS est mont�e et o� la trouver.
Si vous avez utilis� des options diff�rentes dans /linuxrc
, vous devrez
�videmment utiliser les m�mes ici.
Il n'y a plus de raison d'avoir le noyau Linux sur le p�riph�rique racine puisqu'il a �t� charg� plus t�t. Toutefois, si vous utilisez les modules, vous devrez les inclure normalement sur ce p�riph�rique.
Le p�riph�rique que vous utiliserez sera le fichier linuxswap.img
.
Le p�riph�rique de m�moire virtuelle (swap) est tr�s simple � fabriquer.
Cr�ez un fichier vide de la m�me fa�on que pour le disque virtuel initial,
puis ex�cutez mkswap linuxswap.img
pour l'initialiser.
La taille de la m�moire virtuelle d�pendra de ce que vous comptez faire avec le syst�me install�, mais je recommanderais entre 8 Mo et la quantit� de RAM que vous avez.
Les fichiers qui seront utilis�s devront �tre d�plac�s sur la partition DOS.
Les fichiers qui devront �tre dans le r�pertoire DOS appel� C:\LINUX
sont les suivants :
LINUXDSK.IMG
L'image de la partition qui deviendra le p�riph�rique
racine.LINUXSWP.IMG
L'espace de m�moire virtuelle.La disquette de d�marrage qui est utilis�e est juste une disquette amor�able au format DOS.
On la cr�e en utilisant format a: /s
sous DOS.
Sur ce disque vous devrez cr�er un fichier AUTOEXEC.BAT
(comme
ci-dessous) et copier le noyau, le disque virtuel initial sous forme
compress�e et l'ex�cutable LOADLIN
.
AUTOEXEC.BAT
Le fichier de commandes ex�cut� automatiquement
par le DOS.LOADLIN.EXE
L'ex�cutable du programme LOADLIN
.ZIMAGE
Le noyau Linux.INITRDGZ.IMG
L'image compress�e du disque virtuel initial.Le fichier AUTOEXEC.BAT
devrait contenir une seule ligne comme
ci-dessous.
\loadlin \zImage initrd=\initrdgz.img root=/dev/loop0 ro
Ceci sp�cifie l'image du noyau � utiliser, l'image du disque virtuel initial, et le p�riph�rique racine apr�s que le disque virtuel ait fait son office, avec la partition racine mont�e en lecture seule.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:23