Table des matières

KVM/QEMU

KVM (Kernel-based Virtual Machine) est une solution de virtualisation libre. Cette technologie est intégrée au noyau Linux. Elle a plusieurs avantages :

QEMU est une machine virtuelle (ou émulateur). On peut utiliser ce dernier sans dépendre de l'hyperviseur KVM.

Dans cette page nous allons voir comment utiliser ces deux technologies ensemble par l'intermédiaire de la bibliothèque libvirt.

Le système hôte est une Debian. Il faudra adapter la partie “Installation” à d'autres distributions.

De plus, on va uniquement s'intéresser à l'architecture x86.

Toutes les manipulations doivent se faire avec un utilisateur privilégié.

Installation

apt install --no-install-recommends qemu-system-x86 qemu-utils qemu-block-extra

Pour gérer les machines virtuelles, on installe également les paquets liés à libvirt.

On utilise ici, l'option –no-install-recommends sinon avec la gestion des dépendances, on va également installer le paquet virt-manager. Or dans notre cas on souhaite en utiliser un autre.

apt install --no-install-recommends libvirt-clients libvirt-daemon-system virtinst libosinfo-bin

Lancement du service

En principe le service libvirtd est actif, pour vérifier son état → systemctl status libvirtd. Si ce n'est pas le cas :

systemctl start libvirtd
systemctl enable libvirtd

La dernière ligne précise, que ce service doit être lancé à chaque démarrage de la machine.

Gestion du réseau

Avant de créer notre première machine virtuelle, il faut activer le réseau :

virsh net-list --all
 Nom       État      Démarrage automatique   Persistent
---------------------------------------------------------
 default   inactif   no                      Oui

Pour changer cet état, virsh net-start default. Pour éviter de devoir taper la commande précédente à chaque fois, on active l'option net-autostartvirsh net-autostart default.

virsh net-list --all
 Nom       État    Démarrage automatique   Persistent
-------------------------------------------------------
 default   actif   Oui                     Oui

On constate, que l'état du réseau à changer.

Création d'une machine virtuelle

Un utilisateur classique est suffisant, ici.

Dans un premier temps, nous allons définir une image disque, d'une taille définie (cela représente en quelque sorte un disque dur physique).

Pour notre essais, nous allons partir sur 20G, et installer la Linux Mint 20.2 1).

fallocate -l 20G linuxmint-20.img

Puis cette image disque doit être dans un format (Qcow) compréhensible par QEMU.

qemu-img create -f qcow2 linuxmint-20.img 20G

Maintenant nous allons créer à proprement parler notre machine virtuelle (on parle de « domaine » dans le jargon libvirt).

Il faut lancer les commandes ci-dessous avec un utilisateur privilégié (root ou précédé de sudo).

virt-install --connect qemu:///system \
    --name linuxmint \
    --virt-type kvm \
    --hvm \
    --ram 2048 \
    --noautoconsole \
    --disk path=linuxmint-20.img,size=20 \
    --network bridge=virbr0 \
    --cdrom linuxmint-20.2-mate-64bit.iso \
    --graphics vnc \
    --os-variant ubuntu20.04

On va détailler les différentes options :

Si la commande s'est bien exécutée → virsh list –all. Avec une session VNC, il vaut mieux éditer (à chaud → virsh edit linuxmint) le fichier de configuration de la machine virtuelle pour avoir un clavier AZERTY (fr). On rajoute un attribut keymap au nœud graphics.

Ci dessous les attributs par défaut du nœud graphics :

[...]
    <graphics type='vnc' port='-1' autoport='yes'>
      <listen type='address'/>
    </graphics>
[...]

Après avoir rajouter l'attribut keymap.

[...]
    <graphics type='vnc' port='-1' autoport='yes' keymap='fr'>
      <listen type='address'/>
    </graphics>
[...]

Quand on modifie un paramètre de la machine virtuelle, il est préférable de la relancer.

virsh destroy linuxmint

Cette commande peut endommager la machine virtuelle (dans notre cas, il n'y a rien). Sinon il faut privilégier l'option shutdown.

Pour la lancer :

virsh --connect qemu:///system start linuxmint
1)
Il faut avoir l'image .iso quelque part sur le disque dur.
2)
Linux Mint 20 est basée sur Ubuntu 20.04, osinfo-query os | grep ubuntu.