# [miniHowto] Qemu

## kopp

Introduction :

Voilà, recemment, Trevoke a parlé d'une distrib encore pire que LFS, du coup il a été vaguement evoqué le sujet de l'émulation de machine pour l'installation, et donc l'utilisation d'un  logiciel libre : Qemu.

Je propose donc un petit guide histoire de simplifier l'installation et l'utilisation de Qemu.

Dernière màj : 25/02/06

23/12/05 : ajout de l'astuce de Domix pour la redirection des ports réseaux

25/02/06 : changement de l'utilisation du son dans la version 0.8 de Qemu

I - Installation

Les versions les plus récentes sont masquées, il est donc nécessaire de les démasquer :

```
# echo "app-emulation/qemu ~x86" >> /etc/portage/package.keywords

# echo "app-emulation/qemu-softmmu ~x86" >> /etc/portage/package.keywords

# echo "app-emulation/qemu-user ~x86" >> /etc/portage/package.keywords
```

Voilà, en plus de ça, il existe un module permettant d'améliorer les performances de qemu. Seulement, ce module n'est pas libre, donc pour les inconditionnels du logiciel libre, qui ont un autel dédié à RMS dans leur chambre, vous pouvez passer votre chemin, sinon pour les autres, il suffit de rajouter le USE-flag kqemu :

```
# echo "app-emulation/qemu-softmmu kqemu" >> /etc/portage/package.use
```

Rem : le flag sdl joue aussi un role pour qemu-softmmu, vous pouvez l'activer s'il ne l'est pas déjà.

Ensuite, il suffit d'installer :

```
# emerge qemu
```

Pour ceux qui ont choisi d'utiliser le module d'acceleration, il faut faire ceci en plus :

D'abord, charger le module en lui donnant l'appartenance root:qemu

```
# modprobe kqemu major=0
```

Si vous voulez que ça se fasse automatiquement au boot :

```
# echo "kqemu major=0" >> /etc/modules.autoload.d/kernel-2.6
```

Il faut ensuite créer la device node :

```
# mknod /dev/kqemu c 250 0
```

Si vous voulez pouvoir utiliser le module d'accéleration en tant qu'utilisateur : 

```
# gpasswd -a user qemu
```

 où user est votre nom d'utilisateur.

A noter : il existe un accélérateur libre : Qvm86

Malheureusement, il n'y a pas d'ebuild dans Portage.

II - Utilisation

Voilà, qemu est installé. Pour l'utilisation, l'avantage est de pouvoir utiliser des disques fictifs. Pour cela, il suffit de créer une image disque qui pourra être utilisée comme disque dur virtuel.

```
qemu-img create -f qcow imagedisque.img size
```

 où size est à remplacer par la taille que vous voulez attribuer, par exemple 3G pour 3 gigaoctets

Dans le cas où vous avez créer une image de type raw (à la place de qcow), vous pouvez ensuite gérer cette image comme un disque, avec l'aide de fdisk par exemple :

```
fdisk imagedisque.img
```

et ainsi créer votre table de partition dessus.

(Merci Enlight pour la remarque)

Ensuite, il suffit de lancer l'émulateur.

Si vous voulez lancer qemu comme si la machine démarrer sur ce disque virtuel : 

```

qemu -hda imagedisque.img -boot c
```

(l'option -enable-audio est là pour rajouter l'émulation du son)

Si vous avez une image iso d'un CD d'installation par exemple, et donc que vous voulez démarrer l'installation depuis cette image sur votre image disque :

```
qemu -hda imagedisque.img -cdrom image_cd.iso -boot d
```

Si vous voulez faire pareil, mais avec un cd réel dans votre lecteur :

```
qemu -hda imagedisque.img -cdrom /dev/cdrom -boot d
```

Pour une disquette :

```
qemu -hda imagedisque.img -fda /dev/fd0 -boot a
```

Si vous voulez démarrer à partir du disque virtuel, mais en ayant le cd (virtuel ou pas) inséré dans le lecteur de la machine virtuelle, il suffit de remplacer le paramètre de l'option -boot :

```
qemu -hda imagedisque.img -cdrom /dev/cdrom -boot c
```

