Wie liste ich Virsh-Netzwerke ohne Sudo auf?

11

Ich habe auf einem Computer mit Debian ein seltsames Verhalten festgestellt, das ich auf einem anderen Computer mit Ubuntu nicht reproduzieren kann. Wenn virshNetzwerke als normaler Benutzer aufgelistet werden, wird eine leere Liste angezeigt:

~ $ virsh net-list --all
 Name Status Autostart Persistent
-------------------------------------------------- --------

Wenn Sie denselben Befehl mit sudoausführen, wird die Standardverbindung angezeigt:

~ $ sudo virsh net-list --all
 Name Status Autostart Persistent
-------------------------------------------------- --------
 Standard aktiv nein ja

Die Berechtigungen für die Dateien selbst scheinen korrekt eingestellt zu sein:

~ $ ls -l / etc / libvirt / qemu / network
insgesamt 8
drwxr-xr-x 2 root root 4096 1. Juli 18:19 Autostart
-rw-r - r-- 1 root root 228 1. Juli 18:19 default.xml

Der Benutzer gehört zu kvmund libvirtdGruppen.

Was ist los? Warum kann ich die Netzwerke nicht als normaler Benutzer auflisten?

Arseni Mourzenko
quelle

Antworten:

11

Es scheint, dass :

Wenn nicht explizit angegeben, verwendet die virsh-Binärdatei den URI 'qemu: /// session' (zumindest unter debian).

Daher verhielten sich nicht nur virsh net-list, sondern praktisch alle Befehle, einschließlich virsh list, beim Ausführen mit anders sudo. Mit anderen Worten, virsh net-listwurde der Bereich des Benutzers anstelle der globalen verwendet.

Das macht Sinn; Der Versuch, die Standardverbindung zu erstellen und sie dann zu starten, führte zu dem Fehler "Netzwerk wird bereits von der Schnittstelle virbr0 verwendet". Ohne es zu wissen, startete ich eine zweite Verbindung mit dem Namen "Standard", während eine bereits ausgeführt wurde.

Die Lösung ist einfach:

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

tut, was ich erwartet hatte, während:

virsh net-list

nicht.

Warum hat die Ubuntu-Maschine das Problem nicht?

Laut Dokumentation :

Wenn virsh die eingestellte Umgebungsvariable findet VIRSH_DEFAULT_CONNECT_URI, wird dieser URI standardmäßig ausprobiert. Die Verwendung dieser Umgebungsvariablen ist jedoch veraltet, da libvirt sich LIBVIRT_DEFAULT_URIselbst unterstützt .

Es scheint tatsächlich, dass auf einem Ubuntu-Computer die zweite Variable definiert wurde:

ubuntu: ~ $ echo $ VIRSH_DEFAULT_CONNECT_URI

ubuntu: ~ $ echo $ LIBVIRT_DEFAULT_URI
qemu: /// system

Auf der Debian-Maschine hingegen ist keine dieser Variablen festgelegt:

debian: ~ $ echo $ VIRSH_DEFAULT_CONNECT_URI

debian: ~ $ echo $ LIBVIRT_DEFAULT_URI

Das Festlegen einer dieser Variablen qemu:///systemwürde wahrscheinlich funktionieren, aber es ist einfacher, die Verbindungszeichenfolge direkt im virshBefehl anzugeben (zumindest beim Schreiben eines Skripts).

Arseni Mourzenko
quelle
Wenn Sie ssh verwenden, ist es eine sehr gute Idee, "--connect qemu: /// system" zu verwenden.
Adrian Lopez
10

Kommentieren Sie diese Zeile in der Datei /etc/libvirt/libvirt.conf aus

uri_default = "qemu:///system"

war genug für mich in Fedora 29.

Bearbeiten: Wie hier steht, https://libvirt.org/uri.html Für Nicht-Root-Benutzer muss sich diese Datei auch in $ XDG_CONFIG_HOME / libvirt / libvirt.conf befinden

was in meinem Fall ist:

 ~/.config/libvirt/libvirt.conf

Also kopiere ich die Datei dort (bei meiner Neuinstallation) und jetzt funktioniert virsh net-list als Nicht-Root-Benutzer und muss --connect nicht spezifizieren

Orlando Nuske
quelle
0

Aus den Dokumenten rootist (meistens) erforderlich und virshchattet einen Daemon (und stöbert nicht manuell in Dateien im /etc/libvirtVerzeichnis herum , die a straceoder sysdigbestätigen werden):

   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.

Warum virsh listalso keinen Fehler zurückgibt, kann entweder ein Fehler sein oder in der virsh(1)Manpage geklärt werden ...

Thrig
quelle