Como faço para listar redes virsh sem sudo?

2

Eu notei um comportamento estranho em uma máquina usando o Debian que não posso reproduzir em outra máquina rodando o Ubuntu. Ao listar virsh redes como um usuário comum, ele mostra uma lista vazia:

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

Ao executar o mesmo comando com sudo , ele mostra a conexão padrão:

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

As permissões nos próprios arquivos parecem estar definidas corretamente:

~$ 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

O usuário pertence aos grupos kvm e libvirtd .

O que está acontecendo? Por que não posso listar as redes como um usuário comum?

    
por Arseni Mourzenko 15.09.2016 / 15:35

3 respostas

3

Parece que :

If not explicitly stated, the virsh binary uses the 'qemu:///session' URI (at least under debian).

Portanto, não apenas virsh net-list , mas praticamente qualquer comando, incluindo virsh list , se comportou de maneira diferente ao executar com sudo . Em outras palavras, virsh net-list estava usando o escopo do usuário em vez do global.

Isso faz sentido; tentar criar a conexão padrão e, em seguida, iniciá-la levou ao erro "A rede já está em uso pela interface virbr0" - sem saber, eu estava iniciando uma conexão segundo chamada "padrão", enquanto uma já estava correndo.

A solução é direta:

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

faz o que eu esperava, enquanto:

virsh net-list

não.

Por que a máquina Ubuntu não está tendo o problema?

De acordo com a documentação :

If virsh finds the environment variable VIRSH_DEFAULT_CONNECT_URI set, it will try this URI by default. Use of this environment variable is, however, deprecated now that libvirt supports LIBVIRT_DEFAULT_URI itself.

Aparentemente, na máquina Ubuntu, a segunda variável foi definida:

ubuntu:~$ echo $VIRSH_DEFAULT_CONNECT_URI

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

Na máquina Debian, por outro lado, nenhuma dessas variáveis está definida:

debian:~$ echo $VIRSH_DEFAULT_CONNECT_URI

debian:~$ echo $LIBVIRT_DEFAULT_URI

A configuração de uma dessas variáveis para qemu:///system provavelmente funcionaria, mas, bem, é mais fácil especificar a string de conexão diretamente no comando virsh (pelo menos ao escrever um script).

    
por 15.09.2016 / 17:37
0

Nos documentos, root é (principalmente) obrigatório e virsh está conversando com um daemon (e não pesquisando manualmente nos arquivos no diretório /etc/libvirt , que strace ou sysdig confirmar):

   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.

Então, por que virsh list não retorna um erro pode ser um bug ou precisar de esclarecimento na página virsh(1) man ...

    
por 15.09.2016 / 16:10
0

é possível configurar o virsh para trabalhar com o usuário local. Mais informações estão aqui:

link

basicamente você precisa configurar a regra do polkit e se conectar ao daemon libvirtd

    
por 15.09.2016 / 16:12