Gentoo Logo

Gentoo et le Mode Utilisateur Linux (User-Mode Linux)

Table des matières :

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 ARCH=um
# make linux ARCH=um
# 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
(Si une erreur fatale se produit, veuillez supprimer /dev/net/tun et réessayer.)
# 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
(Connexion au Mode Utilisateur)
# 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 (Si nécessaire)
# 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

(Si les informations du commutateur doivent rester en avant-plan :)
$ uml_switch -unix ~/tmp/switch.sock

(Si elles doivent aller en arrière-plan :)
$ 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



Imprimer

Dernière mise à jour le 1er mars 2008

La version originale de cette traduction n'est plus maintenue

Résumé : Ce guide montre aux développeurs Gentoo Linux comment mettre en place et utiliser le Mode Utilisateur Linux (User-Mode Linux) pour tester les modifications du système potentiellement dangereuses.

Grant Goodyear
Correcteur

John Davis
Correcteur

Julien Allanos
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.