Ars*_*nko 16 permissions sudo virsh
我注意到在一台使用 Debian 的机器上出现了一个奇怪的行为,我无法在另一台运行 Ubuntu 的机器上重现。当virsh
以普通用户列出网络时,它显示一个空列表:
~$ virsh 网络列表 --all 名称 状态 自动启动 持久 -------------------------------------------------- --------
使用 运行相同的命令时sudo
,它会显示默认连接:
~$ sudo virsh 网络列表 --all 名称 状态 自动启动 持久 -------------------------------------------------- -------- 默认活动 否 是
文件本身的权限似乎设置正确:
~$ ls -l /etc/libvirt/qemu/networks 共 8 个 drwxr-xr-x 2 根 4096 7 月 1 日 18:19 自动启动 -rw-r--r-- 1 根根 228 Jul 1 18:19 default.xml
用户属于kvm
和libvirtd
组。
怎么了?为什么我不能以普通用户的身份列出网络?
Ars*_*nko 14
看来:
如果没有明确说明,virsh 二进制文件使用 'qemu:///session' URI(至少在 debian 下)。
因此,不仅virsh net-list
,但几乎任何命令,其中包括virsh list
,与运行时表现不同sudo
。换句话说,virsh net-list
正在使用用户的范围而不是全局范围。
这是有道理的;尝试创建默认连接然后启动它会导致“网络已被接口 virbr0 使用”错误——在不知情的情况下,我正在启动第二个名为“default”的连接,而一个已经在运行。
解决方案很简单:
virsh --connect qemu:///system net-list
Run Code Online (Sandbox Code Playgroud)
做我期望它做的事情,同时:
virsh net-list
Run Code Online (Sandbox Code Playgroud)
没有。
为什么 Ubuntu 机器没有问题?
根据文档:
如果 virsh 找到环境变量
VIRSH_DEFAULT_CONNECT_URI
集,它会默认尝试这个 URI。但是,由于 libvirt 支持LIBVIRT_DEFAULT_URI
自身,因此不推荐使用此环境变量。
看来,确实,在 Ubuntu 机器上,定义了第二个变量:
ubuntu:~$ echo $VIRSH_DEFAULT_CONNECT_URI ubuntu:~$ echo $LIBVIRT_DEFAULT_URI qemu:///系统
另一方面,在 Debian 机器上,没有设置这些变量:
debian:~$ echo $VIRSH_DEFAULT_CONNECT_URI debian:~$ echo $LIBVIRT_DEFAULT_URI
将这些变量之一设置为qemu:///system
可能会起作用,但是,直接在virsh
命令中指定连接字符串更容易(至少在编写脚本时)。
Orl*_*ske 12
在文件 /etc/libvirt/libvirt.conf 中取消注释这一行
uri_default = "qemu:///system"
Run Code Online (Sandbox Code Playgroud)
在 Fedora 29 中对我来说已经足够了。
编辑:正如这里所说的https://libvirt.org/uri.html对于非 root 用户,该文件也需要在 $XDG_CONFIG_HOME/libvirt/libvirt.conf 中
在我的情况下是:
~/.config/libvirt/libvirt.conf
Run Code Online (Sandbox Code Playgroud)
所以我将文件复制到那里(在我的全新安装中),现在 virsh net-list 作为非 root 用户工作,不需要 espicify --connect
归档时间: |
|
查看次数: |
13973 次 |
最近记录: |