On peut bien entendu démarrer avec une disquette virtuelle ET un cd virtuel, de même qu'on peut rajouter des disques virtuels avec -hdb et -hdd (Attention, il faut choisir entre -cdrom et -hdc, c'est soit l'un, soit l'autre)

Pour augmenter les performances, si vous possédez assez de RAM (au moins 512Mo), vous pouvez préciser une taille de ram virtuelle plus grande, en passant l'option -m

exemple : 

```
qemu -boot c -hda imagedisque.img -m 192M
```

 On aura là un système virtuel avec 192Mo de ram.

Pour utiliser le son, il faut utiliser l'option -soundhw et préciser quelle carte on veut émuler.

```
qemu -soundhw ?
```

listera toutes les cartes émulables disponibles

```
qemu -soundhw \?

Valid sound card names (comma separated):

sb16        Creative Sound Blaster 16

es1370      ENSONIQ AudioPCI ES1370

-soundhw all will enable all of the above
```

Ensuite, il suffit d'en choisir une en la nommant, ou toutes en utilisant all

```
qemu -hda imagedisque.img -soundhw es1370
```

Si on veut en utiliser plusieurs, il faut les séparer d'une virgule : sb16,es1370

III - Extras

* Contribution de DomiX

Vous avez la possibilité de redirigée des ports de la machine hôte vers la machine virtuelle, ce qui permet des connections par ssh par exemple.

Cela se fait en rajoutant l'option -redir protocole:port_hôte:port_virtuelle

Par exemple si on veut accèder à ssh port 22 de la machine virtuelle par le port 2222 de la machine hôte :

```
qemu -hda imagedisque.img -boot c -redir tcp:2222:22
```

Voilà, c'en est tout pour ce mini guide, en tous cas pour le moment.

J'essaierai d'ajouter des infos sur les autres utilisations possibles.

En attendant, n'oubliez pas man qemu.

Remarques : chez moi il arrive que l'utilisation du modules d'acceleration ne soit pas très stable, j'ai eu plusieurs crash. 

Sinon, on peut s'en servir pour installer des OS ça marche très bien, mais attention, c'est pas ultra-rapide !

koppLast edited by kopp on Sat Feb 25, 2006 3:04 pm; edited 4 times in total

----------

## Leander256

Une petite remarque concernant :

 *kopp wrote:*   

> Il faut ensuite créer la device node :
> 
> ```
> # mknod /dev/kqemu c 250 0
> ```
> ...

 

Normalement /dev/kqemu est créé lors du chargement du module, tu n'as pas besoin de cette étape. Ou alors c'est uniquement quand tu charges ton module lors du boot ? Mais tant que udev est démarré avant, tu ne devrais pas avoir besoin de créer ce fichier.

Sinon je l'ai testé récemment, et ma foi c'est relativement rapide, par contre une bonne chose lorsqu'on a de la RAM en rab (genre 512 Mo au moins) et qu'on installe un windows 2000 (ou supérieur) c'est d'augmenter la taille de la mémoire virtuelle de qemu, parce que 128 Mo c'est léger et qemu en arrive rapidement à utiliser /tmp comme "swap" (et ça rame). La procédure est décrite dans la doc de qemu  :Wink: 

----------

## kopp

Bah chez moi j'ai eu un problème avec la node, il a fallu que je la crée comme ça... donc voilà  :Smile: 

Au pire ça fait pas de mal.

Exact pour la mémoire virtuelle en rab, j'sais pas pourquoi ça m'est sorti de l'esprit quand j'ai fait ça, alors que je m'en sers !

je vais changer ça de suite.

----------

## Enlight

Aaaaaaaaaaaaahhhh mille mercis!!!!!!!!!!!!!!!!! Je l'attendais impatiamment celui-là et j'étais étouffé par ma flemme donc vraiment pas envie de googleiser.

edit :

 *Quote:*   

> En attendant, n'oublier pas man qemu.

 

s/oublier/oubliez

----------

## kopp

Oui bon ok, j'ai pas gagné les dicos d'or...

Ah je savais bien que ça interesserait quelques fénéants ... faut dire que c'était pas très très long pour trouver comment tout marche...

