Files
abonnel-www/44b66b04-7b1c-46a3-bbb9-d362692c5b4d/index.md
T

9.6 KiB

virt-install : créer des machines virtuelles en ligne de commande

Qu'est-ce que virt-install ?

virt-install est un outil en ligne de commande qui permet de créer et d'installer des machines virtuelles sous Linux. Il s'appuie sur la bibliothèque libvirt et utilise généralement KVM (Kernel-based Virtual Machine), la technologie de virtualisation intégrée au noyau Linux.

Là où des interfaces graphiques comme virt-manager vous font cliquer dans des fenêtres, virt-install fait tout en une seule commande. C'est particulièrement utile pour :

  • Automatiser la création de machines virtuelles (scripts, déploiements en série),
  • Travailler sur un serveur sans environnement graphique (SSH uniquement),
  • Reproduire une configuration à l'identique sur plusieurs hôtes,
  • Gagner du temps quand on crée régulièrement des VM de test.

Avec virt-install, vous spécifiez en arguments toutes les caractéristiques de la machine : quantité de mémoire vive, nombre de processeurs virtuels, taille du disque, type de système d'exploitation, configuration réseau et source d'installation (ISO, réseau, image disque existante…).

L'écosystème autour de virt-install

Pour bien comprendre l'outil, il faut situer les briques logicielles qui travaillent ensemble :

  • KVM est le module du noyau Linux qui permet à votre processeur de faire tourner d'autres systèmes d'exploitation de manière isolée et performante.
  • QEMU est l'émulateur qui simule le matériel (carte réseau, disque, écran…) vu par la machine virtuelle. Couplé à KVM, il devient très rapide car il délègue le calcul au vrai processeur.
  • libvirt est la couche d'abstraction qui pilote QEMU/KVM (et d'autres hyperviseurs). C'est elle qui gère le cycle de vie des VM : démarrage, arrêt, sauvegarde, réseau virtuel, stockage.
  • virt-install est un client de libvirt, spécialisé dans la création initiale d'une VM.

En résumé : virt-install dit à libvirt « crée-moi cette VM », libvirt configure QEMU, et QEMU utilise KVM pour exécuter la machine virtuelle.

Prérequis matériels

Pour profiter pleinement de KVM, votre processeur doit prendre en charge la virtualisation matérielle :

  • VT-x sur les processeurs Intel,
  • AMD-V sur les processeurs AMD.

Cette fonctionnalité doit aussi être activée dans le BIOS/UEFI de votre machine (elle est parfois désactivée par défaut, notamment sur les ordinateurs portables).

Pour vérifier rapidement que votre CPU est compatible :

grep -E 'vmx|svm' /proc/cpuinfo

Si la commande renvoie des lignes, c'est bon : vmx indique un CPU Intel compatible, svm un CPU AMD compatible. Si elle ne renvoie rien, soit votre processeur ne supporte pas la virtualisation, soit elle est désactivée dans le BIOS.

Installation sur Fedora Linux

Sur Fedora, l'installation se fait avec dnf. Le paquet principal s'installe ainsi :

sudo dnf install virt-install

En pratique, virt-install seul ne suffit pas : il a besoin du service libvirt pour fonctionner et de qemu-kvm pour réellement exécuter les VM. Pour une installation complète, on installe généralement l'ensemble :

sudo dnf install virt-install libvirt qemu-kvm virt-viewer

Le paquet virt-viewer est utile pour afficher l'écran de la VM depuis votre poste.

Sur Fedora, il est encore plus simple d'installer le groupe de paquets dédié à la virtualisation, qui regroupe tout ce dont vous avez besoin :

sudo dnf group install --with-optional virtualization

Une fois les paquets installés, démarrez et activez le service libvirt :

sudo systemctl enable --now libvirtd

Pour utiliser libvirt sans sudo à chaque commande, ajoutez votre utilisateur au groupe libvirt (puis reconnectez-vous) :

sudo usermod -aG libvirt $USER

Installation sur Debian, Ubuntu et Linux Mint

Sur les distributions de la famille Debian (Debian, Ubuntu, Linux Mint, MX Linux…), on utilise apt au lieu de dnf, et les noms de paquets diffèrent légèrement. Mettez d'abord la liste des paquets à jour :

sudo apt update

Puis installez la pile complète de virtualisation :

sudo apt install virtinst libvirt-daemon-system libvirt-clients qemu-kvm virt-viewer bridge-utils

Notez bien deux particularités par rapport à Fedora :

  • Le paquet s'appelle virtinst (sans tiret) et non virt-install. Une fois installé, la commande reste bien virt-install.
  • libvirt-daemon-system fournit le service système libvirt, tandis que libvirt-clients apporte les outils en ligne de commande comme virsh.

Démarrez et activez le service libvirt :

sudo systemctl enable --now libvirtd

Sur Debian et Mint, l'utilisateur doit appartenir à deux groupes pour piloter libvirt sans sudo :

sudo usermod -aG libvirt,kvm $USER

