Association Bordelaise des Utilisateurs de Logiciels libres

Accueil ›› Utilisation de logiciels libres ›› Système ›› User Mode Linux (1), comment faire ?

User Mode Linux (1), comment faire ?

Posté le mercredi 12 novembre 2003 par MIB

User Mode Linux permet de faire tourner un linux comme processus utilisateur d’un autre linux. Ca permet -entre autres - de faire le "root" sur sa petite machine (virtuelle) à soi, sans risquer de casser la vraie machine. On peut aussi jouer à faire du réseau entre machines virtuelles, histoire de se faire la main.

Les ingrédients

Pour faire fonctionner le truc, il vous faut récupérer trois choses
- un noyau spécial, compilé avec des options qui vont bien
- des utilitaires (uml_utilities)
- l’image d’un système de fichiers (en gros, c’est la copie d’une partition avec linux installé dessus)

J’ai récupéré tout ça sur http://ftp.nl.linux.org/pub/uml :
- uml_utilities_20030903.tar.bz2 (utilitaires)
- linux-2.4.19-5.bz2 (noyau)
- root_fs_slack8.1.bz2 (système de fichiers avec slackware)

L’installation

- désarchiver uml_utilities et l’installer (tar, make, make install) [1] Note : il vous faut la bibliothèque de développement readline [2]
- décompressez le noyau, rendez-le exécutable (bunzip2, chmod +x)
- décompressez le système de fichiers, mettez-le en lecture seule (bunzip2 ..., chmod -w ....)

Préparez aussi un script de lancement du genre :

#
KERNEL=/spare/UML/linux-2.4.19-5
ROOTFS=/spare/UML/root_fs_slack8.1
COW=/tmp/myslack.cow

$KERNEL umid=slack ubd0=$COW,$ROOTFS

(Vous l’avez deviné, j’ai tout collé dans /spare/UML.)

Démarrage et arrêt

On lance le script et hop : une machine virtuelle Slackware apparaît avec trois consoles dans autant de fenêtres séparées. Le compte root n’a pas de mot de passe. Vous pouvez y aller !

Pour arrêter proprement la machine virtuelle, se connecter en root, et lancer "shutdown -h now"

Sinon, depuis une autre fenêtre, lancez

uml_mconsole slack halt

C’est quoi le fichier COW ?

Après ça, vous allez voir apparaître un fichier /tmp/myslack.cow

Vu comme ça il a l’air énorme, en fait il est plein de trous. Compressez-le avec bzip2, vous verrez.

Explication : si vous avez bien suivi ce que j’ai écrit, vous avez mis l’image de systeme de fichiers en READ-ONLY. Donc vos bidouillages sous slackware virtuelle n’ont pas pu être enregistrés dans l’image. Les blocs de donnés modifiés ont donc été enregistrés dans ce fichier "copy on write", qui donne une "différentiel" entre l’état initial du système de fichier et son état actuel.

C’est tout pour aujourd’hui

Enfin presque : juste deux mots : si vous travaillez sur des partitions NFS, vous allez rencontrer quelques difficultés.

1. Le lancement du noyau bidouillé crée chez vous un répertoire ".uml", et tente d’y mettre des sockets [3]. Si votre répertoire d’accueil est monté par NFS, ça ne marche pas.

Un remède :

mkdir /tmp/truc
ln -s /tmp/truc ~/.uml

2. Apparemment (il faudrait que je revérifie) les fichiers COW doivent aussi être sur un disque local. Pas un vrai problème : je les transfère de mon répertoire partagé vers /tmp en les décompressant, et inversement.

bunzip2 -c \ ~/MyCows/myslack.cow.bz2 >/tmp/myslack.cow/
... LANCEMENT....
bzip2 -c tmp/myslack.cow ~/MyCows/myslack.cow.bz2

Liens, références, tout ça

- le site http://user-mode-linux.sourceforge.net/

P.-S.

A la prochaine fois

Si vous n’êtes pas sages, une prochaine fois je vous raconterai
- comment on fait un réseau (virtuel) de deux machines virtuelles (ou plus)
- comment (et pourquoi) on connecte une machine virtuelle à internet.

Notes

[1] pour désarchiver un fichier .tar.bz2, il faut l’option "j" comme dans

tar -xjvz uml_utilities_20030903.tar.bz2

[2] package debian readline4-dev

[3] qui servent à la communication entre votre machine virtuelle et une "uml_mconsole"

Répondre à cet article