Bon, maintenant tu n'as plus d'excuse pour ne pas installer Dettux  :Wink: [/url]

----------

## anigel

Merci kopp !

Malgré quelques fautes (de frappe, j'en suis sûr  :Laughing: ), c'est bien écrit, bien expliqué, et très bien mis en page  :Smile:  Presque parfait quoi  :Smile: 

----------

## lbr

Merci

Arrives-tu à faire tourner OOo2 ou un PPT par exemple ? Chez moi ca rame à mort ...

----------

## kopp

Je n'ai pas essayé openoffice mais étant donné que c'est un gouffre à mémoire... tout est dit!

As tu passé l'option -m avec par exemple 256 en paramètre ?

Enfin, faut voir que c'est de l'émulation, donc tu n'arrivera pas aux performances originales...

----------

## DomiX

Bonjour,

Je tiens à signaler que l'option -redir est super convi lorsque l'on veut accéder à un service dans la machine virtuelle comme ssh.

Voici un exemple, si vous voulez accéder au service ssh lancé sur le port 22 dans la machine virtuelle et accessible via le port 2222 à partir de votre "vraie" machine:

```
qemu -cdrom /dev/hdc -boot d -redir tcp:2222::22
```

Et pour y accéder à partir de votre "vraie" machine:

```
ssh -p 2222 user@localhost
```

Comme d'habitude pour plus d'information sur cette option man qemu  :Smile: 

Bye

----------

## Enlight

qemu-img create -f qcow imagedisque.img size *Quote:*   

> 
> 
> juste un chtit bug-report, en fait si tu fais une image formattée qcow, pas de fdisk dessus, faut formater en raw pour ça.

 

----------

## kopp

Ok Enlight, mais étrange, il me semblait avoir fait un fdisk sur ma partition qcow, mais maintenant j'ai un doute...

Sinon, merci DomiX pour l'astuce très pratique.

Désolé j'ai été un peu lent à intégrer vos remarques... la flemme d'avant les vacances  :Wink: 

Sinon, la version 0.8 de Qemu vient de sortir, mais elle n'est pas encore disponible dans Portage...Il faudra attendre encore un peu...

edit (23/12/05 8pm) : voilà, j'ai bien check juste avant de faire la maj pour être sur de pas dire de bêtise sur la version 0.8.0... et bien là j'y retourne voir et zou, il vient d'être ajouter  :Smile: 

j'ai l'impression qu'on se moque de moi!!!

----------

## Poischack

Bonjour,

j'ai une petite question est-ce que qemu sait gérer l'USB et le boot USB ?

je suis en trian de me faire une petite distribution sur clé USB mais redémarrer à chaque fois pour tester les changements  :Sad: 

J'ai regardé chez vmware: support de l'USB mais il n'est pas possible de booter dessus.

Edit:

ce que j'aurais du faire avant tout c'est aller sur le site officiel plutot que sur google  :Very Happy: 

 *Quote:*   

> 
> 
> QEMU version 0.8.0 is out (Changelog).
> 
> Initial USB support.
> ...

 

Je vais voir mais je doute que le boot soit géré.

----------

## kopp

Et bien je dirai qu'il suffit d'indiquer comme disque dur le /dev correspondant à ta clef usb..;

genre 

```
qemu -hda /dev/sda 
```

 (ou peut-être la partition je en sais pas...)

Après si tu veux que ce soit vraiment considéré comme une clé usb, faudrait regarder plus en profondeur.

edit :

Sinon, à ce que je comprends, tu ne peux pas la considerer réellement comme une clef usb et faire booter ta machine virtuelle sur clef usb. Ce qu'on peut faire, c'est lorsqu'on branche un périphérique usb, on peut le faire interpreter par la machine virtuelle comme étant un périphérique connectée à la machine virtuelle... mais à priori après le démarrage de l'OS...

Il semble donc que ma première solution soit la bonne ...

----------

## Poischack

Genial c'est exactement ce qu'il me fallais merci.

----------

## kopp

ah oui, si tu veux quand meme pouvoir tester des trucs genre installation sur un disque dur etc, tu peux bien sur preciser un autre fichier image avec l'option -hdb et meme -hdd si nécessaire (-hdc est à éviter en cas d'utilisation de l'option -cdrom)

donc, 

```
qemu -hda /dev/sda -hdb fichier.img
```

 et zou!

----------

## BuBuaBu

La commande pour l'audio a changer :

Il ne faut plus metre -enable-audio mais -soundhw carte_a_utiliser

carte_a_utiliser pouvant etre all dans le cas où on veu utilisé toute les cartes son dispo.

----------

## kopp

Merci pour la remarque BuBuaBu. C'est intégré.

----------

## kwenspc

Pour monter une image disque vous pouvez utiliser cette commande : 

```

mount -t <TYPE_FS> <IMAGE> <POINT_DE_MONTAGE>  -o loop,offset=32256 

```

enfin sinon nickel ce ptit howto. 

(y a moyen d'avoir l'usb aussi avec l'option -usb, enfin perso chez moi ça fonctionne qu'à demi, j'ia bien les devices mais certains périfs usb ne semblent pas etre detecté...bref)

----------

## kopp

Oui l'usb n'a pas l'air encore totalement fonctionnel.

Pour ton histoire de montage, comment on fait lorsque cette image a des partitions ?

Enfin, n'ayant pas le loop device, ça veut pas trop monter chez moi.

J'avais promis de travailler ce guide plus en profondeur, il faudrait...

----------

## kwenspc

ah ça je sais pas pour les partitions. perso je préfère travailler avec plusieurs disques (via -hda, -hdb etc...)

----------

## Enlight

 *kwenspc wrote:*   

> Pour monter une image disque vous pouvez utiliser cette commande : 
> 
> ```
> 
> mount -t <TYPE_FS> <IMAGE> <POINT_DE_MONTAGE>  -o loop,offset=32256 
> ...

 

ça ça marche pour la première primaire lorsque les secteurs font 512Mo, je donnerai les formules de calcul sous peu (le temps de jouer encore un peu avec sfdisk).

par contre je ne savais pas que mount savait appliquer un offset, j'utilise un loop_device par partition perso.

----------

## BuBuaBu

 *kwenspc wrote:*   

> 
> 
> (y a moyen d'avoir l'usb aussi avec l'option -usb, enfin perso chez moi ça fonctionne qu'à demi, j'ia bien les devices mais certains périfs usb ne semblent pas etre detecté...bref)

 

Tu peu préciser comment tu fait ? La doc officielle ne m'aide pas beaucoup (enfin je la capte pas quoi...).

----------

## BuBuaBu

 *BuBuaBu wrote:*   

>  *kwenspc wrote:*   
> 
> (y a moyen d'avoir l'usb aussi avec l'option -usb, enfin perso chez moi ça fonctionne qu'à demi, j'ia bien les devices mais certains périfs usb ne semblent pas etre detecté...bref) 
> 
> Tu peu préciser comment tu fait ? La doc officielle ne m'aide pas beaucoup (enfin je la capte pas quoi...).

 

Finalement j'ai reussi, il faut pour avoir le support de l'usb :

lancé qemu avec l'option -usb et -monitor dev où dev est la console où on veu discuter avec qemu.

Dans cette console on va pouvoir taper :

info usbhost ce ui va donner la liste des periph USB

et ensuite add_usb host:1234:5678 ou 1234:5678 est l'adresse de votre periph usb vu dans la liste précédente.

----------

## synss

juste au passage, il est dangereux d'utiliser

```
qemu -hda /dev/sda1
```

sur une partition montee

```
 qemu -snapshot /dev/sda1
```

est mieux

Pour avoir le reseau ds la machine hote, la seule explication claire et simple que j'ai trouvee est dans le forum en allemand. Un truc avec le module "tun" dans le kernel etc. C'est  possible mais pas simple.

dans qemu 0.8, -usb est l'option par defaut

je crois que monter /tmp en tmpfs aide beaucoup.

Mais la, je suis au boulot sous windows 2000 pro alors je resterai dans le vague...

Les machines hote et virtuelle peuvent communiquer via samba.

le format qcow est compresse (un fichier foo.raw 1G occupe 1G sur la machine hote ; un fichier foo.qcow 1G n'occupe que la taille des donnees de la machine virtuelle, i.e. si le disque virtuel est plein a 50%, le fichier foo.qcow pesera 0.5G) 

MAIS

1. il n'est pas possible de monter un fichier qcow avec mount -o loop

2. fdisk foo.qcow n'a pas vmt de sens (corrigez moi si je me trompe)

et

qemu-img peut convertir d'un format vers un autre

----------

## synss

Pour le reseau, avec qemu 8.1:

```
CONFIG_TUN=m
```

```
modprobe tun
```

```
[...]

-A FORWARD -d 10.0.2.5 -j ACCEPT 

-A FORWARD -s 10.0.2.5 -j ACCEPT

[...]
```

Et ca marche.

La machine virtuelle (VM) est configuree par defaut pour chercher une gateway a l'adresse IP 10.0.2.5

donc dans la machine hote, il suffit de rediriger les paquets envoyers par la VM (10.0.2.2) a sa gateway (10.0.2.5) vers la veritable connection internet de l'hote.

Il faut aussi lire la doc de Fabrice Bellard. C'est particulierement interessant. Il a implemente un moyen tres simple de faire passer des fichiers vers une VM windows avec 

```
qemu winxp.img -fda fat:floppy:/my_directory
```

. Windows va prendre votre repertoire "my_directory" pour une disquette formatee en FAT, et donc lisible.

Et autre choses interessantes.

----------

## man in the hill

Salut,

Pour ceux qui veulent émuler du 64bit !

https://forums.gentoo.org/viewtopic-t-402060-start-0.html?sid=fdc8c5c171245b01a25b28ddf0d81e33

Enjoy !

@ +

----------

## titoucha

Juste une question, je suis en pleine installation d'un BSD tout fonctionne bien et est assez réactif la seule chose qui est effroyablement lente c'est l'installation proprement dite ou plutôt la copie du système sur le disque virtuel.

Ma question donc, est ce normal docteur  :Wink: 

----------

## Mickael

juste pour info, j'avais tenté d'émuler un windows 2000 et tout comme toi la copie était longue!

----------

## kopp

Personnellement j'avais installé Win98 et tout était lent, que ce soit copie ou système, mais c'était il y a déjà quelque temps maintenant. Là je sais pas si qemu compile avec GCC 4 ou pas, donc je vais pas tester.

@man in the hill: Merci, faudra que je pense à intégrer ceci.

----------

## titoucha

La dernière version de qemu ne compile pas avec GCC 4, j'ai du remettre une version 3.

----------

## Temet

Tout en stable (gcc et qemu), ça ne compile pas ...

----------

## man in the hill

 *titoucha wrote:*   

> La dernière version de qemu ne compile pas avec GCC 4, j'ai du remettre une version 3.

 

Moi aussi, j'ai remis gcc-3.x.x !

Comment tu fais pour la connexion internet car j'ai bien bien activer le driver TUN dans le kernel et je l'ai bien chargé sauf que je n'ai aucune interface tun0 qui a été créé, ma machine virtuel a bien reçu une IP par le dhcp de qemu !  En plus j'essais d'installer OpenBSD 32bit ... Je n'ai pas encore fait une install digne de ce nom, ils ont tous eu un blème  :Twisted Evil:  ..  Est-ce que c'est fluide et que ça vaut vraiment la peine ?

@ +

[EDIT] Apparement c'était le serveur distant de openbsd qui avait un problème , j'ai changé et c'est OK donc on a pas besoin de TUN ...[/EDIT]

----------

## titoucha

J'ai testé hier plusieurs versions de FreeBSD et j'ai constaté que mon matériel est trop récent et donc pas bien reconnu, surtout toute la partie réseau (Ethernet et wifi), après avoir gaspillé cinq CD, parce quavec Qemu j'y serais encore, j'ai arrêté.

J'ai survolé le guide d'installation de OpenBSD et je n'ai pas trop compris quelle image de boot je devais prendre et comment procéder.

@Temet, Qemu en stable ne compile pas, je suis en testing.

----------

## man in the hill

 *titoucha wrote:*   

> J'ai testé hier plusieurs versions de FreeBSD et j'ai constaté que mon matériel est trop récent et donc pas bien reconnu, surtout toute la partie réseau (Ethernet et wifi), après avoir gaspillé cinq CD,

 

C'est dommage  :Twisted Evil: , je pensais que surtout FreeBSD était quasiment comme Linux au niveau de la reconnaissance matériel ... Tu as regardé leur liste de materiels compatibles ?

 *titoucha wrote:*   

> parce quavec Qemu j'y serais encore, j'ai arrêté.

 

Là, tu me fais bien marré   :Laughing:  car qemu m'a bien gavé mais ça a l'air pour l'instant de vouloir installer OpenBSD 32bit, en espérant qu'il n'y aura pas un plantage en route car avec ma connexion je mets facilement des heures pour installer tous les paquets y compris X mais sans bureau ... Je lui metterais un fluxbox ...  

 *titoucha wrote:*   

> J'ai survolé le guide d'installation de OpenBSD et je n'ai pas trop compris quelle image de boot je devais prendre et comment procéder.

 

La doc est bien fourni :

http://www.openbsd.org/faq/fr/index.html

Il te faut l'image [i]cd40.iso[/code] qui est vraiment très light ... va te permettre de booter, choisir la locale du clavier, partitionner, configurer le net  car les paquets seront installé via le net ensuite ...  La doc est vraiment exellente et je pense que tu ne t'y perdras pas ...

 *titoucha wrote:*   

> @Temet, Qemu en stable ne compile pas, je suis en testing.

 

Je lui ai dis de passer en testing   :Wink:   :Razz: 

@ +

----------

## titoucha

 *man in the hill wrote:*   

> C'est dommage , je pensais que surtout FreeBSD était quasiment comme Linux au niveau de la reconnaissance matériel ... Tu as regardé leur liste de materiels compatibles ?

 

J'ai regardé, après   :Embarassed:   et mon matériel n'est pas dans la base de données.

 *man in the hill wrote:*   

> 
> 
> La doc est bien fourni :
> 
> http://www.openbsd.org/faq/fr/index.html
> ...

 

J'ai regardé ce matin et j'ai voulu installer la version 64bits avec Qemu, mais au bout de quinze minutes de boot et rien ne se passait, j'ai viré Qemu.   :Twisted Evil: 

Je vais encore sacrifier un CD et tester une installation réelle.

----------

## Zazbar

petite remarque ...

au jour d'aujourd'hui les dernieres versions de qemu ne sompilent pas avec GCC4.x.

Pour pouvoir utiliser qemu en evitant de reinstaller gcc3.x, il faut mettre dans /etc/portage/package.mask :

 */etc/portage/package.mask wrote:*   

> 
> 
> >=app-emulation/qemu-0.8.2
> 
> >=app-emulation/qemu-user-0.8.2
> ...

 

voila j'ai eu le souci ...

edit : typo

edit2 : comme indiqué ici

----------

## bouleetbil

Bonsoir,

Voila un p'tit ebuild pour un GUI qemu :

ebuild : http://www.frogdev.info/download-site-frogdev/Qemulator-0.4.3.ebuild

Site du fronted : http://qemulator.createweb.de

----------

## bouleetbil

Bonjour,

Vous le savez surement le kernel 2.6.20 inclu kvm un système de virtualisation  x86 pour  Intel VT et AMD-V.

Pour fonctionner celui-ci utilise une version modifiée de qemu. (Pour cette raison que j'ai posté ici)

Il suffit d'inclure :

```

Processor type and features  --->   

   [*] Paravirtualization support (EXPERIMENTAL)   

 Device Drivers  --->  

          Virtualization  --->  

           <M> Kernel-based Virtual Machine (KVM) support     

           <M>   KVM for Intel processors support   

           <M>   KVM for AMD processors support 

```

Ebuilds de qemu modifié sur bugzilla : https://bugs.gentoo.org/show_bug.cgi?id=157987

Site du projet : http://kvm.qumranet.com/kvmwiki

----------

