abonnel-siteweb/data/pages/informatique/linux/applications/virsh.txt

148 lines
6.7 KiB
Plaintext
Raw Permalink Normal View History

2024-01-07 10:02:35 +01:00
====== virsh ======
{{ :dummy.png?75x75|}}
La commande ''virsh'' est une interface en ligne de commande pour la gestion des machines virtuelles et des réseaux sur des hôtes utilisant libvirt, une bibliothèque open-source pour la virtualisation.
===== Installation =====
La commande **virsh** est fournie par le paquet **libvirt-client**. Sur les distributions Linux basées sur Debian, vous pouvez l'installer en utilisant la commande suivante :
<code>
sudo apt install libvirt-clients
</code>
Sur les distributions Linux basées sur Fedora, vous pouvez l'installer en utilisant la commande suivante :
<code>
sudo dnf install libvirt-client
</code>
Une fois le paquet **libvirt-client** installé, vous pouvez utiliser la commande **virsh** pour gérer les machines virtuelles et les réseaux.
===== Description =====
**virsh** permet de gérer les machines virtuelles en utilisant des commandes pour créer, supprimer, démarrer, arrêter et afficher les informations sur les machines virtuelles.
Voici quelques exemples de commandes **virsh** courantes pour la gestion des machines virtuelles :
* ''virsh list'' : affiche la liste des machines virtuelles en cours d'exécution sur l'hôte.
* ''virsh start <nom-vm>'' : démarre la machine virtuelle spécifiée.
* ''virsh shutdown <nom-vm>'' : arrête proprement la machine virtuelle spécifiée.
* ''virsh destroy <nom-vm>'' : arrête la machine virtuelle spécifiée de manière forcée.
* ''virsh create <chemin-vers-fichier-XML>'' : crée une nouvelle machine virtuelle en utilisant un fichier XML décrivant sa configuration.
**virsh** peut également être utilisé pour gérer les réseaux, notamment pour créer et supprimer des bridges réseau.
===== Exemples d'utilisation =====
==== Vérification / Création de virbr0 ====
Pour vérifier si le bridge réseau **virbr0** existe sur votre système, vous pouvez exécuter la commande suivante dans un terminal :
<code>
sudo virsh net-list --all
</code>
Cela affichera la liste de tous les réseaux gérés par **libvirt**, y compris le bridge réseau **virbr0** s'il existe. Si le bridge réseau **virbr0** n'apparaît pas dans la liste, cela signifie qu'il n'a pas été créé sur votre système.
Si le bridge réseau **virbr0** n'existe pas, vous pouvez le créer en utilisant la commande suivante :
<code>
sudo virsh net-create /usr/share/libvirt/networks/default.xml
</code>
Cela créera le bridge réseau **virbr0** avec les paramètres par défaut sur votre système. Vous pouvez également personnaliser les paramètres du bridge en modifiant le fichier XML avant de créer le réseau.
Une fois que le bridge réseau **virbr0** a été créé, vous pouvez utiliser l'option ''--network bridge=virbr0'' avec [[.:virt-install]] pour spécifier que la machine virtuelle doit utiliser ce bridge réseau.
==== Fichier /usr/share/libvirt/networks/default.xml ====
Voici à quoi ressemble le fichier XML par défaut pour le réseau **virbr0** sur la plupart des systèmes basés sur **libvirt**, tel que Fedora et Ubuntu :
<code XML>
<network>
<name>default</name>
<uuid>...</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='...'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
</code>
Ce fichier définit un réseau nommé **default** avec le bridge **virbr0**. Le mode **forward** est défini sur **bridge**, ce qui active le mode bridge pour le réseau virtuel. Le réseau utilise également le protocole **DHCP** pour attribuer des adresses IP aux machines virtuelles, avec une plage d'adresses allant de 192.168.122.2 à 192.168.122.254.
Le fichier XML peut être modifié pour personnaliser les paramètres du réseau, tels que l'adresse IP du réseau, la plage d'adresses DHCP et d'autres paramètres avancés. Toutefois, il est recommandé de créer un nouveau fichier XML pour définir un réseau personnalisé plutôt que de modifier le fichier ''default.xml'', car les modifications apportées à ce fichier peuvent être écrasées lors de mises à jour ultérieures de **libvirt**.
--
Si vous utilisez un serveur DHCP externe pour vos machines virtuelles, vous n'avez pas besoin de spécifier une adresse IP statique dans le fichier XML de définition du réseau. L'adresse IP de l'hôte **libvirt** qui héberge les machines virtuelles sera attribuée automatiquement par le serveur DHCP externe. Il faut utiliser un pont réseau (bridge).
La création d'un pont réseau est généralement la première étape de la mise en place d'un environnement de virtualisation.
Si la carte réseau ''virbr0'' n'existe pas, vous pouvez créer un nouveau pont réseau nommé ''virbr0'' dans le système hôte :
<code>
sudo ip link add virbr0 type bridge
</code>
Un pont réseau est un composant qui relie plusieurs interfaces réseau ensemble pour créer un réseau logique unique. Dans ce cas, le pont **virbr0** permettra aux machines virtuelles de se connecter au réseau de l'hôte et de communiquer avec d'autres machines sur le réseau.
Lorsque la commande est exécutée, un nouveau périphérique de type pont est créé avec le nom **virbr0**. Ce périphérique peut être configuré avec des adresses IP, des règles de filtrage de paquets, des paramètres de QoS, etc.
Vérifier :
<code>
sudo ip link show type bridge
6: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 0e:fd:02:17:39:65 brd ff:ff:ff:ff:ff:ff
</code>
Ajouter l'interface réseau **enp2s0f0u9** en tant que membre du pont réseau **virbr0** :
<code>
sudo ip link set enp2s0f0u9 master virbr0
</code>
Cela signifie que tout le trafic réseau entrant ou sortant de **enp2s0f0u9** sera redirigé vers le pont **virbr0**. Les machines virtuelles connectées au pont **virbr0** peuvent alors communiquer avec **enp2s0f0u9** et d'autres machines sur le réseau.
Activer l'interface réseau **virbr0** :
<code>
sudo ip link set virbr0 up
</code>
Par conséquent, le fichier XML de définition de réseau **perso** peut ressembler à ceci sans la section <ip> :
<code XML>
<network>
<name>perso</name>
<forward mode='bridge'/>
<bridge name='virbr0'/>
</network>
</code>
Dans cet exemple, la section ''<ip>'' est supprimée car elle n'est pas nécessaire si vous utilisez un serveur DHCP externe pour vos machines virtuelles. L'adresse IP de l'hôte libvirt sera attribuée automatiquement par le serveur DHCP externe.
Vous pouvez lancer la création du réseau :
<code>
sudo virsh net-create /usr/share/libvirt/networks/perso.xml
</code>
Le résultat attendu est :
<code>
Réseau perso créé depuis /usr/share/libvirt/networks/perso.xml
</code>