Qemu

De Lea Linux
Aller à la navigation Aller à la recherche


Installer et utiliser Qemu

Installer et utiliser Qemu

Par David Roux, avec la collaboration de Joël Tarlao et Alain Rivest, relu et complété par Erwan Velu

Voici un petit guide pour utiliser Qemu facilement

Qu'est-ce que Qemu?

Dans le monde des émulateurs, Qemu a actuellement le vent en poupe, et nombreux sont ceux qui l'ont adopté pour faire tourner les applications indisponibles pour leur système d'exploitation. Dans notre cas, on appréciera de pouvoir utiliser des logiciels conçus pour Microsoft Windows ou Mac OS sous Linux, mais il sera également possible de faire l'inverse. Son autre avantage est qu'il peut émuler plusieurs architectures, du x86 au PowerPC en passant par le Sun-SPARC, ce qui permet de lancer une foule d'OS différents. De plus, il est important de signaler que Qemu est disponible sous licence GNU LGPL. Pour en savoir plus, le mieux est d'aller faire un tour ici; quand à nous, rentrons dans le vif du sujet...

L'installation

Rappel : si votre distribution contient un paquetage pour qemu, préférez utiliser ce paquetage plutôt que les sources. Certains puristes prétendrons qu'utiliser les sources c'est l'esprit Linux, mais ce sont surtout des problèmes de dépendances non gérées, des choix par forcément simple à faire sur l'utilisation de telle ou telle fonctionnalité du logiciel que l'on désire compiler.

Pour vérifier que votre distribution contient un paquetage pour qemu, il faut utiliser l'outil de gestion de paquetage de celle-ci. Par exemple :

  • pour Ubuntu / Debian : apt-cache search qemu
  • pour Mageia / Mandriva : urpmq qemu
  • pour Gentoo : emerge -s qemu
  • pour Slackware : swaret --search qemu

Votre distribution contient aussi presque surement un outil graphique pour obtenir cette information.

Pour plus d'information sur ces questions, consulter cette documentation.

Il est également préférable d'utiliser la dernière version de QEMU, (0.7.2 au moment de la rédaction de ces lignes) qui doit être disponible en format deb pour testing et RPM pour Mandriva LE 2005-2006. On peut également la trouver la version 0.7.0 dans les branches "unstable" des distributions Linux (Sid, Cooker...). Quoiqu'il en soit, l'installation par cette méthode (urpmi, apt-get,...etc) ne devrait pas poser de problème.

Cependant, pour les possesseurs de machines PC (architecture i386), ce serait passer à côté d'un formidable accélérateur de performance : Kqemu, un module du noyau que Fabrice Bellard souhaite rentabiliser avant de le libérer. Il n'est donc pas libre et vous ne le trouverez pas dans vos distributions. Selon les machines, le gain va de 200% à 600% !!!!! Mais il faut compiler à la main :

La compilation passe par les traditionnels

./configure
make
# make install

.

Cependant, la version 0.7.2 ne peut se compiler qu'avec gcc-3.xx alors que la plupart des distributions acutelles sont en GCC-4 (gcc est le compilateur). La coexistence des 2 gcc ne pose généralement pas de problèmes. Donc :

Installer gcc-3.3

extraire qemu. Extraire kqemu en étant dans le répertoire de qemu.

préciser le compilateur utilisé :

./configure --cc=gcc-3.3.6
make

Ici, il peut y avoir un soucis, car votre noyau risque de ne pas être compilé avec ce GCC là... et donc le système refusera de mettre en mémoire le module Kqemu. Il faut donc compiler le module avec gcc 4 :

cd kqemu
make clean  
make

ensuite vous pouvez installer le tout :

make install

(en root)

Il faut ensuite faire quelques manipulations pour créer un périphérique un peu particulier :

modprobe kqemu
mknod /dev/kqemu c 250 0
chmod 666 /dev/kqemu

Ceci peut être placé dans un fichier pour être effectué au lancement du système : dans /etc/rc.local par exemple.


Pour les dépendances de Qemu 0.6.1, vous aurez besoin des paquets suivants: libc6 (>=2.3.2-ds1-4), libsdl (>=1.2), zlib1g (>=1.1.2.1), vgabios (>=0.4c), bochsbios (>=2.1.1). Les noms des paquets peuvent varier suivant les distributions.

Comment ça marche?

Premiers pas avec un live-CD

