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?
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 chargeLIBVIRT_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).
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
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 ...
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