Qemu

De Wiki doc

Prérequis

Installation

Qemu est disponible dans les dépôts Debian

# apt install qemu-system-x86-64

Script réseau

Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.

INFORMATION

Ce script met dynamiquement les interfaces réseaux dans le VLAN indiqué dans la variable ifname de la commande de démarrage d'une machine virtuelle. Il suffit de mettre l'id du VLAN après un trait de soulignement pour que le script puisse le gérer. Dans l'exemple, ma machine sera dans le VLAN 180.

ASTUCE

Les scripts peuvent être dans l'arborescence que vous voulez puisque vous spécifiez leur chemin dans la commande de démarrage de la machine virtuelle.

Script de démarrage de l’interface

#!/bin/sh
#Séparation du nom de l'interface de l'id du VLAN utilisé
#nomIface=`echo $1 | cut -f 1 -d '_'`
idVlan=`echo $1 | cut -f 2 -d '_'`

OVSCOMMUT=br0
OVSTAG=$idVlan
echo "Execution de /etc/qemu/qemu-ifup"
echo "Allumage de $1 pour l'ajout au pont OVS..."
ip link set $1 up promisc on
echo "Ajout de $1 à ${OVSCOMMUT}..."
ovs-vsctl --may-exist add-br ${OVSCOMMUT}
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}
sleep 2

Variables:

  • OVSCOMMUT : interface de votre commutateur virtuel
  • OVSTAG : numéro du Vlan

Script de d'arrêt de l’interface

#!/bin/sh
OVSCOMMUT=br0
echo "Execution de /etc/qemu/qemu-ifdown"
echo "Arrêt de $1 pour la suppression au pont OVS..."
ip link set $1 down
echo "Suppression de $1 à ${OVSCOMMUT}..."
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1
echo "Suppression de $1..."
ip link delete dev $1

Variable:

  • OVSCOMMUT : interface de votre commutateur virtuel

Modifier les droits

Ajouter les droits d’exécutions aux scripts

# chmod +x /etc/qemu/qemu-if*

Création d'une machine virtuelle

Création d'un disque virtuel

# qemu-img create -f qcow2 hdd.qcow2 10G

Paramètres:

  • -f qcow2 : type du disque vituel
  • hdd.qcow2 : nom de l'image disque
  • 10G : taille attribué au disque

Démarrage de la machine virtuelle

Démarrage classique

# qemu-system-x86_64 -m 1024 -name host1 -vnc :6 --enable-kvm -cpu host -smp cores=2,threads=1,sockets=1 -net nic,macaddr=52:54:00:12:34:56 -net tap,ifname=host1_180,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown -boot c --cdrom /etc/qemu/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -hda /etc/qemu/disques/hdd.qcow2

Paramètres:

  • -m 1024 : mémoire attribué a la machine virtuelle (en octets)
  • -name : nom de la machine virtuelle
  • -vnc :6 : Utilisation de VNC sur le port 5906
  • --enable-kvm : Permet la prise en charge des instructions de virtualisation du processeur
  • -cpu host : Émule un processeur KVM avec théoriquement les mêmes fonctionnalités que l'hôte (ne fonctionne qu'avec le paramètre --enable-kvm). Voir le paramètre -cpu help pour la liste des possibilités
  • -smp cores=2,threads=1,sockets=1 : Émule un multiprocesseur symétrique à mémoire partagée (on peut mettre plusieurs cœurs et plusieurs processeurs sur une machine)
  • -net nic,macaddr=52:54:00:12:34:57 : l'adresse MAC de la machine virtuelle (voir)
  • -net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown : nom de l'interface réseau sur la machine maître (limité à 15 caractères) suivie des scripts précédemment créés
  • -boot c : Démarre sur le disque dur. Le disque étant vierge, il démarre le cdrom pour l'installation et redémarrera sur le disque dur la prochaine fois (valeurs possible : c|d|n - disque principal|cdrom|réseau)
  • --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso : lien vers l'ISO du CD-ROM
  • -hda /root/hdd.qcow2 : lien vers le disque virtuel précédant créé

Démarrage sur squashfs

# qemu-system-x86_64 -m 1024 -name pxe-doc -vnc :3 --enable-kvm -cpu host -smp cores=1,threads=1,sockets=1 -net nic,macaddr=52:54:00:12:34:53 -net tap,ifname=pxe-doc_182,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown -boot c -append 'root=/dev/sda net.ifnames=0' -kernel /var/lib/lxc/lxc-pxe/rootfs/srv/tftp/noyaux/stretch/vmlinuz-4.13.0-custom -initrd /var/lib/lxc/lxc-pxe/rootfs/srv/tftp/noyaux/stretch/initrd.img-4.13.0-custom -hda /var/lib/lxc/lxc-pxe/rootfs/srv/tftp/images/stretch-pxe.squashfs

Les 3 éléments importants sont:

  • -append: définit les paramètres du noyau. Le pré-requis indispensable est la valeur root=/dev/sda qui va indiquer au noyau d'utiliser ce périphérique comme / (il est émulé. Il n'existe pas réellement).
  • -kernel: Indique le chemin du noyau
  • -initrd: Indique le chemin de l'image initrd

Arrêt de la machine virtuelle

L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un CTRL+C.

Source