Comment virtualiser un OS sur un simple PC hôte ?
Je propose ici une solution simple et open-source : Qemu-KVM. Elle permet de créer des machines virtuelles, puis de les gérer à partir d'une interface graphique : par exemple les démarrer indépendamment les unes des autres.
Je l’utilise avec succès depuis plusieurs années, sur un PC mono-processeur multi-coeurs (Intel i5). Elle est stable, plutôt rapide et facile d’utilisation.
En terme de virtualisation, plusieurs pistes sont aujourd’hui facilement disponibles sur une distribution Linux, notamment :
N’étant pas particulièrement exigeant sur les capacités techniques ou fonctionnalités étendues, je voulais une solution simple à utiliser et rapide à mettre en œuvre. Il s’agissait avant tout de disposer de machines virtuelles me permettant de tester différentes distribution Linux, voire d’effectuer des tests sur un clône de mon PC hôte. Ce dernier cas d’usage s’est avéré intéressant pour choisir des nouvelles applications ou bien compiler des applications non disponibles en bibliothèque !
Pour toutes ces raison, j’ai choisi la solution Qemu déclinée dans KVM, d’où la dénomination « Qemu-KVM » que l’on peut retrouver dans les packages Debian.
Par défaut, le PC hôte partage ses ressources physiques :
Chaque machine virtuelle consomme au moins 1 coeur du processeur, 8 Go de disque et 1 Go de RAM. Ces valeurs sont des prérequis usuels pour installer une distribution Linux.
Attention : il s’agit d’une consommation exclusive, c’est-à-dire réservée et allouée par le PC hôte. Tous ces chiffres s'additionnent, donc il faut faire attention à respecter les ressources physiques du PC hôte avant de lancer plusieurs machines virtuelles simultanément !
En ce qui concerne l’utilisation du disque : la machine virtuelle y sera stockée sous forme de fichier binaire. La taille du fichier représente :
Ces partitions sont proposées lors de l'installation de la distribution dans sa machine virtuelle, et n'ont rien à voir avec la virtualisation à proprement parler.
Par ailleurs, si l’on souhaite échanger des fichiers entre machines virtuelles, il faudra créer un serveur Samba quelque part sur le PC hôte ou une des machines virtuelles. Ou bien utiliser le cloud, un NAS, un serveur tiers.
Je vous laisse consulter par vous-même la littérature disponible sur le web sur KVM !
Par hypothèse, je vais utiliser mon PC hôte : il repose sur une distribution AntergOS (https://antergos.com), motorisée par Linux ARCH. J’ai testé l’installation avec succès début 2019.
Pour ceux qui utilisent une distribution basée sur DEBIAN, j’indique également la marche à suivre, mais n’ai pas testé ce contexte depuis mi-2018.
Sur ArchLinux, les packages à installer sont les suivants :
On peut effectuer l’installation soit à partir du client Pacman disponible dans la distribution, soit en ligne de commande.
- Sur Debian, les packages à installer sont les suivants :
Remarque : le package « dnsmasq » est préinstallé dans la distribution. Si ce n’est pas le cas, il faudra l’ajouter à la liste...
Après l’installation des packages, il faut autoriser le service « libvirtd » afin qu’il soit automatiquement lancé au démarrage du PC hôte.
- Sur ArchLinux :
sudo systemctl enable libvirtd.service
- Sur Debian :
sudo service libvirtd enable
Si l’on se connecte via un compte utilisateur standard, il faut également intégrer cet utilisateur <youruser> aux groupes "kvm" et "libvirt".
- Sur ArchLinux :
usermod -aG libvirt,kvm <youruser>
- Sur Debian :
adduser <youruser> libvirt kvm
Enfin, redémarrer le PC hôte afin que tout soit OK.
Ouvrir une session et lancer l’application « Virt-Manager » qui est l’interface graphique de gestion des machines virtuelles.
Il arrive fréquemment que le service « libvirtd » n’ait pas démarré au boot du PC hôte. Aussi, avant de lancer l’interface de gestion Virt-Manager, je conseille de vérifier ce point à la 1ère utilisation :
- Sur ArchLinux :
systemctl status libvirtd.service
- Sur Debian :
sudo service libvirtd status
Si le service est en effet arrêté, il faut le lancer et l’autoriser pour le prochain redémarrage.
- Sur ArchLinux :
sudo systemctl enable --now libvirtd.service
- Sur Debian :
sudo service libvirtd enable
sudo service libvirtd restart
Maintenant, Virt-Manager devrait être totalement opérationnel.
Parfois, il est impossible de créer une machine Virtuelle dans Virt-Manager, car une erreur apparaît :
cannot create bridge 'virbr0': File exists:
Dans ce cas, il faut supprimer le bridge par défaut :
- Sur Debian :
sudo ifconfig virbr0 down
sudo brctl delbr virbr0
service libvirtd restart
On peut de nouveau lancer Virt-Manager et aller dans le menu "Edit" -> "Host details" -> "Virtual networks".
Démarrer alors le réseau par défaut.
Lors de la création d’une nouvelle Machine Virtuelle, il peut apparaître l’erreur "media location" :
Dans ce cas, il faut s'assurer que l'ISO de la distribution à installer :
Voilà de quoi vous lancer dans l'aventure !
N'oubliez pas ce que j'ai écrit en introduction : une fois installée, la solution est 100 % utilisable via l'interface graphique "Virt-Manager".
PS : si j'ai le temps, je réaliserai un article d'utilisation avec capture d'écran.