User Mode Linux : Généralités
User Mode Linux est à la base une série de modification effectuées sur le noyau Linux qui permettent à ce dernier de tourner comme n'importe quel autre programme (donc en « mode utilisateur »).
Cette première partie présente quelques généralités sur le fonctionnement d'un noyau UML. Plus tard, nous verrons comment se déroulent l'installation et la configuration d'un serveur virtuel tournant avec Debian. Enfin, une dernière partie sera consacrée à décrire l'utilisation particulièrement tordue en usage sur le poivron.
Les utilisations d'un noyau en mode utilisateur sont multiples :
- développement du noyau sans avoir besoin d'une autre machine ou d'un émulateur, avec un débuggage plus facile ;
- lancer des programmes dangereux ou inconnus ;
- disposer d'un serveur virtuel, pour s'entraîner en administration système, pouvoir piéger des pirates, ou simplement afin de disposer d'une installation supplémentaire.
C'est cette dernière utilisation qui nous intéresse pour le poivron. Un seul serveur physique (qu'on appellera hôte), mais plusieurs serveurs virtuels (ou UMLs), que nous pouvons chacun dedier à une utilisation particulière.
Linux en mode utilisateur
Pour être concis, démonstration :
$ linux
Checking for the skas3 patch in the host...found
Checking for /proc/mm...found
Checking for /dev/anon on the host...Not available (open failed with errno 2)
Linux version 2.4.24-1um (mdz@mizar) (gcc version 3.3.3 (Debian)) #1 Mon Mar 118:23:10 PST 2004
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/ubd0
Calibrating delay loop... 3335.78 BogoMIPS
Memory: 28704k available
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
Checking for host processor cmov support...Yes
Checking for host processor xmm support...No
Checking that ptrace can change system call numbers...OK
Checking that host ptys support output SIGIO...Yes
Checking that host ptys support SIGIO on close...No, enabling workaround
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
VFS: Disk quotas vdquot_6.5.1
Journalled Block Device driver loaded
devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x0
pty: 256 Unix98 ptys configured
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
loop: loaded (max 8 devices)
Initializing Cryptographic API
Initializing software serial port version 1
mconsole (version 2) initialized on /home/lunar/.uml/olrxKP/mconsole
unable to open root_fs for validation
Initializing stdio console driver
NET4: Linux TCP/IP 1.0 for NET4.0
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 4096)
Linux IP multicast router 0.06 plus PIM-SM
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
VFS: Cannot open root device "ubd0" or 62:00
Please append a correct "root=" boot option
Kernel panic: VFS: Unable to mount root fs on 62:00
Un programme comme un autre, ni plus, ni moins.
Stockage des données
UML dispose d'un nouveau type de périphérique, les « user block devices ». Comme leur nom l'indique, ce sont des « block devices, » similaires aux partitions d'un disque dur. Les fichiers qui permettent d'y accéder sont habituellement nommés ubd*.
Et où vont les données écrites sur ces périphériques ? Tout simplement sur des énormes fichiers créés sur l'hôte.
Il existe aussi une possibilité pour partager des fichiers directement entre le UML et hôte (hostfs), néanmoins, notre paranoïa nous pousse à ne pas l'utiliser dans le cadre des serveurs virtuels du poivron.
Réseau
Une machine aujourd'hui, si elle n'est pas en réseau, n'a tout de même que peu d'intérêt, aussi virtuelle qu'elle soit. Il existe de nombreuses techniques pour permettre à un UML de communiquer en réseau.
La plus simple est uml-switch. Ce daemon permet de constituer un réseau totalement virtuel : les paquets circulent entre les différents UMLs par son intermédiaire. Néanmoins, tout comme un réseau local constitué de plusieurs machines, il est à la base totalement fermé. Pour pouvoir communiquer avec l'extérieur (dont la machine hôte fait parti), il est nécessaire d'utiliser un périphérique TAP. Ce dernier est un périphérique réseau qui permet à un programme ordinaire d'envoyer et de recevoir directement des trames Ethernet.
Il est aussi possible de connecter directement un UML avec un TAP pour que les serveurs virtuels soient le plus indépendant possible.
User Mode Linux et Debian
La plupart des paquets concernant User Mode Linux dans Debian sont maintenus par Matt Zimmerman qui a effectué un travail fantastique pour faciliter leur utilisation en tant que serveurs virtuels. Voici la présentation des plus importants d'entre eux :
user-mode-linuxcontient le noyau User Mode Linux officiel de Debian. Malheureusement, devant la difficulté de devoir assurer la compatibilité entre la multitude de noyaux hôtes possibles et une seule et unique version du noyau UML, ce paquet devrait être bientôt abandonné.kernel-patch-umlcontient le patch UML. Il a été remanié par les développeureuses Debian afin de corriger certains défauts des versions originales. Utilisé avec make-kpkg --arch um (du paquetkernel-package), il permet de créer des paquets contenant un User Mode Linux très facilement.kernel-patch-skascontient le patch « Separate Kernel Address Space », à mettre sur le noyau hôte afin d'accélérer grandement l'exécution des UML.uml-utilitiescontient les outils comme mconsole qui permet d'envoyer de stopper temporairement ou de couper un UML, ainsi que uml_switch mentionné précedemment. Lors de son installation, il s'occupe également de configurer ce dont les périphériques TUN/TAP ont besoin.rootstrapest un programme qui permet d'installer une Debian dans un UML, sans effort, une fois correctement configuré.
Après ces généralités, la prochaine partie de cette documentation détaillera les procédures pour avoir un serveur virtuel sur une Debian.
Par Lunar:: Vendredi 22 Octobre 2004 à 19:08:: Général :: #8 :: rss
Trackbacks
Aucun trackback.
Pour faire un tracback sur ce billet : http://poivron.org/blog/tb.php?id=8
Commentaires
Le Vendredi 22 Octobre 2004 à 21:46, par Méléis :: site :: #
Le Samedi 23 Octobre 2004 à 01:28, par Lunar :: email :: site :: #
Le Mercredi 25 Mai 2005 à 18:24, par vincent :: email :: #
Le Jeudi 26 Mai 2005 à 00:59, par Lunar :: email :: site :: #
Ajouter un commentaire