QEMU (Français) - ArchWiki

Jump to content

# QEMU (Français)

From ArchWiki

Related articles

- Category:Hypervisors
- Libvirt
- QEMU/Guest graphics acceleration
- PCI passthrough via OVMF

Cet article ou section a besoin d'être traduit(e).

Notes: Cet article ne respecte pas la structure de sa version anglophone, merci de le réécrire en conséquence. Vous pouvez aussi ajouter à la version anglophone les informations à-jour et dignes d’intérêt qui ne seraient portées que par la version francophone. Voir Archwiki:Translation_Team_(Français) (Discuss in Talk:QEMU (Français)#)

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.

## 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 (exemple sur une architecture x86_64):

    qemu-system-x86_64 -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)

Astuce: Pour un système en 32 bits, la commande à utiliser est : `qemu-system-i386`.

### 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-system-x86_64 -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 :

    /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 :

    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[dead link 2021-11-15 ⓘ] 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 :

    /etc/fstab

    none /proc/bus/usb usbfs defaults 0 0

    /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`

Categories:

- Emulation (Français)
- Hypervisors (Français)

Hidden categories:

- Pages or sections flagged with Template:Translateme
- Pages with dead links