Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sysadmin:tips:libvirt [2012/08/29 16:36] james ajout static dhcp + DNS |
sysadmin:tips:libvirt [2021/04/07 17:00] (Version actuelle) james [Utiliser les commandes virsh en tant qu'utilisateur] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>virtualisation libvirt clavier keymap azerty vnc boot PXE reseau VM dnsmasq adresse ip statique dhcp images qcow raw iso}} | ||
+ | |||
====== Libvirt ====== | ====== Libvirt ====== | ||
+ | |||
+ | ===== Changer l'emplacement des images disques et images ISO ===== | ||
+ | |||
+ | Par défaut (en tout cas sous ubuntu ;p) les images disque sont sensées être stockées dans le répertoire "/var/lib/libvirt/images/" ce qui est à mon sens tout sauf pratique si vous faites partie des gens qui soit n'allouent pas une partition / de quelques centaines de Go ou encore qui souhaitent utiliser juste un sous répertoire d'une partition deja montée ailleurs. | ||
+ | |||
+ | On peut s'en assurer avec un <code>virsh pool-dumpxml default </code> | ||
+ | |||
+ | Pour changer le répertoire par défaut des nouvelles images disque, lancer un shell virsh et utiliser les commandes suivantes, par exemple pour utiliser le répertoire /mnt/monGrosTas/VMs_KVM :<code> | ||
+ | virsh # pool-destroy default | ||
+ | virsh # pool-undefine default | ||
+ | virsh # pool-define-as --name default --type dir --target /mnt/monGrosTas/VMs_KVM | ||
+ | virsh # pool-autostart default | ||
+ | virsh # pool-start default</code> | ||
+ | |||
+ | Pendant qu'on est la dedans il peut être judicieux de définir un "pool" contenant les images ISO d'installateurs pour faciliter la creation de VMs depuis "virt-manager" :<code> | ||
+ | virsh # pool-define-as --name local-iso --type dir --target /mnt/monGrosTas/ISOs | ||
+ | virsh # pool-autostart local-iso | ||
+ | virsh # pool-start local-iso</code> | ||
+ | |||
+ | On peut aussi définir un pool accédé directement en NFS (libvirt se chargera tout seul de faire le montage), comme par exemple : | ||
+ | * Créer un fichier /tmp/iso.xml avec le contenu suivant : <code> | ||
+ | <pool type='netfs'> | ||
+ | <name>isos</name> | ||
+ | <source> | ||
+ | <host name="nfs.mondomaine.com"/> | ||
+ | <dir path="/srv/iso"/> | ||
+ | <format type='nfs'/> | ||
+ | </source> | ||
+ | <target> | ||
+ | <path>/srv/iso</path> | ||
+ | </target> | ||
+ | </pool></code> | ||
+ | * Définir le storage-pool associé : <code># virsh pool-define /tmp/iso.xml</code> | ||
+ | * Démarrer le pool : <code># virsh pool-start isos</code> | ||
+ | * Et lui dire de le redémarrer automatiquement : <code># virsh pool-autostart isos</code> | ||
===== Avoir un clavier francais en accédant à une VM en VNC ===== | ===== Avoir un clavier francais en accédant à une VM en VNC ===== | ||
Ligne 61: | Ligne 98: | ||
Il est possible de demander au dnsmasq utilisé par libvirtd d'assigner toujours la même adresse IP a une VM donnée. | Il est possible de demander au dnsmasq utilisé par libvirtd d'assigner toujours la même adresse IP a une VM donnée. | ||
+ | ==== Utilisation dynamique ==== | ||
+ | Dans son infinie bonté la commande virsh net-update a été crée la sous commande **net-update** qui s'utilise comme dans l'exemple suivant, en remplacant l'adresse MAC, le nom et l'ip selon vos besoins : | ||
+ | <code># virsh net-update default add ip-dhcp-host \ | ||
+ | "<host mac='52:54:00:83:a2:cf' \ | ||
+ | name='debianlive' ip='192.168.122.10' />" \ | ||
+ | --live --config</code> | ||
+ | |||
+ | <note>En plus de la sous commande **add**, virsh net-update peu également prendre les sous commandes **delete**, **modify** (certains items uniquement), **add-first** et **add-last** | ||
+ | Cette commande net-update peut s'utiliser avec les items suivants : | ||
+ | <code>ip-dhcp-host | ||
+ | ip-dhcp-range (add/delete uniquement, pas de modify) | ||
+ | forward-interface (add/delete uniquement) | ||
+ | portgroup | ||
+ | dns-host | ||
+ | dns-txt | ||
+ | dns-srv</code> | ||
+ | </note> | ||
+ | |||
+ | ==== Ancienne méthode nécessitant de redémarrer le réseau ==== | ||
+ | <note important>Attention cette méthode nécessite de redémarrer le réseau géré par libvirt et donc **couper le réseau de toutes les VMs**. Il faudra donc éteindre puis rallumer toutes les VMs pour leur procurer à nouveau du réseau</note> | ||
Pour ce faire, il faut éditer le réseau utilisé (dans mon cas "default") : | Pour ce faire, il faut éditer le réseau utilisé (dans mon cas "default") : | ||
* <code># virsh net-edit default</code> | * <code># virsh net-edit default</code> | ||
Ligne 67: | Ligne 124: | ||
<note>Magie, en activant ceci, vous venez aussi d'activer le fonctionnement du DNS : n'importe quelle VM pourra maintenant résoudre le nom "debianlive"</note> | <note>Magie, en activant ceci, vous venez aussi d'activer le fonctionnement du DNS : n'importe quelle VM pourra maintenant résoudre le nom "debianlive"</note> | ||
- | Vous croyez avoir fini ? que nenni : il faut ensuite redémarrer le réseau (et donc couper le réseau de toutes les VMs :'( ) de libvirt en utilisant les commandes suivantes :<code> | + | Vous croyez avoir fini ? que nenni : il faut ensuite redémarrer le réseau (et donc couper le réseau de toutes les VMs :-( ) de libvirt en utilisant les commandes suivantes :<code> |
# virsh net-destroy default | # virsh net-destroy default | ||
# virsh net-start default | # virsh net-start default | ||
Ligne 94: | Ligne 151: | ||
</code> | </code> | ||
+ | ===== Utiliser le monde monitor de KVM avec libvirt ===== | ||
+ | Pour bénéficier des commandes monitor (ici **info block**) de KVM/qemu en passant par libvirt, on peut utiliser, pour la VM ma-machine-virtuelle : <code> | ||
+ | # virsh qemu-monitor-command --hmp ma-machine-virtuelle 'info block'</code> | ||
+ | |||
+ | ===== Utiliser les commandes virsh en tant qu'utilisateur ===== | ||
+ | Vous avez tout bien fait comme il faut en ajoutant vos utilisateurs au groupe libvirt en pensant qu'ils auront le droit de voir/lancer les VMs et vous avez eu raison | ||
+ | Cependant à cause d'une conf douteuse, par defaut la conf utilisateur n'est pas la meme que la conf root/systeme par défaut | ||
+ | |||
+ | du coup si le 'virsh list' ne vous renvoie rien lorsque vous le lancez en tant qu'utilisateur simple c'est malheureusement normal. | ||
+ | |||
+ | |||
+ | En root le défaut est "qemu:%%///%%system" alors que le défaut concernant un utilisateur est "qemu:%%///%%session" ( https://listman.redhat.com/archives/libvirt-users/2015-December/msg00005.html ) , sauf que bien sur chaque utilisateur dispose de sa propre session donc un utilisateur ne peut voir/interagir que sur ses propres VMs ... pratique n'est il pas ? ;p | ||
+ | |||
+ | Tout va bien puisque vous êtes ici, deja on va commencer par tester si la commande suivante renvoie bien ce que vous attendez : la liste des VMs completes :<code> | ||
+ | $ virsh --connect qemu:///system list</code> | ||
+ | |||
+ | Et si ca marche juste en lancant la commande suivante on va lui dire d'utiliser cette valeur tout le temps pour cet utilisateur (malheureusement à exécuter pour chaque utilisateur) :<code> | ||
+ | $ echo 'uri_default = "qemu:///system"' >> ~/.config/libvirt/libvirt.conf</code> | ||
+ | |||
+ | Et voila a vous les joies du simple **virsh list** qui marche enfin comme vous l'attendiez |