logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Virtualisation avec qemu/KVM et libvirt

Nota :

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Créer des machines virtuelles c'est super intéressant pour expérimenter sans tout casser.

Voici donc une méthode utilisant l'hyperviseur KVM/qemu. J'ai choisi la techno libvirt/KVM, pour son coté «full-virtualization» apportant, en principe, de meilleures performances.

En effet, lorsqu'un CPU emule un CPU virtuel (vCPU) l'hyperviseur doit «traduire » les instructions de l'un vers l'autre. Ce qui implique un impact conséquent en terme de performances. Pour éviter ceci les technologies du type Intel VT-x et AMD-V permettent un transfert plus direct des instructions. Ce qui signifie que les instructions données au vCPU peuvent-être directement exécutés sur une partie du CPU physique.

Je considère donc qemu comme l'hyperviseur des machines virtuelles, KVM comme un agent accélérateur d'instructions et libvirt (et tous ses composants), comme un gestionnaire de VM.

Il faut, avant toute installation vérifier que le CPU de la machine hôte supporte la virtualisation.

egrep -c '(vmx|svm)' /proc/cpuinfo

Doit renvoyer autre chose que «0», pour permettre la virtualisation sur ce processeur. Sinon il faut changer de machine (ou de processeur).

Installation

Pour installer le minimum requis de dépendances:

apt install --no-install-recommends qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst dnsmasq

Puis vérifier l'état du système libvirtd (le daemon de libvirt):

systemctl status libvirtd.service

Qui doit renvoyer quelque chose dans le genre de:

systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-05-07 13:54:29 CEST; 1 day 1h ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 645 (libvirtd)
    Tasks: 19 (limit: 32768)
   Memory: 32.6M
   CGroup: /system.slice/libvirtd.service
           ├─645 /usr/sbin/libvirtd
           ├─782 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --lease
           └─783 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --lease

À partir de là le démon libvirtd est bien lancé.

Préparation du profil réseau

Pour pouvoir utiliser des VM via virsh (l'outil en ligne de commande permettant la gestion de libvirt) en user non privilégié (pas root, donc) il va falloir ajouter cet user dans les groupes libvirt et libvirt-qemu.

adduser <nom_d'user> libvirt
adduser <nom_d'user> libvirt-qemu

Puis, ajouter le groupe au groupset de l'utilisateur:

newgrp <user> libvirt
newgrp <user> libvirt-qemu

Il va maintenant s'agir de lancer le profil réseau de libvirt. Pour des VM créées en user non privilégié, il faudra utiliser sudo, sinon passer root via:

su -l

. Libvirt utilise un profil déja enregistré sous le nom de « default». On va donc le lancer et le passer en auto-start afin d'éviter d'avoir à le faire à chaque utilisation:

sudo virsh net-start default
sudo virsh net-autostart default
Attention: Avant d'éditer un profil réseau il est impératif de le stopper!

En cas de besoin, vous pouvez stopper le profil réseau via:

sudo virsh net-autostart default

La liste des profil réseau existants s'obtient via:

sudo virsh net-list --all

Ce qui doit renvoyer, pour un service nommé «default» lancé:

virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

Création du bridge réseau

Pour lier la VM à l'interface réseau de la machine hôte (host) il faut créer un bridge, ici appellé br0.

Plusieurs possiblités, via network-manager ou via le fichier /etc/network/interfaces.

Ici, j'ai éliminé l'usage de network-manager que je n'utilise que sur des machines disposants d'une connection wifi. Un tuto sur son usage est cependant disponible ici: https://debian-facile.org/doc:reseau:network-manager

Donc, pour un bridge réseau, éditer le fichier /etc/network/interfaces de la manière suivante, en remplaçant évidemment le nom des interfaces par les votres:

vim /etc/network/interfaces
source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug enp0s7
iface enp0s7 inet manual
 
# This is an autoconfigured IPv6 interface
iface enp0s7 inet6 manual
 
# Bridge interface
auto br0
iface br0 inet dhcp
    bridge_ports enp0s7
    bridge_stp off
    bridge_maxwait 0
    bridge_fd 0
1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
atelier/chantier/virtualisation-avec-libvirt.1588947126.txt.gz · Dernière modification: 08/05/2020 16:12 par framend

Pied de page des forums

Propulsé par FluxBB