Ceci est une ancienne révision du document !


User Mode Linux ( UML )



User Mode Linux ou UML est un noyau Linux compilé qui peut être exécuté dans l'espace utilisateur comme un simple programme. Il permet donc d'avoir plusieurs systèmes d'exploitation virtuels sur une seule machine physique hôte exécutant Linux.


Pour faire fonctionner UML, il faut récupérer trois choses :

  • un noyau linux spécifique
  • l’image d’un système de fichiers
  • des utilitaires

On installe les utilitaires :

sudo apt-get install uml-utilities bridge-utils


Si votre système hôte est une distribution serveur, il se peut que vous ayez le patch skas disponible dans les dépots. Ce patch permet de gagner en performances sur votre machine virtuelle.

sudo apt-get install linux-patch-skas


Vous pouvez récupérer le noyau et le système de fichier sur ce site :
http://uml.nagafix.co.uk/

Faites bien attention de prendre la bonne version selon votre processeur, 32-bit ou 64-bit. Dans mon exemple je vais utiliser le noyau kernel32-2.6.16.43-bs2 et le système de fichiers Ubuntu-FeistyFawn-i386-root_fs.

Ensuite, il faut donner des droits particulier à ces deux fichiers.


Pour le noyau, il faut le rendre exécutable :

chmod 755 kernel32-2.6.16.43-bs2


Pour le système de fichier, il faut lui donner les droits d'écriture :

chmod 666 Ubuntu-FeistyFawn-i386-root_fs

puis lancer la commande :

e2fsck Ubuntu-FeistyFawn-i386-root_fs


On peut ensuite lancer la machine virtuelle :

./kernel32-2.6.16.43-bs2 ubd0=Ubuntu-FeistyFawn-i386-root_fs

et vous pouvez vous logguer avec "root"

Ajouter votre utilisateur dans le groupe "uml-net"

sudo vi /etc/group

il faut donner les droits à l'interface tun :

chmod 0666 /dev/net/tun

Il faut créer un bridge dans /etc/network/interfaces, pour ce faire :

sudo vi /etc/network/interfaces

Votre interface eth0 est probablement déjà configurée avec un truc du genre :

auto eth0 
iface eth0 inet DHCP

ou

auto eth0 iface eth0 inet static
        address xxx.xxx.xxx.xxx
        netmask xxx.xxx.xxx.xxx
        broadcast xxx.xxx.xxx.xxx
        gateway xxx.xxx.xxx.xxx

ceci n'est plus nécessaire … commentez ces lignes (#)

Il faut d'abord créer deux interfaces, une réelle (eth0) et une virtuelle (tap1), puis les bridger (bridge0), pour cela, ajouter :

auto eth0
iface eth0 inet manual

et

auto tap1
iface tap1 inet manual
        tunctl_user <user>

où <user> (sans les <>) correspond exactement au user déclaré dans le groupe uml-net

Maintenant, le bridge. Il y a plusieurs solutions : soit l'OS Host est en client DHCP (ce qui n'est pas pratique si vous voulez en faire un smb server pour partager des fichiers et des imprimantes avec le Guest), soit il est configuré en IP fixe. On choisira l'une ou l'autre des solutions ci-dessous. Evidemment, ceci rend impossible une configuration future avec les outils gnome.

IP fixe

Insérer après les interfaces ci-dessus (copier/coller les données IP de l'ex eth0 que vous avez commenté plus haut) :

auto bridge0
iface bridge0 inet static
    post-up chmod ugo+rw /dev/net/tun
    address xxx.xxx.xxx.xxx
    netmask xxx.xxx.xxx.xxx
    broadcast xxx.xxx.xxx.xxx
    gateway xxx.xxx.xxx.xxx
    bridge-ports eth0 tap1
    bridge-ageing 7200
    bridge-fd 0

Client DHCP

Insérer après les interfaces ci-dessus :

auto bridge0
iface bridge0 inet dhcp
    post-up chmod ugo+rw /dev/net/tun
    bridge-ports eth0 tap1
    bridge-ageing 7200
    bridge-fd 0

Un reboot du Host ne sera pas nécessaire, pour s'assurer que les nouvelles configurations réseau sont bien prises en compte il suffira de lancer:

sudo /etc/init.d/networking restart

Payez attention aux erreurs dans l'output du terminal s'il y en a.

Vous avez maintenant un bridge qui met à disposition de l'OS Guest un accès complet au LAN.

Dans les settings de l'OS Guest, il vous reste à configurer le "Host Interface Networking" avec <tap1> comme interface (sans les <>).

Si votre LAN dispose d'un serveur DHCP, vous pouvez configurer l'OS Guest en client DHCP, sinon, une adresse IP fixe fera l'affaire (différente de celle du Host, bien sûr).

Une fois tout ceci configuré, il ne vous reste plus qu'à lancer votre machine virtuelle avec l'interface réseau :

./kernel32-2.6.16.43-bs2 ubd0=Ubuntu-FeistyFawn-i386-root_fs eth0=tuntap,tap1
  • user_mode_linux_uml.1183560724.txt.gz
  • Dernière modification: Le 18/04/2011, 14:58
  • (modification externe)