在 Fedora20 上运行 qemu

在 Fedora20 上运行 qemu

使用 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

相关内容