Qemu

De ArchwikiFR

QEMU est un logiciel de virtualisation, au même titre que VirtualBox ou vmware.

Il existe plusieurs interfaces graphiques comme qemu-launcher, qemulator, qtemu ou encore qemudo.

Sommaire

Installation

Il existe un paquet pour qemu, qemu.

Pour savoir si votre machine est capable d'utiliser KVM :

egrep '(vmx|svm)' /proc/cpuinfo

Si vous avez une réponse, votre cpu est compatible (selon le fabricant, il se peut que cette option soit activable depuis le bios).

pacman -S qemu
Note: Pour lancer qemu avec l'option kvm : qemu -enable-kvm ...

Pour pouvoir utiliser kvm :

gpasswd -a UTILISATEUR kvm

Les modules kvm et kvm-intel/kvm-amd doivent être chargés. Ceci est normalement fait automatiquement, sinon, reportez vous à la page traitant des modules du noyau.

Utilisation

Basique

Création d'un disque dur virtuel qemu.img d'une taille de 1,5 Go :

qemu-img create qemu.img 1500M

Lancement de la machine virtuelle :

qemu -k fr -m 400 -hda qemu.img -boot d -cdrom cd.iso -net nic -net user

Descriptions des options :

  • -k fr : clavier français
  • -m 400 : spécifie la quantité de RAM
  • -hda : l'image à utiliser comme disque dur
  • -boot d : boot sur le cd
  • -cdrom : l'iso à utiliser
  • -net nic : crée une interface réseau
  • -net user : user mode networking, le dhcp et la passerelle sont émulés. Il suffit de lancer un client dhcp pour avoir accès au réseau internet de la machine hôte (en NAT). (Note: cela ne fonctionne qu'avec les protocoles tcp et udp, donc, ICMP, et par conséquent ping ne fonctionneront pas)

Réseau accessible

L'option -net user est très conviviale, mais si on veut pouvoir y accéder depuis l'hôte :

On installe les outils et on crée une interface tap :

pacman -S uml_utilities
tunctl -u votre utilisateur -t tap0
ifconfig tap0 192.168.0.1 netmask 255.255.255.0 up

On lance la machine virtuelle :

qemu -k fr -usb -m 400 -hda qemu.img -boot d \
     -cdrom cd.iso -net nic -net tap,ifname=tap0,script=no

Et depuis l'invité :

ifconfig interface_machine_virtuelle 192.168.0.10 netmask 255.255.255.0 up
Astuce: Maintenant on peut se connecter par ssh à la machine virtuelle, avec -nographic ça devient vraiment agréable.

Utilisation de ponts

Maintenant on veut plusieurs qemu et qu'ils communiquent ensemble. Pour cela on va créer un pont.

pacman -S bridge-utils

Dans l'ordre on va créer une seconde interface pour une seconde machine virtuelle.

tunctl -u mon user -t tap1

Créer une interface de pontage ethernet virtuelle, et lui donner une ip :

brctl addbr br0
ifconfig br0 192.168.0.1 up

Attacher à l'interface de pontage virtuelle br0 tap0 et tap1 :

brctl addif br0 tap0
brctl addif br0 tap1

Veillez à ce que tap0 et tap1 n'aient pas d'IP et qu'elles soient actives :

ifconfig tap0 0.0.0.0 promisc up
ifconfig tap1 0.0.0.0 promisc up

On lance les machines virtuelles comme suit :

qemu disk1.img -net nic -net tap,ifname=tap0,script=no
qemu disk2.img -net nic -net tap,ifname=tap1,script=no

/etc/qemu-ifup

L'option script=no dans les commandes précédentes indique à qemu de ne pas lancer le script de configuration de l'interface réseau. Par défaut ce script est /etc/qemu-ifup. Nous pouvons l'utiliser pour automatiser quelques tâches :

Fichier: /etc/qemu-ifup
#!/bin/sh

echo "Activation de l'interface $1"
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Ajout de $1 à br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2
chmod +x /etc/qemu-ifup

Pour faciliter un peu plus :

Fichier: qemu.sh
#!/bin/sh
IFACE=$(sudo tunctl -b -u $USER)
qemu-kvm -k fr -m 400 -net nic -net tap,ifname="$IFACE",downscript=no "$@"
sudo tunctl -d $IFACE &> /dev/null

En le plaçant dans un dossier dans le $PATH et après un :

chmod +x qemu.sh

Il ne reste plus qu'à lancer les machines avec :

qemu.sh disk.img

VDE

VDE est un réseau virtuel compatible ethernet pouvant s'adosser à un réseau physique.

VDE permet de se passer des privilèges root pour utiliser des machines virtuelles connectées entre elles et/ou au réseau.

pacman -S vde2

Il faut néanmoins préparer le terrain en root :

vde_switch -tap tap0 -daemon -mod 660 -group kvm

Pour pouvoir communiquer avec l'hôte :

ifconfig tap0 192.168.2.1 netmask 255.255.255.0 up

Pour pouvoir accéder au réseau extérieur :

sysctl net.ipv4.ip_forward=1 # -w pour sauvegarder

Pour pouvoir utiliser plusieurs invités :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(en supposant que eth0 est votre interface connectée à l'extérieur)

Une fois le terrain préparé, il n'y a plus qu'à lancer en utilisateur :

qemu -net nic -net vde disk1.img

Pour lancer une n-ième machine, il faut modifier l'adresse MAC pour ne pas avoir de conflit :

qemu -net nic,macaddr=52:54:00:12:01:00 -net vde disk2.img
Note: Depuis la doc KVM, un moyen assez simple de générer une adresse MAC aléatoire :
printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256))


USB

Pour activer l'émulation de l'usb sous qemu :

qemu -usb ...

qemu utilise l'arborescence /proc/bus/usb, pour la rendre disponible, il faut d'abord monter le répertoire :

mount -t usbfs none /proc/bus/usb

Par défaut, l'utilisateur n'a pas accès à cette arborescence, il existe plusieurs possibilités pour y accèder, la plus rapide étant de lancer en root :

chown -R utilisateur /proc/bus/usb

Pour une utilisation régulière, vous pouvez rajouter le montage à /etc/fstab et une règle udev pour donner l'accès au groupe kvm par exemple :

Fichier: /etc/fstab
none /proc/bus/usb usbfs defaults 0 0
Fichier: /etc/udev/rules.d/95-perso.rules
SUBSYSTEM=="usb", MODE="0664", GROUP="kvm"

Si vous avez déjà monté le répertoire, sans redémarrer, vous pouvez lancer :

udevadm trigger && udevadm settle


Dans un console QEMU Ctrl+Alt+2 :

info usbhost
   Device 1.2, speed 480 Mb/s
   Class 00: USB device 1234:5678, USB DISK

Pour passer le contrôle d'un périphérique à la machine émulée :

usb_add host:1234:5678

À chaque retrait/ajout de périphérique, il faut refaire la manipulation.

Vous pouvez aussi lancer qemu avec :

qemu -usb -usbdevice host:1234:5678 [...]

En vrac

  • Ctrl+Alt désactive la capture du clavier/souris,
  • Ctrl+Alt+f plein écran,
  • Ctrl+Alt+1 (ou 2-9) les consoles de QEMU.
  • Ctrl+Alt+a h l'aide QEMU en -nographic
  • Activer le port série de la machine émulée pour une utilisation avec -nographic
Outils personnels
Autres langues