web-dev-qa-db-fra.com

Comment répertorier les réseaux VIRSH sans sudo?

J'ai remarqué un comportement étrange sur une machine utilisant Debian que je ne peux pas reproduire sur une autre machine sous Ubuntu. Lorsque la liste en tant qu'utilisateur ordinaire des réseaux virsh, il affiche une liste vide:

~ Virsh $ liste net --all
 Nom État Autostart persistant 
 ------------------------------------ ---------------------- 

Lorsque vous exécutez la même commande avec Sudo, il montre la connexion par défaut:

~ $ Liste net Sudo --all
 Nom État Autostart persistant 
 ------------------------------------ ---------------------- 
 actif par défaut non oui 

Les permissions sur les fichiers eux-mêmes semblent être réglés correctement:

~ ls -l $/etc/libvirt/qemu/réseaux
 Au total 8 
 Drwxr-xr-x 2 root root 4096 1 juillet 18:19 autodémarrage 
 - rw-r - r-- 1 root root 228 1 juillet 18:19 default.xml 

L'utilisateur appartient à des groupes kvm et libvirtd.

Qu'est-ce qui se passe? Pourquoi je ne peux pas la liste des réseaux en tant qu'utilisateur ordinaire?

10
Arseni Mourzenko

Il semble que :

Si non explicitement indiqué, le binaire VIRSH utilise le "QEMU: /// Session" URI (au moins sous Debian).

Par conséquent, non seulement virsh net-list, mais pratiquement n'importe quelle commande, y compris virsh list, s'est comporté différemment lorsque vous courez avec Sudo. En d'autres termes, virsh net-list utilisait la portée de l'utilisateur au lieu de mondial.

C'est logique; Essayer de créer la connexion par défaut puis de la démarrer à LED sur "Network est déjà utilisé par interface Virbr0" Erreur - sans le savoir, je démarrais A second Connexion nommée "Par défaut", tandis qu'un était déjà en cours d'exécution.

La solution est simple:

virsh --connect qemu:///system net-list

fait ce que je m'attendais à ce que cela fasse, alors que:

virsh net-list

ne le fait pas.

Pourquoi Ubuntu Machine n'ayant pas le problème?

Selon - la documentation :

Si VIRSH trouve la variable d'environnement VIRSH_DEFAULT_CONNECT_URI Ensemble, il essaiera cette URI par défaut. L'utilisation de cette variable d'environnement est toutefois obsolète maintenant que Libvirt prend en charge LIBVIRT_DEFAULT_URI lui-même.

Il semble en effet que sur la machine Ubuntu, la deuxième variable a été définie:

ubuntu: ~ $ echo $ vidsh_default_connect_uriubuntu: ~ $ eccho $ libvirt_default_uri[.____] QEMU: /// Système 

Sur la machine Debian, d'autre part, aucune de ces variables n'est définie:

debian: ~ $ eccho $ vidsh_default_connect_uridebian: ~ $ eccho $ libvirt_default_uri

Définir une de ces variables à qemu:///system Travaillera probablement, mais bien, il est plus facile de spécifier la chaîne de connexion directement dans la commande virsh (au moins lors de la rédaction d'un script).

10
Arseni Mourzenko

définissez cette ligne dans le fichier /etc/libvirt/libvirt.conf

uri_default = "qemu:///system"

était assez pour moi à Fedora 29.

Edit: Comme il est indiqué ici https://libvirt.org/uri.html pour les utilisateurs non racinels qui ont également besoin de besoins être en $ xdg_config_home/libvirt/libvirt.conf

qui dans mon cas est:

 ~/.config/libvirt/libvirt.conf

donc je copie le fichier là-bas (sur ma nouvelle installation) et maintenant VIRSH Net-liste fonctionne comme un utilisateur non root et pas besoin d'espacer --Connect

9
Orlando Nuske

De la DOCS, root est (principalement) requis, et virsh discute un démon (et ne piquant pas manuellement aux fichiers dans le répertoire /etc/libvirt, Lequel a strace ou sysdig va confirmer):

   Most virsh operations rely upon the libvirt library being able to
   connect to an already running libvirtd service.  This can usually be
   done using the command service libvirtd start.

   Most virsh commands require root privileges to run due to the
   communications channels used to talk to the hypervisor.  Running as non
   root will return an error.

Alors, pourquoi virsh list Ne renvoie pas une erreur peut être un bogue ou besoin de clarification dans la page virsh(1) Homme ...

0
thrig

il est possible de configurer Virseh pour travailler avec l'utilisateur local. Plus d'informations sont ici:

https://major.io/2015/04/11/run-virsh-and-access-libvirt-as-a-regular-utilisateur/

en gros, vous devez configurer la règle Polkit et vous connecter au démon libvirtd

0
Martynas Saint