9 commentaire(s)
  • Posté le 16 novembre 2003 à 18:27, par Bruno Vitra (lien)

    Bonjour
    J’ai tout fait comme indiqué et voici ce que j’obtiens au lancement du script

    (nitializing stdio console driver
    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

    merci de m’expliquer un peu , je débute et je voudrais essayer de comprendre comment fonctionne un réseau .
    Bruno

    Voir en ligne : user mode linux comment faire ?

    Répondre à ce message

    • Posté le 16 novembre 2003 à 19:15, par Michel BIllaud (lien)

      Si vous avez fait comme dans l’article, ça ne marchera pas, parce que j’ai fait une faute de frappe en plein milieu. Dans le script il faut lire

      ROOTFS=/spare/UML/root_fs_slack8.1

      et non pas

      ROOTFS=/spare/UML/root_fs_slack8.1n

      Je m’en vais le corriger de ce pas, avant que le président ne vote le goudron et les plumes.


      Personnellement il m’arrive souvent de yoyoter et de taper "udb0=..." au lieu de "ubd0=...", avec les conséquences que vous décrivez. Ca m’a même fait perdre une bonne demi-heure lors de mes premiers essais. C’est pas malin, hein ?


      Quoi qu’il en soit, pour vérifier les paramètres qui sont effectivement transmis au noyau par le script, revenez aux dix premières lignes affichées par le noyau, qui ressemblent normalement à ceci (essai non-bidonné fait à la maison) :

      bash-2.05a$ linux umlid=slack ubd0=/tmp/mycow,/distribs/UML/root_fs_slack8.1

      tracing thread pid = 4461
      Linux version 2.4.19-5um (jdike@uml.karaya.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)) #2 Mon Sep 16 15:41:15 EDT 2002
      On node 0 totalpages: 8192
      zone(0): 8192 pages.
      zone(1): 0 pages.
      zone(2): 0 pages.
      Kernel command line: umlid=slack ubd0=/tmp/mycow,/distribs/UML/root_fs_slack8.1 root=/dev/ubd0
      Calibrating delay loop... 1237.04 BogoMIPS
      ...

      Merci de l’avoir signalé !

      Répondre à ce message

      • Posté le 17 novembre 2003 à 01:40 (lien)

        merci pour la réponse, je m’en vais l’essayer de ce pas
        Bruno

        Répondre à ce message

      • Posté le 17 novembre 2003 à 02:10 (lien)

        Rebonjour
        Il y a un autre truc dans le script je crois qu’il faut taper
        COW=/tmp/mycow
        au lieu de
        COW=/tmp/myslack.cow
        En tout cas c’est ce que j’ai fait et ça marche impec, alors que ça ne marchait pas .
        merci
        Bruno

        Répondre à ce message

  • Posté le 12 décembre 2003 à 14:59 (lien)

    le package debian s’appele libreadline4-dev et non readline4-dev

    Répondre à ce message

  • Posté le 30 avril 2004 à 20:30, par Evandor (lien)

    Voila, je pense avoir tout bien fait mais je Panic

    [root@Whatwar tools]# ./uml_run
    tracing thread pid = 19878
    Linux version 2.4.19-5um (jdike@uml.karaya.com) (gcc version 2.96 20000731 (Red
    Hat Linux 7.1 2.96-81)) #2 Mon Sep 16 15:41:15 EDT 2002
    On node 0 totalpages : 8192
    zone(0) : 8192 pages.
    zone(1) : 0 pages.
    zone(2) : 0 pages.
    Kernel command line : umid=slack ubd0=/tmp/mycow,/usr/uml/tools/root_fs_slack8.1
    root=/dev/ubd0
    Calibrating delay loop... 2685.70 BogoMIPS
    Memory : 30200k 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
    Kernel panic : outer trampoline didn’t exit with SIGKILL

    [root@Whatwar tools]#

    Répondre à ce message

  • Posté le 14 mai 2004 à 19:47, par Iouri (lien)

    User Mode Linux Hosting
    $1 www.umlserver.com.ar
    Private, linux shell account with
    full root access. Starting at $1.

    Voir en ligne : User Mode Linux Hosting

    Répondre à ce message

  • Posté le 29 novembre 2004 à 12:15, par stefan (lien)

    Bonjour,

    pour mon mémoire je dois utiliser UML,
    En suivant ce manuel, j’arrive à lancer UML ( enfin, je n’ai qu’une seule consolle et pas trois comme décrit précédemment ...)
    J’aimerais plutôt prendre un noyeau linux et le patcher pour avoir un uml compilé par moi-même, seulement , peu importe la version du noyeau que je choisisse avec son uml patch correspondant, la compilation ne fonctionne pas ! enfin, j’obtient toujours une erreur (différente selon le noyeau).
    La seule fois où cette compilation a fonctionné c’est quand je n’ai rien modifié avec le
    ’make menuconfig ARCH=um’ ,
    j’ai essayé une fois juste de permettre les modules loadable, et la compilation génére des erreurs ,
    voici les quelques dernières lignes affichées à la fin de cette compilation qui ne marche pas :

    rm -f arch/um/sys-i386/module.c
    ln -sf /mnt/uml/test3/linux-2.6.0/arch/i386/kernel/module.c arch/um/sys-i386/mod ule.c
    CC arch/um/sys-i386/module.o
    arch/um/sys-i386/module.c : Dans la fonction « apply_relocate » :
    arch/um/sys-i386/module.c:79 : error : `R_386_32’ undeclared (first use in this fu nction)
    arch/um/sys-i386/module.c:79 : error : (Each undeclared identifier is reported onl y once
    arch/um/sys-i386/module.c:79 : error : for each function it appears in.)
    arch/um/sys-i386/module.c:83 : error : `R_386_PC32’ undeclared (first use in this function)
    make[1] : *** [arch/um/sys-i386/module.o] Erreur 1
    make : *** [arch/um/sys-i386] Erreur 2

    Pourriez-vous me dire pourquoi je n’arrive pas à compiler un noyeau patché avec uml ?

    Un grand Merci !!

    Stefan

    Répondre à ce message