qemu tutorial

Qemu … c’est quoi

Qemu est un outil de virtualisation / emulation multi-architecture …

En gros vous pouvez emuler un PC, un mac, une machine de type SPARC … etc

Ici on n’aime pas cliquer 154 fois avec la souris pour lancer une nouvelle machine virtuelle … On aime bouffer des lignes … de commandes.

Qemu peut être utilisé avec une interface graphique mais bon … pour bien savoir où on va et ce qu’on fait … mieux vaut un bon vieux terminal

Qemu est tellement puissant … que Vmware (et donc vmplayer aussi) mais aussi virtualbox utilise le code source de qemu.

Vous n’avez pas envie d’installer en dur que vous soyez sur windows ou linux, qemu est pour vous.

Installation

2 types d’installation sont possibles :

– Package

– Sources

A l’aide des packages :

sudo apt-get install qemu kqemu-*

A l’aide des sources :

Ils vous faut évidement les outils gcc de compilation

sudo apt-get install gcc build-essential

une fois ces outils installés il vous faut les sources de qemu :

wget http://fabrice.bellard.free.fr/qemu/qemu-0.9.1.tar.gz
tar -zxvf qemu-0.9.1.tar.gz
cd qemu-0.9.1
./configure
make
sudo make install

Theoriquement si vous n’avez pas eu de message d’erreur … qemu est installé.

EN PLUS

qemu est assez lent mais ne vous inquiétez pas il existe un outil qui fonctionne très bien pour accélerer le tout : kqemu dont je parlerai plus loin

Pour l’installer depuis les sources :

wget http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz
tar -zxvf kqemu-1.3.0pre11.tar.gz
cd kqemu-1.3.0pre11.tar.gz
./configure
make
sudo make install

Utilisation

Maintenant que qemu est installé avec son “outil accélérateur”, nous allons prendre plusieurs exemples pour montrer les possibilité de ce dernier.

  1. Démarrer sur un live CD
  2. Création d’une image disque
  3. Démarrer sur un live CD + image disque
  4. Démarrer sur une image disque

Démarrer sur un live CD

2 possibilté = Une image ISO ou un Vrai CD dans le lecteur Une image ISO :

/usr/bin/qemu -cdrom /répertoire_de_votre_image/votre_image.iso

Un CD ROM:

/usr/bin/qemu -cdrom /dev/hda # ou hda est votre device cdrom

Création d’une image disque

Vous avez envie, après avoir testé le live cd, d’installer en semi-dur votre système, il vous faudra un disque virtuel :

2 possibilités = dd ou qemu-img

dd:

dd est un outil super puissant qu’il fait utiliser en faisant très très attention :

dd of=nom_image_disque bs=1024 seek=2000000 count=0

nom_image_disque : le nom de votre image de disque ex: winxp.iso bs = la taille des clusters (vous pouvez passer 512, 1024 … si vous ne savez pas ce que vous faites laissez 1024) seek = le nombre de cycles … donc la taille en octets, ici 2 giga octets

qemu-img

qemu-img create hd.img 2G

hd.img = le nom de votre disque virtuel 2G = La taille en giga octets

Démarrer sur un live CD + image disque

Une fois que notre image disque est créée nous allons passer à ce qui va nous aider à installer un système sur notre machine virtuelle :

qemu -hda /répertoire_de_votre_image/votre_image_disque.iso -cdrom \
 /répertoire_de_votre_image/votre_image_cd.iso -m 256 -boot d -localtime -k fr -soundhw all -usb

-hda /répertoire_de_votre_image/votre_image_disque.iso : hda permet d’indiquer où se trouve votre image de disque -cdrom /répertoire_de_votre_image/votre_image_cd.iso : cdrom permet d’indiquer ou se trouve votre image iso ( ou indiquer la device cdrom ex: /dev/hda)

-m 256 : Indique la quantité de mémoire vive que vous voulez qu’utilise qemu

-boot d : IMPORTANT = Indique sur quel périphérique qemu doit bouter ⇒ d indique le cdrom et c indique le disque dur

-localtime : Indique quelle horloge il doit utiliser, ici l’horloge machine

-k fr : Indique quel type de clavier, ici Français (c’est mieux non ?)

-soundhw all : Indique quel son il doit transferer sur vos HP, ici tous les sons systèmes de votre machine virtuelle seront redirigés sur vos HP.

-usb : Le périphérique usb peut être utiliseé mais doit être paramétré avant :

Si vous n’avez pas le fichier /proc/bus/usb/devices, utilisez la commande suivante :

sudo mount -t usbfs none /proc/bus/usb

Ensuite, utilisez la commande suivante, pour que qemu puisse prendre le controle des périphériques usb :

sudo chown votre_nom_utilisateur -R /proc/bus/usb

Lancez qemu en rajoutant sur la ligne de commande ”-usb” et “usbdevice host:<vid>:<pid>”

<vid>:<pid> s’obtient à partir de la commande

lsusb

Démarrer sur une image disque

Une fois que vous avez installé votre système sur votre image disque, lancez cette ligne après avoir arrêté qemu :

qemu -hda /répertoire_de_votre_image/votre_image_disque.iso -m 256 -boot c -localtime -k fr -soundhw all -usb
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 n’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. Cela 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 où 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”:

-net user 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).

Astuce avec kqemu

Comment utiliser le module kqemu, qui permet d’accélérer Qemu…

Une fois installé, le lancement de qemu (même via qemu-launcher) devrait charger le module. Pour le vérifier on utilise la commande /sbin/lsmod.

Si le module est chargé il devrait se créer un périphérique du nom de /dev/kqemu.

– Utiliser la mémoire partagée (shm) si vous avez beaucoup de ram comme suit :

umount /dev/shm
mount -t tmpfs -o size=528m none /dev/shm

528 ou plus si vous le voulez

afin d’allouer 528 Mo de votre ram à la mémoire partagée.

– Enfin, augmenter votre fréquence rtc (real time clock) via la commande

echo 1024 > /proc/sys/dev/rtc/max-user-freq