Qemu

Qu’est-ce que Qemu ?

QEMU est un logiciel de virtualisation open-source qui permet d’exécuter des systèmes d’exploitation et des applications. Il peut émuler plusieurs architectures matérielles, y compris x86, x86-64, ARM, MIPS, PowerPC, etc. QEMU est souvent utilisé en combinaison avec KVM (Kernel-based Virtual Machine) pour offrir des performances de virtualisation améliorées sur les processeurs compatibles.
J’ai eu à me servir de Qemu quand j’ai travaillé sur mon PC avec Terraform. Après un moment de test avec, je compte le garder et j’ai décidé de le documenter.

Installation

Rien de très compliqué, il faudra toutefois que votre pc permet la virtualisation (que Intel VT-x ou AMD-V).

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virt-manager

Configuration

Sécurisation

QEMU et Apparmor

Ubuntu embarque par défaut Apparmor. Et quand bien même vous diriez à Libvirt de ne pas le charger, ce dernier n’en fait qu’à sa tête ! Résultat, on a des problèmes quand on veut créer un nouveau pool d’image. Il faudra préciser à AppArmor d’autoriser QEMU à aller fouiller le pool :

sudoedit /etc/libvirt/qemu.conf
#security_driver = "selinux" #Trouver la ligne qui parle de security_driver, et la configurer
security_driver = "apparmor"
sudoedit /etc/apparmor.d/libvirt/TEMPLATE.qemu

#
# This profile is for the domain whose UUID matches this file.
#

#include <tunables/global>

profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
  #include <abstractions/libvirt-qemu>
  "/srv/VMs/" r,
  "/srv/VMs/**" rwk,
}

On rajoute les deux lignes en /srv. Penser à personaliser le lien : VMs est le dossier. La seconde ligne autorise toutes les images dessous.

Utilisation

Créer une nouvelle machine

Bon, je l’ai mis parce que c’est le but de QEMU, mais go chercher, te faut 20s.

Installer les Guest tools sur Windows

Il est possible de télécharger l’équivalent des Guest Additions sur libvirt/QEMU. Pour cela, les récupérer sur le site de Fedora.

Redimensionner un disque

Avec packer, mes disques font 40Go, et tout est consommé à cause du partitionnement « ANSSI-proof ». Quand j’ai voulu re-maquetter Wazuh, j’ai eu besoin de plus d’espace sur une partition. Qu’à celà ne tienne, LVM est fait pour ça. 1ère idée, étendre la partition sur un autre disque. C’est mieux avec Terraform, mais demande de redémarrer la machine sur un live boot. Je suis tombé sur une petite doc plutôt cool qui explique comment s’en passer. Je la reprends ici au cas où :

qemu-img resize disk.qcow2 +10G #Ou 50G pour être sur une taille fixe.
sudo modprobe nbd max_part=10 #Permet de créer des faux disque sur lequel on va pouvoir plug le notre !
sudo qemu-nbd -c /dev/nbd0 disk.qcow2 #Le disque est monté en /dev/nbd0.

## Je n'ai pas trouvé la commande pour resize le PV. Donc je le fais à la "main"
gparted /dev/nbd0 #Attention, bien en tant qu'utilisateur simple, sinon 'y'a problème !
lvextend -L+1G /dev/server/var #Rajout 1G à /var. Pour la fixer : -L10G
e2fsck -f /dev/server/var
resize2fs /dev/server/var
qemu-nbd -d /dev/nbd0 #On démonte

Et voilà, on peut relancer la vm, on voit que notre disque a pris un bon +10G, la partition +1G, et il pèse toujours rien !

qcow2 vers vmdk

J’ai eu à envoyer une de mes machines sur un ESX. Voici comment faire :

cp disk.qcow2 disk_bkup.qcow2
qemu-img convert -f qcow2 -O vmdk ./disk disk.vmdk

Ok, j’avais trouvé une autre doc qui avait l’air super chiante, alors je voulais le garder, mais j’ai un peu honte là. Bref, c’est fait !

Partage de fichier entre l’hôte et la VM

Il est possible de partager des fihciers entre l’hôte et la VM. Pour cela, il faut d’abord installer virtiofsd puis créer le lecteur partagé sur la VM :

sudo apt install virtiofsd
sudo mkdir /mnt/share
sudo mount -t virtiofs share /mnt/share

TroubleShooting