我注意到在一台使用Debian的机器上出现了一个奇怪的行为,我无法在运行Ubuntu的另一台机器上重现这一行为 当以普通用户列出virshnetworking时,它显示一个空列表:
〜$ virsh net-list --all 名称状态自动启动持续 -------------------------------------------------- --------
当用sudo运行相同的命令时,它显示默认连接:
〜$ sudo virsh net-list --all 名称状态自动启动持续 -------------------------------------------------- -------- 默认激活否是是
文件本身的权限似乎设置正确:
〜$ ls -l / etc / libvirt / qemu /networking 共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组。
发生什么事? 为什么我不能把networking列为普通用户?
看来 :
如果没有明确说明,virsh二进制使用“qemu:/// session”URI(至less在debian下)。
因此,不仅virsh net-list ,但几乎任何命令,包括virsh list ,与sudo运行时performance不同。 换句话说, virsh net-list使用的是用户范围而不是全局范围。
这是有道理的; 试图创build默认连接,然后启动它导致“networking已被使用的接口virbr0”错误 – 不知道它,我开始第二个连接名为“默认”,而一个已经运行。
解决scheme很简单:
virsh --connect qemu:///system net-list
做我期待它做的,而:
virsh net-list
没有。
为什么Ubuntu机器没有问题?
根据文件 :
如果virsh发现设置了环境variables
VIRSH_DEFAULT_CONNECT_URI,它将默认尝试这个URI。 但是,此环境variables的使用现在已经被弃用,libvirt支持LIBVIRT_DEFAULT_URI本身。
实际上,在Ubuntu机器上,第二个variables是这样定义的:
ubuntu:〜$ echo $ VIRSH_DEFAULT_CONNECT_URI ubuntu:〜$ echo $ LIBVIRT_DEFAULT_URI QEMU:///系统
另一方面,在Debian机器上,没有设置这些variables:
debian:〜$ echo $ VIRSH_DEFAULT_CONNECT_URI debian:〜$ echo $ LIBVIRT_DEFAULT_URI
将其中一个variables设置为qemu:///system可能会起作用,但是,直接在virsh命令中指定连接string更容易(至less在编写脚本时)。
在文档中, root (主要)是必需的,而virsh正在聊天守护进程(而不是手动在/etc/libvirt目录中的strace或sysdig将确认的文件中进行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守护进程