Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sysadmin:tips:libvirt [2011/05/25 11:25]
james ajout note console-setup
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 23: Ligne 60:
 Cette option doit se traduire par la présence dans la commande KVM lancée par libvirt de "-k fr", vous pouvez vérifier avec un petit "ps aux". Cette option doit se traduire par la présence dans la commande KVM lancée par libvirt de "-k fr", vous pouvez vérifier avec un petit "ps aux".
  
 +===== Configurer libvirt pour autoriser le boot PXE =====
 +Le reseau par defaut déclaré dans libvirt ne permet pas le boot réseau, pour le permettre il faut définir un réseau comme suit :
 +  * exporter l'​ancien reseau en XML :
 +<​code>​
 +# virsh net-dumpxml > /​tmp/​network.xml
 +</​code>​
 +  * editer le fichier XML obtenu, et rajouter les balises <​tftp>​ dans <ip> et <​bootp>​ dans <​dhcp>​. Le fichier obtenu doit ressembler à :<​code>​
 +<​network>​
 +  <​name>​default</​name>​
 +  <​uuid>​3f52b3a6-fd33-a46a-7d15-67c917fa9cc2</​uuid>​
 +  <forward mode='​nat'/>​
 +  <bridge name='​virbr0'​ stp='​on'​ delay='​0'​ />
 +  <ip address='​192.168.122.1'​ netmask='​255.255.255.0'>​
 +    <tftp root='/​mnt/​data/​tftpboot'​ />
 +    <​dhcp>​
 +      <range start='​192.168.122.2'​ end='​192.168.122.254'​ />
 +      <bootp file='​pxelinux.0'​ />
 +    </​dhcp>​
 +  </ip>
 +</​network>​
 +</​code>​
 +<​note>​Il faut bien sur adapter le parametre root du tftp pour utiliser le repertoire de votre choix comme racine du serveur TFTP.</​note>​
 +  * réimporter ce nouveau réseau :<​code>​
 +# virsh net-destroy default
 +# virsh net-define /​tmp/​network.xml
 +# virsh net-autostart default
 +# virsh net-start default</​code>​
 +  * verifier la presence des options passées a dnsmasq, par exemple :<​code>​
 +$ ps aux | grep dnsmasq
 +nobody ​   1739  0.0  0.0  21688  1116 ?        S    10:03   0:02 dnsmasq --strict-order --bind-interfaces --pid-file=/​var/​run/​libvirt/​network/​default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,​192.168.122.254 --dhcp-lease-max=253 --dhcp-no-override --enable-tftp --tftp-root /​mnt/​data/​tftpboot --dhcp-boot pxelinux.0
 +</​code>​ noter le " --enable-tftp --tftp-root /​mnt/​data/​tftpboot --dhcp-boot pxelinux.0"​.
 +<​note>​Pour que le boot PXE fonctionne avec kvm, il faut disposer d'un firmware des cartes reseau utilisées dans les VMs gérant le boot PXE. Pour les obtenir, sur ubuntu 11.04 il faut par exemple installer le paquet kvm-pxe :<​code>#​ apt-get install kvm-pxe</​code></​note>​
 +
 +
 +===== 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"​) :
 +  * <​code>#​ virsh net-edit default</​code>​
 +  * dans <​network><​ip><​dhcp>​ , ajouter une ligne pour chaque hote ressemblant à :<​code><​host mac='​52:​54:​00:​83:​a2:​cf'​ name='​debianlive'​ ip='​192.168.122.10'​ /></​code>​ ou vous l'​aurez compris, il faut remplacer l'​adresse MAC par celle de votre VM, mettre le nom que vous souhaitez, et une adresse IP appartenant au range défini
 +
 +<​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>​
 +# virsh net-destroy default
 +# virsh net-start default
 +</​code>​
 +
 +
 +===== Exemple de fichier de configuration reseau complet =====
 +<​code>​
 +<​network>​
 +  <​name>​default</​name>​
 +  <​uuid>​3f52b3a6-fd33-a46a-7d15-67c917fa9cc2</​uuid>​
 +  <forward mode='​nat'/>​
 +  <bridge name='​virbr0'​ stp='​on'​ delay='​0'​ />
 +  <domain name='​kvm.vm'/>​
 +  <ip address='​192.168.122.1'​ netmask='​255.255.255.0'>​
 +    <tftp root='/​mnt/​data/​tftpboot'​ />
 +    <​dhcp>​
 +      <range start='​192.168.122.100'​ end='​192.168.122.254'​ />
 +      <host mac='​52:​54:​00:​83:​a2:​cf'​ name='​debianlive'​ ip='​192.168.122.10'​ />
 +      <host mac='​52:​54:​00:​e9:​94:​16'​ name='​debianunstable64'​ ip='​192.168.122.11'​ />
 +      <host mac='​52:​54:​00:​ef:​10:​8e'​ name='​xivo'​ ip='​192.168.122.22'​ />
 +      <bootp file='​pxelinux.0'​ />
 +    </​dhcp>​
 +  </ip>
 +</​network>​
 +</​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
sysadmin/tips/libvirt.1306315518.txt.gz · Dernière modification: 2011/05/25 11:25 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0