我有一个可以自动创建和运行虚拟机的脚本。很多人都在使用这个脚本。你只需要调用这个脚本并给它提供一些信息,比如你想通过哪些 PCI 或 USB 设备,以及使用哪个 iso 来安装操作系统,然后这个脚本就会sudo qemu-system-x86_64
使用适当的参数运行。
因此,如果你把它分解,你现在可以这样调用我的脚本:
./create-vm.sh /home/me/os-images/windows10.iso
这很好用。
但现在我想更进一步,使用sudo virt-install ...
代替sudo qemu-system-x86_64 ...
,这会导致重大问题,因为virt-install
它无法再访问 iso 文件。大概是因为qemu
即使我用 sudo 运行它,它也会放弃 root 权限并使用用户...
所以现在我必须做出一个艰难的决定:
- 我是吗移动iso 文件到
/var/lib/libvirt/images
? (否,因为用户可能需要该文件位于当前所在的确切位置。) - 我是吗复制ISO 到
/var/lib/libvirt/images
? (不,因为用户可能没有足够的磁盘空间,这看起来像是浪费资源。) - 我设置
user = root
还是user = me
进去/etc/libvirt/qemu.conf
? (不,因为这是一个全局设置,可能会扰乱用户正在执行的其他 qemu 操作。 - 我已经尝试过了,但它会导致libvirtd.service
崩溃。) - 是否将iso文件的组添加到qemu用户? (不,因为这可能会产生不需要的副作用,可能会在用户不想要的情况下为 qemu 提供更多访问权限。 - 尽管如此,我已经尝试过了,但它不起作用,大概是某些 SElinux 魔法阻止了它。 ..)
- 我是否要将 iso 文件的所有者更改为
qemu
? (不,因为这可能会产生不需要的副作用。-除此之外,当我尝试它时,我仍然收到权限被拒绝的错误,可能是因为 SElinux。) - 我是否要挂载 iso 并使挂载点可供 qemu 用户使用? (不,因为 iso 文件可能非常复杂,并且某些数据在安装点中不可用。)
- 我要挂载包含 iso 的文件夹吗? (否,因为 iso 文件仍具有相同的所有者/组。)
我似乎无法找到一个好的解决方案。我现在该怎么办?我确实virt-install
需要一些qemu-system-x86_64
.
注意:实际上,不仅有一个 iso 映像,还有一个软盘映像、一些其他包含驱动程序的 iso 文件和一个 ACPI 表文件。我从 中收到所有这些文件的权限错误virt-install
。
答案1
单独的原因chown qemu:qemu $ISO
不起作用是因为qemu
可能没有 $HOME 的搜索权限。
virt-install 尝试检测这种情况并打印警告。 virt-manager 将更进一步并提供尝试和修复,大致使用setfacl --modify user:qemu:x $DIR
通向 iso 的链中的每个目录。再加上 libvirt chown'ing 和 selinux 自动标记文件(默认行为),应该足以启动 VM。是的,这种行为确实会产生不需要的副作用,但如果您希望虚拟机作为不同的非 root 用户运行,则没有办法解决它。
也就是说,如果您想要一台完全属于一个用户的虚拟机,请查看 qemu:///session 与默认的 qemu:///system libvirt URI 进行比较。这是差异的解释。尽管在这种情况下您将无法访问 PCI 直通等需要 libvirtd 具有主机管理访问权限的内容。