On va se faire la main avec un truc tout simple, l'émulation d'un système d'exploitation en live-CD. Il ne sera pas nécessaire d'écrire sur le disque dur ni même graver le fichier ISO que l'on vient de télécharger sur un site internet. Dans la suite de cet article, ce fichier ISO s'appelera "live.iso". Pour démarrer cette image iso avec Qemu, Il suffit de se rendre dans le répertoire qui contient l'image et lancer Qemu, en tapant:

cd /home/toto/repertoire_ou_est_l'image_iso
qemu -cdrom live.iso

Il n'est pas nécessaire d'être « root » pour exécuter QEMU, tout peut être fait par un simple utilisateur.

Une fenêtre s'ouvre et le système émulé se lance. Pour utiliser la souris de votre système virtuel, il suffit de cliquer dans la fenêtre d'émulation. Pour libérer la souris de la fênetre d'émulation, il suffit d'appuyer sur les touches 'ctrl' & 'alt' en même temps. Pour le pavé numérique, Qemu le considèrera toujours comme inactif donc il faudra presser la touche "VerrNum". Attention aux mots de passe car on peut se retrouver avec le clavier numérique vérouiller avec le voyant "numlock" éteint !

Si l'on souhaite démarrer sur un vrai céderom, il suffit d'utiliser la syntaxe -cdrom /dev/cdrom . Qemu utilise directement le périphérique bloc, il ne faut donc pas monter le cédérom avant l'éxecution de Qemu.

Le système virtuel peut également accéder au réseau grâce à l'option -user-net : dans ce mode, Qemu utilisera vos interfaces réseaux pour accéder a votre réseau local ou a Internet par exemple. La carte son virtuelle, une carte-son SB16, peut être activée avec l'option -enable-audio. Compte-tenu que le système émulé est tout de même plus lent que lors d'une utilisation normale, et que la charge sur le processeur de l'hôte est importante, faites d'abord un essai avec un live-CD "léger", genre DamnSmall Linux et ce surtout si votre machine n'est pas de la première jeunesse;

