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
    
1 Name      State      Autostart   Persistent
2----------------------------------------------
3 default   inactive   no          yes

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:

    
1sudo modprobe vhost_net
2echo "vhost_net" | sudo  tee -a /etc/modules
3lsmod | grep vhost

On doit obtenir ce résultat:

    
1vhost_net              24576  0
2vhost                  49152  1 vhost_net
3tap                    28672  1 vhost_net
4tun                    49152  2 vhost_net

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:

    
1sudo adduser gobo libvirt
2sudo adduser gobo libvirt-qemu

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

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

Kernel Virtual Machine: étape 2 sur 8

Ici, on va opter pour une installation depuis une ISO.

Kernel Virtual Machine: étape 3 sur 8

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

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

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

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

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

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

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é.