Eu notei um comportamento estranho em uma máquina usando Debian que não consigo reproduzir em outra máquina rodando Ubuntu. Ao listar virsh
redes como um usuário comum, mostra uma lista vazia:
~$ virsh net-list --all Nome Estado Autoinicialização Persistente -------------------------------------------------- --------
Ao executar o mesmo comando com sudo
, mostra a conexão padrão:
~$ sudo virsh net-list --all Nome Estado Autoinicialização Persistente -------------------------------------------------- -------- padrão ativo não sim
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 1 de julho 18:19 início automático -rw-r--r-- 1 root root 228 Jul 1 18:19 default.xml
O usuário pertence a grupos kvm
e libvirtd
.
O que está acontecendo? Por que não consigo listar as redes como um usuário comum?
Parece que :
Portanto, não apenas
virsh net-list
, mas praticamente qualquer comando, incluindovirsh list
, se comportou de maneira diferente ao executar comsudo
. Em outras palavras,virsh net-list
estava usando o escopo do usuário em vez dos globais.Isso faz sentido; tentar criar a conexão padrão e iniciá-la deu o erro “A rede já está em uso pela interface virbr0” - sem saber, eu estava iniciando uma segunda conexão chamada “padrão”, enquanto uma já estava em execução.
A solução é direta:
faz o que eu esperava que fizesse, enquanto:
não.
Por que a máquina Ubuntu não está tendo o problema?
De acordo com a documentação :
Parece, de fato, que na máquina Ubuntu, a segunda variável foi definida:
Na máquina Debian, por outro lado, nenhuma dessas variáveis é definida:
Definir uma dessas variáveis
qemu:///system
provavelmente funcionaria, mas, bem, é mais fácil especificar a string de conexão diretamente novirsh
comando (pelo menos ao escrever um script).descomente esta linha no arquivo /etc/libvirt/libvirt.conf
foi o suficiente para mim no fedora 29 .
Editar: como diz aqui https://libvirt.org/uri.html para usuários não root, esse arquivo também precisa estar em $XDG_CONFIG_HOME/libvirt/libvirt.conf
que no meu caso é:
então eu copio o arquivo lá (na minha nova instalação) e agora o virsh net-list funciona como um usuário não root e não há necessidade de especificar --connect
é possível configurar o virsh para trabalhar com o usuário local. Mais informações estão aqui:
https://major.io/2015/04/11/run-virsh-and-access-libvirt-as-a-regular-user/
basicamente, você precisa configurar a regra do polkit e conectar-se ao daemon libvirtd
Dos documentos,
root
é (principalmente) necessário evirsh
está conversando com um daemon (e não bisbilhotando manualmente os arquivos no/etc/libvirt
diretório, que umstrace
ousysdig
irá confirmar):Então, por
virsh list
que não retorna um erro pode ser um bug ou precisar de esclarecimento navirsh(1)
página de manual ...