Déconnectez-vous puis reconnectez-vous (ou utilisez newgrp libvirt) pour que l'appartenance aux groupes soit prise en compte.

Vérifiez que tout fonctionne :

virsh list --all

Si vous obtenez un tableau vide sans erreur de permission, l'installation est réussie. Sur Ubuntu et Mint, le réseau virtuel par défaut est généralement actif tout de suite ; sur Debian, il faut parfois le démarrer manuellement (voir la section sur le réseau plus bas).

Note sur AppArmor (Ubuntu/Mint)

Sur Ubuntu et Linux Mint, AppArmor restreint par défaut les processus QEMU. Si vous placez vos images disque ailleurs que dans /var/lib/libvirt/images/, vous pouvez rencontrer des erreurs de permission au démarrage de la VM. Le plus simple est de respecter ce dossier par défaut, ou bien d'ajuster la profile AppArmor de libvirt (sujet plus avancé).

Anatomie d'une commande virt-install

Reprenons un exemple concret, ligne par ligne, pour créer une VM Fedora :

sudo virt-install \
  --name ma-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/ma-vm.qcow2,size=20,format=qcow2 \
  --os-variant fedora39 \
  --cdrom /chemin/vers/Fedora-Workstation-Live-x86_64-39.iso \
  --network bridge=virbr0 \
  --graphics spice

Décortiquons chaque option :

  • --name ma-vm : le nom de la machine virtuelle dans libvirt. C'est avec ce nom que vous la manipulerez ensuite (virsh start ma-vm, par exemple).
  • --ram 2048 : la quantité de mémoire vive en mégaoctets, soit 2 Go ici.
  • --vcpus 2 : le nombre de processeurs virtuels alloués à la VM.
  • --disk : crée (ou utilise) un disque virtuel. size=20 signifie 20 Go, et format=qcow2 choisit un format compact qui n'occupe que l'espace réellement utilisé sur l'hôte.
  • --os-variant fedora39 : indique à libvirt quel système va être installé, pour optimiser automatiquement la configuration. La liste des variantes disponibles s'obtient avec osinfo-query os.
  • --cdrom : le fichier ISO à utiliser comme média d'installation, comme si vous insériez un CD.
  • --network bridge=virbr0 : connecte la VM au pont réseau virbr0, le réseau virtuel par défaut créé par libvirt.
  • --graphics spice : active un affichage graphique via le protocole SPICE (plus moderne et performant que VNC). Vous pouvez aussi utiliser vnc ou none pour une VM sans interface graphique.

À l'exécution, virt-install démarre la VM et ouvre la console graphique : vous arrivez sur l'installateur de Fedora exactement comme avec une vraie machine.

Vérifier le réseau virtuel par défaut

Le pont virbr0 est créé automatiquement par libvirt, mais il peut être inactif (notamment sur Debian fraîchement installé). Vérifiez-le avec :

sudo virsh net-list --all

Si le réseau default apparaît comme inactive, démarrez-le et activez son démarrage automatique :

sudo virsh net-start default
sudo virsh net-autostart default

Aller plus loin : installation automatisée

L'un des grands intérêts de virt-install est de pouvoir installer un OS sans aucune interaction grâce à un fichier de configuration de type Kickstart (Fedora/RHEL) ou preseed (Debian/Ubuntu). Par exemple :

sudo virt-install \
  --name auto-vm \
  --ram 2048 --vcpus 2 \
  --disk size=20 \
  --os-variant fedora39 \
  --location https://download.fedoraproject.org/pub/fedora/linux/releases/39/Server/x86_64/os/ \
  --initrd-inject=/chemin/vers/ks.cfg \
  --extra-args "inst.ks=file:/ks.cfg console=ttyS0" \
  --graphics none

Ici, la VM s'installe depuis le réseau, lit un fichier Kickstart qui répond à toutes les questions de l'installateur, et tout se passe sur la console série, sans écran graphique. Idéal pour les scripts de déploiement.

Gérer la VM après création

Une fois la machine créée, virt-install passe la main à libvirt. Vous pilotez ensuite la VM avec virsh :

virsh list --all                # lister toutes les VM
virsh start ma-vm               # démarrer
virsh shutdown ma-vm            # arrêt propre
virsh destroy ma-vm             # arrêt forcé (équivalent à couper le courant)
virsh undefine ma-vm            # supprimer la définition (sans toucher au disque)
virsh console ma-vm             # ouvrir une console série

Pour afficher graphiquement l'écran de la VM depuis votre poste :

virt-viewer ma-vm

En résumé

virt-install est l'outil de référence pour créer des machines virtuelles KVM en ligne de commande sur Linux. Il s'installe facilement sur les principales distributions (dnf install virt-install sur Fedora, apt install virtinst sur Debian/Ubuntu/Mint), s'intègre avec libvirt pour gérer ensuite vos VM via virsh, et permet aussi bien l'installation interactive que l'automatisation complète via Kickstart ou preseed. Une fois la pile en place, créer une nouvelle VM ne prend plus que quelques secondes de saisie.