Qemu offre par défaut au système émulé 128 Mo de mémoire vive, il faut donc au moins en avoir le double sur la machine hôte (plus, c'est mieux). Pour info, j'ai fait tous ces tests sur un Athlon XP1800+ avec 512 Mo de RAM, et mon processeur tournait à 100% tout le temps: n'essayez pas sur un 486 ;-)

Installation d'un système "en dur"

Dans ce mode, Qemu est capable d'utiliser un fichier de votre disque dur et de le transformer en un disque dur virtuel. Pour l'exemple, on installera un Microsoft Windows 98, sur une image de disque dur de 2Go que l'on appelle "hd.img" et située dans un répertoire /home/toto/invite/.

mkdir /home/toto/invite/
cd /home/toto/invite/
qemu-img create hd.img 2G

La commande qemu-img permet de créer une image disque de la taille spécifiée mais on aurais pu également le faire avec l'outil dd:

dd if=/dev/zero of=hd.img bs=2048 count=1000000

Dans notre répertoire « invite », on placera aussi une image du CD d'installation nommée msw.iso ainsi qu'une image de sa disquette de boot « mswboot.img ».

qemu -k fr -fda mswboot.img -cdrom msw.iso -hda hd.img -user-net -boot a

Cette commande permet donc de demarrer Qemu avec une disquette, un disque dur et un cdrom virtuel correspondant respectivement a la disquette d'amorcage de Microsoft Windows 98, le disque virtuel que l'on a créé et l'image ISO de Windows 98. L'option « boot a » indique que l'on souhaite démarrer le système virtuel depuis le lecteur de disquette virtuel. Il n'est pas nécessaire d'utiliser une disquette d'amorçage si l'image ISO est « amorçable ».

Vous remarquez que j'ai mis des options dont je n'ai pas forcément besoin tout de suite (-cdrom, -user-net), mais comme on va devoir redémarrer notre système virtuel de nombreuses fois pendant l'installation, et donc relancer Qemu, on fera un copier-coller de la commande au lieu de tout retaper. j'ai aussi mis le clavier en français avec -k fr.

L'installation de Windows débute, on va tout d'abord créer notre partition et l'activer avec Fdisk puis on reboot. On formatte ensuite le disque C: puis on reboot a nouveau. Ceci fait partie de la procédure standard d'installation de Windows, ce n'est pas spécifique a Qemu. Attention, le lecteur de cdrom porte parfois la lettre R: (donc pas de panique si ça ne marche pas avec D:). On est arrive ensuite dans la partie graphique de l'installation, je ne rentre pas dans les détails. Au reboot suivant, on relancera le système en partant du disque dur virtuel et non plus à partir de la disquette en remplaçant -boot a par -boot c. Lorsque l'installation est terminée, on a accès au système virtuel avec la commande suivante, toujours en étant dans le répertoire où se trouve l'image-disque:

qemu -k fr -hda hd.img -cdrom /dev/cdrom -user-net -boot c

Pour pouvoir démarrer avec l'option -cdrom /dev/cdrom, assurez vous qu'un céderom est présent dans le lecteur avant le démarrage de Qemu.

J'ai volontairement oublié certaines options que l'on va détailler dans le chapitre suivant.

Démarrer sur le disque dur du PC

Si vous souhaitez démarrer le Windows qui se trouve sur le disque dur de votre PC, mais sans quitter Linux, c'est possible ! Tapez la commande suivante :

qemu -boot c -hda /dev/hda

C'est très pratique quand vous êtes en train de mettre à jour votre chargeur de démarrage (grub, lilo...) afin de tester les modifications, ou bien quand vous souhaitez passer à Linux et que vous souhaitez encore utiliser quelques applications Windows sans redémarrer sous Windows !

Les principales options

  • -hda [image] ou -hda [périphérique]: sert à spécifier l'image de disque dur qui va servir pendant l'émulation; il peut aussi s'agir d'un périphérique ou d'une partition, comme /dev/hda1; Il y a aussi -hdb, -hdc, -hdd, pour simuler d'autres partitions, mais on ne peut pas utiliser -hdc en même temps que -cdrom. L'utilisation de partitions "réelles" présente des risques pour le disque dur, préfèrez les images.
  • -cdrom [image] ou -cdrom [périphérique]: même chose que précèdemment, mais là il est question du cdrom. le périphérique peut être un lien (/dev/cdrom) ou sa cible (/dev/hdc); -cdrom peut utiliser n'importe quel hdX qui correspond à un lecteur cédérom qui contient un cédérom mais qui n'est pas monté.
  • -fda [image] ou -fda [périphérique]: comme pour -cdrom, version disquette, et il y a aussi -fdb, et donc certainement la possibilité d'utiliser 2 lecteurs de disquettes.
  • -boot X: où X peut être a (floppy ou image), c (partition virtuelle), ou d (lecteur CD ou image), soit le périphérique sur lequel on va démarrer. Si l'on utilise qu'un seul périphérique (voir options précédentes), cette option est inutile.
  • -enable-audio: permet le support du son en émulant une carte-son SB16. celà pose quelques problèmes avec l'OS de Bill, qui, suivant les versions, peut avoir des soucis avec cette carte.
  • -m [memoire]: permet de spécifier la quantité de mémoire vive pour le système émulé; ne mettez pas la taille totale de votre mémoire car il faut en laisser pour le système hôte. Par défaut, cette valeur est de 128.
  • -k [lang]: (à partir de Qemu 0.6.1) précise le schéma du clavier: en-gb, en-us, fr, fr-ca, fr-be, fr-ch,...etc. par défaut, c'est en-us, mais une fois le système émulé lancé, c'est lui qui choisira le schéma (sauf pour les consoles virtuelles de Qemu).
  • -snapshot: pour écrire dans un fichier temporaire, au lieu d'une partition ou d'une image disque.
  • -nographic: désactive l'interface graphique, la sortie devenant la console ou a été lancé Qemu; c'est utile pour les systèmes en mode texte (Linux texte, Msdos...).
  • -full-screen: l'option parle d'elle même.

Le réseau

Par défaut, le réseau de l'OS invité transitera sur l'hôte par le biais de l'interface /dev/net/tun0; toutefois, ce n'est pas le procédé le plus simple, car celle-ci n'est pas forcément présente sur le système et la créer peut nécessiter une compilation du noyau (rarement avec les distributions récentes). Je lui préfèrerai donc, pour plus de compatibilité, le mode "user":

  • -user-net: active le mode "user" pour le réseau; Qemu se comporte comme un serveur DHCP, qui attribue au système émulé l'adresse 10.0.2.15; ce système se connecte via une passerelle virtuelle à 10.0.2.2, et le DNS est à 10.0.2.3. L'inconvénient de ce procédé est que le système invité "voit" l'hôte, mais pas l'inverse. Attention, Microsoft Windows ne trouve pas toujours le serveur DHCP, il vaudra mieux le configurer avec une IP fixe.
  • -smb [dossier]: permet à l'invité d'accéder à un dossier partagé sur l'hôte, qui devra être équipé d'un serveur Samba; l'adresse de ce serveur pour l'invité est 10.0.2.4.
  • -tftp [préfixe]: active un serveur TFTP à l'adresse 10.0.2.2.

Les raccourcis clavier et le moniteur

Il est aussi possible d'utiliser des raccourcis clavier, pour accéder à des fonctions supplémentaires:

  • ctrl-alt-f: passe en plein-écran.
  • ctrl-alt-1: affichage graphique de l'invité.
  • ctrl-alt-2: passage au moniteur Qemu; attention, dans ces deux options, le 1 et le 2 sont à taper sur les chiffres hauts du clavier, pas sur le pavé numérique.
  • ctrl-alt: pour arrêter le contrôle de la souris dans l'invité, alors que pour l'activer, on avait cliqué dans la fenêtre de Qemu.

Le moniteur propose quelques commandes supplémentaires:

  • info: affiche une liste des sous-rubriques d'informations.
  • eject [périphérique amovible]: éjecte un CD ou une disquette; on peut ajouter l'option -f pour forcer l'éjection.
  • change [périphérique ou image]: permet de changer de média amovible, périphérique ou image.
  • q ou quit: pour quitter Qemu (sans arrêter l'OS émulé proprement).

Avant la version 0.6.1, les raccourcis clavier étaient à base de "ctrl-shift...".Il existe d'autres commandes, il n'a été présenté que celles qui sont réellement indispensables. Pour plus de détails, je vous recommande de lire le très complet manuel de Qemu qui se trouve dans /usr/share/doc/qemu/si vous avez installé un paquet binaire, ou dans /usr/local/share/doc/qemu/ si vous avez installé à partir des sources. Le site officiel propose aussi une FAQ, et un forum. Enfin, les archives de la liste de diffusion de Lea-aide fourmillent de questions et de réponses, qui sont d'ailleurs à la base de cet article.

Une petite astuce

Si on utilise très souvent Qemu, il peut être pénible de taper toujours la même longue commande. On s'en sort en faisant un script-shell très simple, avec son éditeur de texte favori:

#!/bin/sh
cd /chemin/du/dossier_ou_est_image/
qemu -k fr -cdrom cd_de_OS.iso -hda
hd.img -user-net -smb /home/toto/partage -boot c

On sauvegarde ce fichier puis on le rend le exécutable. On se fait un raccourci dans son menu, ou sur le bureau, avec le chemin complet du script en guise de commande: on vient de se simplifier la vie. Notez que je charge l'image du CD d'installation, au lieu de penser à mettre un CD dans le lecteur: si j'ai besoin, je pourrais changer via le moniteur de Qemu.

Plus...

Sachez enfin qu'il existe un module additionnel pour accélérer l'émulation, Kqemu; celui-ci n'est, hélas, pas libre.Il n'est disponible qu'en tar.gz, et doit être placé dans le dossier où l'on a extrait les sources de Qemu avant la compilation de l'ensemble.Il faut préciser que Qemu ne présente normalement aucun risque pour le système hôte, mais vu la charge sur le processeur, je recommande de s'assurer que celui-ci est convenablement refroidi, et éventuellement de surveiller la température avec un utilitaire adéquat (Gkrellm par exemple); mon Athlon prend facilement 5°C dans ce cas, et c'est un modèle plutôt stable: inutile de préciser que c'est à vos risques et périls, vous êtes seul responsable de votre matériel. L'utilisation de Kqemu permet un gain de performance allant jusqu'a X 10 : dans ce contexte, la différence de temps d'exécution entre un OS natif et d'un OS émulé par Qemu est de l'orde de 20%.

Remarque : kqemu est disponible en rpm dans le media plf de la mandriva 2007.

Voilà, j'espère que cet article est assez complet et simple à comprendre: c'était le but recherché.

Autres ressources

  • Exemples de génération et de démarrage de systèmes virtuels DOS et Windows sous GNU/Linux avec QEMU.



@ Retour à la rubrique Logiciels


Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par David Roux le 20/05/2005.

Copyright

Copyright © 20/05/2005, David Roux

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/