5.2. Utilisation de qemuctl

Avertissement

Pensez bien à lancer la commande qemuctl en la faisant toujours précéder de sudo. Dans le cas contraire le script s'écuterait sans les droit de l'utilisateur root et s'arrêterait en affichant un message d'erreur.

Afin d'automatiser les tâches de création, de démarrage et d'arrêt des images QEMU j'ai mis au point un script nommé qemuctl (téléchargeable ici). Une fois le script téléchargé, déposez-le en tant que root dans /usr/bin/ et rendez-le exécutable à l'aide de chmod +x /usr/bin/qemuctl. Ensuite vérifiez que vous avez bien suivi ce que nous avons dit Section 5.1 pour pouvoir utiliser ce script avec les droits de l'utilisateur root.

Avant toute chose, pensez à adapter la configuration du script à votre système. Les constantes à modifier se trouvent en début de script:


use constant QEMU_PATH => "/home/grinch/qemu";
use constant QEMU_RAM_SIZE => 256;
use constant QEMU_GRAPHIC => '-nographic';
use constant QEMU_VLAN_IP => '127.0.0.1';
use constant QEMU_VLAN_PORT => '1234';
      

QEMU_PATH

La constante QEMU_PATH pointe sur le répertoire dans lequel se trouve vos répertoires d'images QEMU.

QEMU_RAM_SIZE

La constante QEMU_RAM_SIZE indique la taille maximum de la RAM à allouer pour le système contenu dans l'image QEMU.

QEMU_GRAPHIC

La constante QEMU_GRAPHIC contient l'option de contrôle de l'affichage. Si elle contient -nographic, aucun display X ne sera utilisé lors du lancement. Si elle ne contient rien (une chaîne vide), QEMU utilisera un display X.

QEMU_VLAN_IP

La constante QEMU_VLAN_IP contient l'adresse IP sur laquelle est géré le VLAN. Il ne s'agit pas obligatoirement de la boucle locale. Elle est utilisée lorsque l'option vls (VLAN serveur) ou vlc (VLAN client) est passée à qemuctl.

QEMU_VLAN_PORT

La constante QEMU_VLAN_PORT contient le numéro de port sur lequel est géré le VLAN. Il est utilisé lorsque l'option vls (VLAN serveur) ou vlc (VLAN client) est passé à qemuctl.

Note

Une fois que le système est installé et configuré sur l'image je vous conseille de ne plus utiliser de display X et d'accéder à votre image via SSH depuis la machine hôte.

Le fonctionnement du script est très simple. Dans un premier temps, lancez-le sans arguments afin d'afficher l'aide:


grinch@badiou:~/qemu$ qemuctl

    Version: 2006042300

    Usage  : qemuctl imgname [install|start|stop] [vls|vlc]
    Example: qemuctl freebsd start

    Available QEMU images:

        - fedora
        - freebsd
        - debian
        - gentoo

    Report bugs to <esaracco@users.labs.libre-entreprise.org>

grinch@badiou:~/qemu$
      

Par défaut, qemuctl affiche une aide ainsi que la liste des différentes images détectées.

Le synopsis est le suivant:

qemuctl imgname [install | start | stop] [vls | vlc]

5.2.1. Création d'une image

qemuctl permet de simplifier la création d'une image QEMU. Il faut néanmoins lui préparer un peu le terrain. Le script s'attend à trouver l'arborescence décrite Section 2.3. Si nous décidions par exemple d'installer une image du système FreeBSD nous préparerions le terrain comme suit:


$ cd ~/qemu/
$ mkdir -p freebsd/src
$ cd freebsd/src/
$ wget "ftp://ftp.freebsd.org/pub/FreeBSD/ISO-IMAGES-i386/6.1/6.1-RC1-i386-disc1.iso"
$ ln -s 6.1-RC1-i386-disc1.iso freebsd.iso
$ cd ../
$ qemu-img create freebsd.img 5G
        

Ce qui nous donnerait au final:


grinch@badiou:~/qemu/freebsd$ pwd
/home/grinch/qemu/freebsd
grinch@badiou:~/qemu/freebsd$ ls -lR
.:
total 4
-rw-r--r-- 1 grinch grinch 5368709120 2006-03-13 18:43 freebsd.img
drwxr-xr-x 2 grinch grinch       4096 2006-04-17 19:47 src

./src:
total 49728
lrwxrwxrwx 1 grinch grinch       30 2006-04-17 19:47 freebsd.iso -> 6.1-RC1-i386-disc1.iso
-rw-r--r-- 1 grinch grinch 50862080 2006-03-13 18:25 6.1-RC1-i386-disc1.iso
grinch@badiou:~/qemu/freebsd$
        

Une fois le terrain préparé il suffirait de lancer sudo qemuctl freebsd install.

5.2.2. Exécution d'une image

Pour exécuter une image (debian dans notre cas), utilisez sudo qemuctl debian start.

Un fichier de log est automatiquement créé directement sous le répertoire d'hébergement de l'image. Ici sous ~/qemu/debian/. Ce fichier porte le nom de l'image: debian.log. Le script crée également un fichier debian.pid dans lequel est stocké l'identifiant du processus correspondant à l'image QEMU démarrée.

Pour lancer une image en tant que serveur de réseau virtuel (voir Section 4.3.1) il suffit de préciser l'argument vls après l'action: sudo qemuctl debian start vls.

Pour lancer une image en tant que client d'un réseau virtuel (voir Section 4.3.1) il suffit de préciser l'argument vlc après l'action: sudo qemuctl debian start vlc.

5.2.3. Arrêt d'une image

Avertissement

Il est recommandé de ne jamais arrêter manuellement une image lancée avec qemuctl. Les images lancées avec qemuctl doivent être arrêtées avec qemuctl.

L'arrêt d'une image est aisé lorsqu'on l'a démarrée en ne lui interdisant pas d'utiliser un display graphique. Néanmoins l'utilisation d'un display pouvant causer des problèmes au sein de X (instabilité du comportement de la souris, instabilité de la console graphique etc.) il est plus simple de passer l'option -nographic à QEMU via la constante QEMU_GRAPHIC de qemuctl (voir Section 5.2 pour les détails).

Pour arrêter une image (debian dans notre cas), pensez à stopper son système proprement (via la command halt par exemple), puis après avoir attendu un peu le temps que ses processus se terminent, utilisez sudo qemuctl debian stop.