La CLI virt-install est un assistant de création de machine Virtuelle. Elle peut être lancée en mode interactif ou invoquée via un ensemble d'options décrivant la VM à créer.
bureau distant avec spice
sudo apt-get install virtinst libosinfo-bin
virt-install communique avec le service libvirtd et peut être invoquée en spécifiant le mode d'exécution souhaité via l'option --connect :
--connect qemu://session : exécution en espace utilisateur avec les droits limités de l'utilisateur ;--connect qemu://system : exécution avec un utilisateur système libvirt-qemu et des droits étendus.system avec les différents outils virt-install, virsh etc, il doit faire parti des groupes libvirt et libvirt-qemu.
Et vice-versa, selon les options utilisées lors de la création d'une VM en mode system, l'utilisateur système libvirt-qemu devra pouvoir accéder aux fichiers disques et aux ISO utilisés lors de la création de la VM pouvant se trouver dans les dossiers de l'utilisateur.
Ci-dessous un exemple de retour d'erreur lors d'une tentative de création de VM dans un dossier utilisateur sur lequel l'hyperviseur n'a pas les droits appropriés :
WARNING il se peut que /home/yoann/KVM/install_files/debian-12.5.0-amd64-netinst.iso ne soit pas accessible à l’hyperviseur. Vous devrez fournir à l’utilisateur « libvirt-qemu » des permissions de recherche pour les répertoires suivants : ['/home/yoann', '/home/yoann/KVM', '/home/yoann/KVM/install_files'] Début d’installation… ERROR Cannot access storage file '/home/yoann/KVM/debian12/vda' (as uid:64055, gid:104): Permission non accordée
Plusieurs solutions sont possibles via les droits d'accès classiques ou les ACL mais il faudra permettre à l'utilisateur système libvirt-qemu d'accéder aux ressources nécessaires à la création de la VM.
Pour ajouter l'utilisateur courant au groupe :
sudo adduser $( id -un ) libvirt-qemu
Ensuite on peut changer le groupe principal de l'utilisateur courant et créer les dossier :
newgrp libvirt-qemu mkdir -p ~/KVM/maVM
Pour définir un processeur de type pentium sur le système invité :
Plusieurs modes d'installation sont possibles, ici on a choisit de télécharger un ISO et d'installer la VM à partir de celui-ci. virt-install peut créer le fichier disque et le réseau, ici nous choisissons de les créer en amont.
lister les réseaux disponibles:
virsh net-list Name State Autostart Persistent -------------------------------------------- default active yes yes # Afficher les caractéristiques du réseau "default" virsh net-info default Name: default UUID: af20a5ca-db45-4b5e-a2ee-e50ad4c79264 Active: yes Persistent: yes Autostart: yes Bridge: virbr0
Ici il existe un réseau par défaut, le nom du pont est virbr0, on l'utilisera pour notre VM.
Plusieurs formats sont disponibles pour le fichier disque de la VM. On utilise qcow2, il sera provisionné à l'usage.
# Positionne le groupe libvirt-qemu comme groupe principal de l'utilisateur courant newgrp libvirt-qemu mkdir -p ~/KVM/debian11 cd ~/KVM/debian11 qemu-img create -f qcow2 vda 5G
Créons à présent la VM avec virt-install:
virt-install \ -n debian11-amd64 \ --description "Debian 11 codename bullseye" \ --os-type=Linux \ --os-variant=debian9 \ --ram=1024 \ --vcpus=2 \ --disk format=qcow2,path=/home/yoann/KVM/debian11/vda \ --vnc \ --cdrom /home/yoann/KVM/inst_medias/debian-11.6.0-amd64-netinst.iso \ --network bridge:virbr0
L'utilisation de l'option --os-variant est fortement recommandée. Elle prépositionne un ensemble d'options permettant d'optimiser la VM. Les valeurs possibles de --os-variant peuvent être obtenues par la commande osinfo-query os
virt-install --osinfo list
Cet exemple succinct donne les éléments de base de la syntaxe de virt-install. Des notes plus détaillées sont disponibles :
La commande osinfo-query s'installe via le paquet libosinfo-bin :
apt install -y libosinfo-bin
La commmande osinfo-query s'appuie sur un ensemble de fichiers XML présent dans /usr/share/osinfo/os/. Ils peuvent être mis à jour.
On peut spécifier un modèle de processeur pour le système invité via l'option --cpu. La liste des processeurs et des fonctionnalités associées est définie dans des fichiers XML sous /usr/share/libvirt/cpu_map/ :
Par exemple le fichier /usr/share/libvirt/cpu_map/x86_pentium.xml ;
<cpus> <model name='pentium'> <decode host='on' guest='on'/> <feature name='cx8'/> <feature name='de'/> <feature name='fpu'/> <feature name='mce'/> <feature name='mmx'/> <feature name='msr'/> <feature name='pse'/> <feature name='tsc'/> <feature name='vme'/> </model> </cpus>
Lors des premières tentatives de création de VM en espace utilisateur, la connexion de la VM en mode bridge provoquait systématiquement une erreur : confère note failed-to-parse-default-acl-file