Comment virtualiser sous Debian 10 Buster? Facilement en utilisant la fonctionnalité standard de Linux: KVM (Kernel Virtual Machine).
C’est quoi?
La virtualisation consiste à faire fonctionner un système d’exploitation dans un conteneur dédié sur un ordinateur, donc en gros, un système dans un système. Plus d’infos sur la page Wikipedia. Ici, je vais virtualiser Debian 10 dans Debian 10, avec KVM.
Pourquoi?
Il y a de nombreuses réponses, comme par exemple:
- Utiliser au mieux les ressources d’une machine physique.
- Faire fonctionner plusieurs OS différents (un Linux, un Android, un Windows, etc).
- Pouvoir tester des outils sans saloper son système.
Dans mon cas, c’est le troisième point qui m’intéresse. En effet, et c’est pour ça que j’ai réinstallé Debian récemment, j’ai eu la mauvaise idée de vouloir apprendre des nouveaux frameworks (notamment Angular). Et je me suis retrouvé à installer Node.js et son célèbre NPM. S’en est suivi l’ajout d’un nombre incroyable de paquets dont l’utilité est loin d’être évidente. Sans compter sur la complexité du flux de travail si on veut utiliser plusieurs frameworks…
Comment?
Simplement (c’est un réflexe qu’on prend sous Debian: si la solution n’est pas simple, ce n’est pas la solution), en utilisant KVM (Kernel Virtual Machine). KVM étant la librairie de base, il faut lui adjoindre un autre logiciel. Et là, tout le monde crie “VIRTUALBOX”!! Alors de 1- on ne crie pas ici. De 2- Non: “VirtualBox is not in Debian main and not in Debian Buster and won’t be in Debian Buster-Backports” (voir le bug report 794466). Donc direction QEMU.
Vérifications
En premier lieu, il faut vérifier si le processeur supporte la virtualisation.
1egrep -c '(vmx|svm)' /proc/cpuinfo
Si la commande répond “0” (zéro), il faut aller dans le BIOS pour activer la virtualisation. Et si l’option n’est pas disponible, c’est fini. Dans mon cas, j’ai obtenu 8.
Ensuite vérifier le type d’architecture Intel ou Amd
1grep -E --color '(vmx|svm)' /proc/cpuinfo
vmx correspond à de l’Intel tandis que svm indique un processeur Amd. Comme j’ai lu en rouge “vmx”, je vais donc installer les packages Intel.
Installation
Tous les packages sont disponibles dans le repository principal donc on colle un petit apt-get et on attend.
1sudo apt-get -y install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager
Une fois l’installation finie, on vérifie que le service principal est démarré:
1sudo systemctl status libvirtd.service
La réponse doit être positive:
1● libvirtd.service - Virtualization daemon
2 Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
3 Active: active (running) since Sun 2020-04-12 15:13:32 CEST; 37s ago
4 Docs: man:libvirtd(8)
5 https://libvirt.org
6 Main PID: 12051 (libvirtd)
7 Tasks: 17 (limit: 32768)
8 Memory: 20.0M
9 CGroup: /system.slice/libvirtd.service
10 └─12051 /usr/sbin/libvirtd
11
12Apr 12 15:13:32 laMachineDuGobo systemd[1]: Starting Virtualization daemon...
13Apr 12 15:13:32 laMachineDuGobo systemd[1]: Started Virtualization daemon.
Maintenant on cherche les réseaux disponibles:
1sudo virsh net-list --all
Ici, le réseau par défaut n’est pas actif. On va donc l’activer avec la commande suivante:
1sudo virsh net-start default
La réponse est normalement celle-ci:
1Network default started
Ensuite, on peut activer le réseau au démarrage de la machine avec
1sudo virsh net-autostart default
Dans mon cas, comme je ne vais pas démarrer de VM au boot, je n’active pas cette option. Ensuite, il y a moyen d’améliorer les performances des VM en chargeant vhost_net donc on exécute les commandes suivantes:
On doit obtenir ce résultat:
Le dernier point est optionnel mais je le recommande fortement, c’est donner le droit à son user d’utiliser les commandes “virsh”, sans passer par sudo:
A ce stade, on a fini l’installation et on peut passer au plus sympa, c’est à dire la configuration des VMs.
Virtual Machine: création et stratégies
Création
Le plus simple est de lancer l’interface de gestion via la commande virt-manager. Ensuite, il y a 9 étapes à traiter pour obtenir une belle VM. Bien sûr, il faut préalablement avoir téléchargé l’OS qu’on veut installer.
Kernel Virtual Machine: étape 1 sur 8
Il faut choisir le type d’émulateur puis cliquer sur l’icône “Create” (la première en haut à gauche et seule cliquable)
Kernel Virtual Machine: étape 2 sur 8
Ici, on va opter pour une installation depuis une ISO.
Kernel Virtual Machine: étape 3 sur 8
On choisit l’ISO et vérifie que le manager a trouvé le bon OS.
Kernel Virtual Machine: étape 4 sur 8
Il faut affecter les ressources: ici 8Go de mémoire maxi et 2 processeurs. On peut changer plus tard si cela devient nécessaire.
Kernel Virtual Machine: étape 5 sur 8
Ensuite, on doit décider de la taille disque allouée à la VM.
Kernel Virtual Machine: étape 6 sur 8
Il faut ensuite nommer la VM et choisir la connexion réseau à utiliser.
Kernel Virtual Machine: étape 7 sur 8
Pour finir l’écran permettant de modifier la plupart des options de la VM. Il faut cliquer sur “Begin installation” et attendre.
Kernel Virtual Machine: étape 8 sur 8
Ouhouh! La VM est démarrée et propose l’installation de l’OS contenu dans l’ISO. Y a plus qu’à.
Kernel Virtual Machine: c’est prêt
Stratégie
A ce stade, je conseille d’arrêter la VM et d’en faire un backup. Il serait dommage de recommencer de zéro. Ensuite, ma stratégie va être la suivante: installer les logiciels de développement nécessaire (IntelliJ, JDK, Tomcat…) puis faire une sauvegarde de l’image (que j’appelerais “image de base”). Ensuite, je pourrais installer NPM (ou autre) et tester. Si finalement j’aime bien ce que j’ai testé, je reprendrais l’image de base pour l’y intégrer. Sinon, je repartirais de l’image de base. Ainsi j’aurais un OS propre sur la machine physique et un OS virtualisé propre également.
Conclusion
Grâce à la virtualisation, on conserve facilement un poste de travail propre tout en pouvant tester un maximum de conneries. Il faut bien sûr être organisé pour tenir à jour l’image de base, mais il n’y a rien de compliqué.