Назад | Перейти на главную страницу

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

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

~ $ virsh net-list - все
 Name                 State      Autostart     Persistent
----------------------------------------------------------

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

~ $ sudo virsh net-list - все
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     no            yes

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

~ $ ls -l / etc / libvirt / qemu / сети
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 группы.

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

Кажется, что:

Если это не указано явно, двоичный файл 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 команда (по крайней мере, при написании скрипта).

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

uri_default = "qemu:///system"

мне хватило в шляпе 29.

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

что в моем случае:

 ~/.config/libvirt/libvirt.conf

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

Из документов, 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 list не возвращает ошибку может быть ошибкой или нуждается в разъяснении в virsh(1) страница руководства ...

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

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

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