Как мне составить список сетей virsh без sudo?

Я заметил странное поведение на одной машине с Debian, которую я не могу воспроизвести на другой машине с Ubuntu. При перечислении сетей virsh в качестве обычного пользователя отображается пустой список:

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

При выполнении той же команды с sudo отображается соединение по умолчанию:

~$ sudo virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     no            yes

Разрешения на сами файлы кажутся настроенными правильно:

~$ ls -l /etc/libvirt/qemu/networks
total 8
drwxr-xr-x 2 root root 4096 Jul  1 18:19 autostart
-rw-r--r-- 1 root root  228 Jul  1 18:19 default.xml

Пользователь принадлежит к группам kvm и libvirtd .

Что происходит? Почему я не могу указать сети как обычный пользователь?

7
задан 15 September 2016 в 18:38
4 ответа

Похоже, что :

Если явно не указано, двоичный файл virsh использует URI 'qemu: /// session' (по крайней мере, в debian).

Следовательно,не только virsh net-list , но и практически любая команда, включая virsh list , ведет себя по-разному при работе с sudo . Другими словами, virsh net-list использовал область действия пользователя вместо глобальной.

Это имеет смысл; попытка создать соединение по умолчанию, а затем его запуск привела к ошибке «Сеть уже используется интерфейсом virbr0» - не зная об этом, я запускал второе соединение с именем «default», в то время как одно уже работало .

Решение простое:

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

делает то, что я ожидал, а:

virsh net-list

- нет.

Почему на машине Ubuntu нет проблемы?

Согласно документация :

Если virsh обнаружит установленную переменную среды VIRSH_DEFAULT_CONNECT_URI , он будет пробовать этот URI по умолчанию. Однако использование этой переменной среды не рекомендуется, поскольку libvirt поддерживает сам LIBVIRT_DEFAULT_URI .

Действительно, похоже, что на машине Ubuntu вторая переменная была определена:

ubuntu:~$ echo $VIRSH_DEFAULT_CONNECT_URI

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

На машине Debian, на с другой стороны, ни одна из этих переменных не установлена:

debian:~$ echo $VIRSH_DEFAULT_CONNECT_URI

debian:~$ echo $LIBVIRT_DEFAULT_URI

Установка одной из этих переменных в qemu: /// system , вероятно, сработает, но, что ж, проще указать строку подключения непосредственно в команда virsh (по крайней мере, при написании скрипта).

9
ответ дан 2 December 2019 в 23:24

Из документации (в основном) требуется root , а virsh общается с демоном (а не копается вручную в файлах в / etc / libvirt каталог, который strace или sysdig подтвердит):

   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.

Итак, почему список virsh не возвращает ошибка может быть ошибкой или нуждается в разъяснении на странице руководства virsh (1) ...

0
ответ дан 2 December 2019 в 23:24

можно настроить virsh для работы с локальным пользователем. Дополнительная информация здесь:

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

в основном вам нужно настроить правило polkit и подключитесь к демону libvirtd

0
ответ дан 2 December 2019 в 23:24

раскомментируйте эту строку в файле /etc/libvirt/libvirt.conf

uri_default = "qemu:///system"

, мне было достаточно в Fedora 29.

Изменить: как здесь сказано https : //libvirt.org/uri.html для пользователей без полномочий root этот файл также должен находиться в $ XDG_CONFIG_HOME / libvirt / libvirt.conf

, который в моем случае:

 ~/.config/libvirt/libvirt.conf

, поэтому я копирую файл туда (при моей новой установке), и теперь virsh net-list работает как пользователь без полномочий root и не нужно указывать --connect

4
ответ дан 2 December 2019 в 23:24

Теги

Похожие вопросы