« Qemu » : différence entre les versions
De Wiki doc
m (Correction des niveaux de titres) |
|||
Ligne 1 : | Ligne 1 : | ||
[[Category:virtualisation]] | [[Category:virtualisation]] | ||
=Prérequis= | |||
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un commutateur virtuel]] | * [[Open vSwitch|L'installation d'Open vSwitch et création d'un commutateur virtuel]] | ||
* Vérifier que les instructions de virtualisations sont supportés et activés : <source lang="bash" inline>egrep '^flags.*(vmx|svm)' /proc/cpuinfo</source>. Si un résultat s'affiche, c'est que c'est bon. | * Vérifier que les instructions de virtualisations sont supportés et activés : <source lang="bash" inline>egrep '^flags.*(vmx|svm)' /proc/cpuinfo</source>. Si un résultat s'affiche, c'est que c'est bon. | ||
=Installation= | |||
Qemu est disponible dans les dépôts Debian | Qemu est disponible dans les dépôts Debian | ||
Ligne 11 : | Ligne 11 : | ||
# apt install qemu-system-x86-64 | # 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. | Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer. | ||
Ligne 18 : | Ligne 18 : | ||
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez puisque vous spécifiez leur chemin dans la [[#D.C3.A9marrage_classique|commande de démarrage]] de la machine virtuelle.}} | {{astuce|Les scripts peuvent être dans l'arborescence que vous voulez puisque vous spécifiez leur chemin dans la [[#D.C3.A9marrage_classique|commande de démarrage]] de la machine virtuelle.}} | ||
==Script de démarrage de l’interface== | |||
<source lang="sh"> | <source lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
Ligne 42 : | Ligne 42 : | ||
* '''OVSTAG''' : numéro du Vlan | * '''OVSTAG''' : numéro du Vlan | ||
==Script de d'arrêt de l’interface== | |||
<source lang="sh"> | <source lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
Ligne 58 : | Ligne 58 : | ||
* '''OVSCOMMUT''' : interface de votre commutateur virtuel | * '''OVSCOMMUT''' : interface de votre commutateur virtuel | ||
==Modifier les droits== | |||
Ajouter les droits d’exécutions aux scripts | Ajouter les droits d’exécutions aux scripts | ||
# chmod +x /etc/qemu/qemu-if* | # chmod +x /etc/qemu/qemu-if* | ||
=Création d'une machine virtuelle= | |||
Création d'un disque virtuel | Création d'un disque virtuel | ||
Ligne 73 : | Ligne 73 : | ||
* '''10G''' : taille attribué au 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 | # 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 | ||
Ligne 92 : | Ligne 92 : | ||
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé | * '''-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 | # 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 | ||
Ligne 101 : | Ligne 101 : | ||
* '''-initrd''': Indique le chemin de l'image initrd | * '''-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 <code>CTRL+C</code>. | L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un <code>CTRL+C</code>. | ||
Version du 10 décembre 2017 à 10:15
Prérequis
- L'installation d'Open vSwitch et création d'un commutateur virtuel
- Vérifier que les instructions de virtualisations sont supportés et activés :
egrep '^flags.*(vmx|svm)' /proc/cpuinfo
. Si un résultat s'affiche, c'est que c'est bon.
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 variableifname
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
.