使用 Fedora20 并从 qemu-2.1.1 源构建时,我在以非 root 权限运行 qemu 时遇到问题:
% qemu-system-x86_64 -hda vdisk.img -m 512M -netdev tap,helper=/usr/libexec/qemu-bridge-helper,id=net0 -device e1000,netdev=net0
failed to create tun device: Operation not permitted
failed to launch bridge helper
qemu-system-x86_64: -netdev tap,helper=/usr/libexec/qemu-bridge-helper,id=net0: Device 'tap' could not be initialized
Tun 设备具有适当的权限:
% ls -la /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Sep 30 09:22 /dev/net/tun
qemu-bridge-helper 启用了 suid 位,SELinux 被禁用('getenforce' 返回禁用)。我还缺少什么吗?
答案1
这就是 QEMU 破坏 cookie 的方式。如果您阅读了文档你会得到:
轻敲
Tap 网络后端利用主机中的 Tap 网络设备。它提供了非常好的性能,并且可以配置为创建几乎任何类型的网络拓扑。不幸的是,它需要在主机中配置网络拓扑,根据您使用的操作系统,该网络拓扑往往会有所不同。一般来说,它还需要你有root权限。
以用户身份运行 QEMU 可以简化网络连接。根据一个维基图书文章
如果未指定网络选项,QEMU 将默认模拟单个 Intel e1000 PCI 卡,并使用桥接到主机网络的用户模式网络堆栈。以下三个命令行是等效的:
qemu -m 256 -hda disk.img &
qemu -m 256 -hda disk.img -net nic -net user &
qemu-system-i386 -m 256 -hda disk.img -netdev user,id=network0 -device e1000,netdev=network0 &
在较新的 QEMU 版本中,-net 选项被 -netdev 取代。
来宾操作系统将在 10.0.2.2 上看到带有虚拟 DHCP 服务器的 E1000 NIC,并将分配从 10.0.2.15 开始的地址。可以在 10.0.2.3 上访问虚拟 DNS 服务器,并且可以在 10.0.2.4 上访问虚拟 SAMBA 文件服务器(如果存在),从而允许您通过 SAMBA 文件共享访问主机上的文件。
用户模式网络非常适合允许访问网络资源,包括 Internet。但默认情况下,它充当防火墙,不允许任何传入流量。它还不支持 TCP 和 UDP 以外的协议 - 因此,例如 ping 和其他 ICMP 实用程序将无法工作。
答案2
我使用的是 Fedora 21,但也许它已经在 Fedora 20 上可用
有一种新方法可以提供设置桥接连接的选项,即:
qemu-system-x86_64 -hda vdisk.img -m 512M -netdev bridge,id=net0,br=qemubr0 -device e1000,netdev=net0
你不必设置helper=/usr/libexec/qemu-bridge-helper,这似乎是默认的
并且您必须确保在使用默认帮助程序时,您拥有文件 /etc/qemu/bridge.conf 以及您打算使用的网桥
allow qemubr0
答案3
检查以下输出:
ls -l /dev/kvm
查看用户权限部分,看起来像用户组
确保您的用户有权访问 /dev/kvm
chown your_user:your_group /dev/kvm
然后您就可以从您的用户运行虚拟机了!
答案4
在我的机器上,我可以通过在“qemu-bridge-helper”上执行时设置用户 ID 位来解决问题:
sudo chmod u+s /usr/lib/qemu-bridge-helper
ls -la /usr/lib/qemu-bridge-helper
-rwsr-xr-x 1 root root 14336 Dez 16 15:36 /usr/lib/qemu-bridge-helper