Gentoo et le Mode Utilisateur Linux (User-Mode Linux)
1.
Installer le Mode Utilisateur Linux
Important :
Avant que vous ne puissiez utiliser le Mode Utilisateur Linux, vous devez
utiliser un profil non-NPTL, et utiliser <glibc-2.4. Suivez les
instructions pour le
changement de profil. Vous devrez lancer emerge -e world après
être passé au profil non-NPTL.
|
Comme en fait état le site du Mode Utilisateur Linux
(http://user-mode-linux.sourceforge.net/), le Mode Utilisateur Linux
autorise un utilisateur à « exécuter Linux à l'intérieur de
lui-même ». Spécifiquement, le Mode Utilisateur Linux offre une machine
virtuelle sur laquelle un utilisateur peut « exécuter des programmes
bogués, expérimenter de nouveaux noyaux ou distributions, et fouiner dans les
entrailles de Linux, tout cela sans compromettre son installation principale de
Linux ». Les changements expérimentaux dans les paquets centraux de
Gentoo, comme sys-apps/baselayout ou sys-libs/glibc, peuvent
potentiellement casser le système et le rendre non-démarrable ; avec le
Mode Utilisateur Linux, nous pouvons tester ces changements sans risquer de
casser le système.
La majorité des noyaux 2.6 ont le support UML. Bien que vous puissiez utiliser
votre noyau actuel, il peut être plus sage de garder séparés les arbres des
noyaux UML. Après tout, vous allez construire un nouveau noyau avec une
configuration différente et vous aimeriez peut-être avoir des systèmes
hétérogènes sur votre système Linux principal (plusieurs noyaux UML différents).
Donc téléchargez un bon arbre du noyau (comme l'officiel de kernel.org) et décompressez-le à un
emplacement de développement local.
Ensuite, configurez ce noyau UML comme vous le feriez pour n'importe quel autre
système, mais ajoutez ARCH=um afin que le logiciel de construction du
noyau sache que celui-ci est destiné à tourner en tant que processus invité sur
un système principal.
Exemple de code 1.1 : Contruire le noyau UML |
# cd /srv/aegis/src/uml-linux
# make menuconfig
# make linux
# cp linux /usr/local/bin/linux
|
Attention :
La partie ARCH=um est extrêmement importante !
|
Sur un système Gentoo par défaut, /usr/local/bin est défini dans
votre variable d'environnement $PATH. Si ce n'est pas le cas, vous
trouverez une déclaration du PATH dans le fichier
/etc/profile, modifiez-la comme suit :
Exemple de code 1.2 : Vérification du $PATH |
$ echo $PATH | grep /usr/local/bin
|
Exemple de code 1.3 : Exemple de déclaration du $PATH dans /etc/profile |
PATH="/usr/local/bin:/usr/bin:/bin:${PATH}"
|
N'oubliez pas d'exécuter source /etc/profile pour appliquer les
changements.
Pour que le noyau en Mode Utilisateur Linux puisse démarrer correctement un
système Gentoo, il doit être configuré pour ne pas monter automatiquement
/dev (devfs) par défaut. De plus, assurez-vous d'avoir inclus
tmpfs (le « Système de Fichiers en Mémoire Virtuelle » -
« Virtual Memory Filesystem »), les fichiers de démarrage de Gentoo
Linux stockant par défaut leurs informations dans une petite partition tmpfs.
(Les noyaux binaires disponibles depuis le site du Mode Utilisateur Linux
montent automatiquement /dev et n'incluent pas le support de
tmpfs ; ne les utilisez pas.)
Je recommande chaudement de lire la documentation du Mode Utilisateur Linux,
mais l'idée de base est : l'exécution du programme
/usr/local/bin/linux démarre le noyau du Mode Utilisateur et essaie
de mettre en place le système stocké dans le fichier root_fs qui
devrait être situé dans le répertoire courant.
Installer les outils du Mode Utilisateur Linux ne vous fera pas de mal :
Exemple de code 1.4 : Installer les outils UML |
# emerge sys-apps/usermode-utilities
|
Ces outils facilitent, entre autres, les interactions réseau entre le système
virtuel en Mode Utilisateur Linux et le système hôte.
2.
Création du fichier root_fs
« Chrooter » Gentoo
Le fichier root_fs, nécessaire au Mode Utilisateur Linux, est un
simple fichier qui contient un système de fichiers Gentoo Linux complet. Pour
générer ce fichier, le support du « Loopback device » doit être activé
dans le noyau de l'hôte (non-Mode Utilisateur).
La génération du fichier root_fs lui-même sera notre dernière
étape. D'abord, nous devons générer un système de fichiers Gentoo dans un chroot
ordinaire. Nous avons besoin de l'archive stage disponible, qui peut être
téléchargée séparément, extraite depuis un CD d'installation, ou depuis un .iso
d'un CD d'installation.
Exemple de code 2.1 : Monter un .iso d'un CD d'installation |
# mkdir /mnt/loop
# mount -o loop /chemin/vers/install-<TAB>.iso /mnt/loop
|
Mettre en place le chroot est essentiellement identique à une installation
ordinaire de Gentoo Linux.
Exemple de code 2.2 : Créer le point de montage |
# mkdir /mnt/gentoo
# cd /mnt/gentoo
# tar xvjpf /chemin/vers/stage-<TAB>.tar.bz2
|
Continuez et démontez l'iso. Vous n'en avez plus besoin.
Compilez le système de la manière habituelle: chrootez dans
/mnt/gentoo et les instructions d'installation de Gentoo.
Installez d'autres paquets si vous le désirez. Vous pouvez donner un nom d'hôte
à votre système Gentoo virtuel, si vous le désirez. Dans
/etc/fstab, vous ferez en sorte que /dev/ROOT soit
/dev/ubda, avec un type de système de fichiers ext2, ext3 ou
reiserfs. Placez /dev/SWAP à /dev/ubdb, et mettez
/dev/BOOT en commentaire.
N'oubliez pas de définir le mot de passe du super-utilisateur root.
Exemple de code 2.3 : Définir le mot de passe de root |
# passwd
|
Ensuite, il faut enlever les scripts d'initialisation suivants du niveau
d'exécution par défaut :
Exemple de code 2.4 : Supprimer les scripts inutiles |
# rc-update del consolefont boot
# rc-update del keymaps boot
|
Quittez le chroot, démontez tous les montages de type bind, archivez la nouvelle
distribution Gentoo et faites le nettoyage :
Exemple de code 2.5 : Finaliser l'installation |
# cd /mnt/gentoo
# tar cvjpf ~/gentoo.tbz2 *
# cd
# rm -rf /mnt/gentoo
|
Créer root_fs
La taille de notre chroot Gentoo est proche de 300 Mo, donc
root_fs doit être au moins de cette taille. Nous choisirons
0,5 Go comme taille, ce qui est raisonnable.
Exemple de code 2.6 : Créer les fichiers UML |
# dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M
# mke2fs -F root_fs
# mount -o loop root_fs /mnt/loop
# tar xvjpf gentoo.tbz2 -C /mnt/loop
# umount /mnt/loop
|
Il serait bon d'avoir une partition de mémoire virtuelle de 0,5 Go.
Exemple de code 2.7 : Créer une partition de mémoire virtuelle |
# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M
# mkswap -f swap_fs
|
Maintenant, voyons si cela fonctionnne !
Exemple de code 2.8 : Démarrer le noyau UML |
# linux ubd0=root_fs ubd1=swap_fs
|
Le Mode Utilisateur Linux utilise des xterms pour les consoles virtuelles
lancées au moment du démarrage, donc vous devez être sûr que le terminal à
partir duquel vous lancez le Mode Utilisateur Linux a son $DISPLAY correctement
défini (ainsi que les permissions xhost/xauth).
Vous devriez normalement être capable de vous connecter à votre système Gentoo
en Mode Utilisateur Linux. La seule chose qui manque pour que ce système soit
complètement fonctionnel est la mise en réseau du système virtuel et de l'hôte.
Note :
Si vous recevez des erreurs du type « No space left on device »
(NdT : « Plus de place disponible sur le périphérique »), vous
devrez allouer plus de mémoire à votre système en Mode Utilisateur en ajoutant
mem=xxxMB à la fin de la ligne du processus du noyau. Par exemple :
linux ubd0=root_fs ubd1=swap_fs mem=128MB.
|
3.
Configuration du réseau
Utiliser un réseau existant
Veuillez vérifier que les options suivantes ont été sélectionnées comme
modules :
Exemple de code 3.1 : Configuration du noyau hôte |
Networking -->
IP: Netfilter Configuration -->
IP tables support -->
Full NAT -->
<M> MASQUERADE target support
Network Device Support -->
<M> TUN/TAP Support
|
Ensuite, faites ce qui suit sur le système hôte :
Exemple de code 3.2 : Configurer le noyau |
# modprobe tun
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
|
La ligne iptables met en place l'IP Masquerading entre le réseau privé
dans lequel le système en Mode Utilisateur sera, et Internet (qui peut être
atteint par eth0 dans notre cas). La ligne echo active la
transmission de paquets entre le réseau privé et l'interface sur laquelle se
trouve la passerelle par défaut (eth0 pour nous).
Maintenant, vérifions si le réseau fonctionne depuis le système en Mode
Utilisateur.
Exemple de code 3.3 : Démarrer UML |
# linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.254
# ifconfig eth0 192.168.0.1 up
# ping -c 2 192.168.0.254
PING 192.168.0.254 (192.168.0.254): 56 octets data
64 octets from 192.168.0.254: icmp_seq=0 ttl=255 time=0.8 ms
64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms
--- 192.168.0.254 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.7/0.8 ms
# route add default gw 192.168.0.254
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
0.0.0.0 192.168.0.254 0.0.0.0 UG 40 0 0 eth0
# scp user@192.168.0.254:/etc/resolv.conf /etc/resolv.conf
# ping -c 2 www.gentoo.org
PING www.gentoo.org (207.170.82.202): 56 octets data
64 octets from 207.170.82.202: icmp_seq=0 ttl=240 time=119.6 ms
64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms
--- www.gentoo.org ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 92.0/105.8/119.6 ms
|
Dans le système en Mode Utilisateur, nous assignons l'adresse IP privée
192.168.0.1 à l'interface eth0 et nous activons l'interface. L'hôte a une
adresse IP privée 192.168.0.254 et nous lui envoyons un ping pour être certain
que notre réseau fonctionne. La ligne route ajoute une passerelle par
défaut, notre hôte ; nous utilisons scp pour récupérer un
/etc/resolv.conf fonctionnel (si nécessaire) ; nous envoyons
un ping vers www.gentoo.org pour voir si notre résolution des noms (et en
général l'accès vers Internet) fonctionne depuis notre système en Mode
Utilisateur. Maintenant, le système en Mode Utilisateur peut utiliser
emerge à volonté !
Utiliser un réseau virtuel
Avant de trop vous excité, précisons qu'il ne s'agit pas d'un réseau privé
virtuel. C'est un réseau uniquement accessible aux instances UML. Le paquet
usermode-utilities fournit un outil appelé uml_switch qui définit
les extrémités du commutateur.
Exemple de code 3.4 : Activation des extrémités d'un commutateur UML |
$ uml_switch -unix ~/tmp/switch.sock
$ uml_switch -unix ~/tmp/switch.sock &> ~/tmp/switch.log &
|
Pour démarrer les instances UML sur le commutateur, lancez la commande suivante.
Votre interface réseau (virtuelle) va être connectée au processus
uml_switch et va utiliser l'adresse MAC donnée.
Exemple de code 3.5 : Lancement de la première instance UML |
$ linux ubd0=first_rootfs ubd1=first_swapfs eth0=daemon,10:00:01:02:00:00,,~/tmp/switch.sock
|
Vous pouvez toujours connecter le système au réseau existant, ou avoir un second
processus attaché à la fois au virtuel et à l'existant :
Exemple de code 3.6 : Lancement de la seconde instance UML |
$ linux ubd0=second_rootfs ubd1=second_swapfs eth0=daemon,10:00:01:02:00:01,,~/tmp/switch.sock \
eth1=tuntap,,,192.168.1.43
|
Plus d'informations à propos de la configuration de tuntap peuvent être trouvées
dans la section précédente.
4.
Tester le fichier iso
Peut-être que l'idéal pour tester Gentoo Linux serait de démarrer le fichier
iso en Mode Utilisateur et d'effectuer une installation complète de Gentoo
depuis le système virtuel en Mode Utilisateur Linux.
Démarrer le fichier iso ou, en réalité le initrd du fichier iso, est plutôt
simple.
Exemple de code 4.1 : Démarrer le fichier ISO |
# mount -o loop /chemin/vers/install-<TAB>.iso /mnt/loop
# cp /mnt/loop/isolinux/gentoo.igz .
# linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \
> initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \
> ubd2=/dev/cdroms/cdrom0 eth0=tuntap,,,192.168.0.254
|
Maintenant, vous pouvez suivre le guide d'installation de Gentoo Linux mot pour
mot. Pour cela, vous aurez besoin de savoir que le système de fichiers racine
sera /dev/ubd/0, la partition de mémoire virtuelle sera
/dev/ubd/1 et le lecteur de CD-ROM sera /dev/ubd/2.
5.
Ressources
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|