虚拟安装错误:无法加载点火文件

虚拟安装错误:无法加载点火文件

我正在尝试使用 virt-install 安装 Fedora CoreOS,如下所述: https://docs.fedoraproject.org/en-US/fedora-coreos/getting-started/

我正在运行的确切命令:virt-install --connect qemu:///system -n fcos -r 2048 --os-variant=fedora31 --import --graphics=none --disk size=10,backing_store=fedora-coreos-31.20200310.3.0-qemu.x86_64.qcow2 --qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=/home/test/Downloads/example.ign"

返回此错误:

Allocating 'fcos.qcow2'                                                                                              |  10 GB  00:00:00     
ERROR    internal error: qemu unexpectedly closed the monitor: 2020-04-05T14:52:47.919380Z qemu-system-x86_64: -fw_cfg name=opt/com.coreos/config,file=/home/test/Downloads/example.ign: can't load /home/test/Downloads/example.ign
Removing disk 'fcos.qcow2'                                                                                           |    0 B  00:00:00     
Domain installation does not appear to have been successful.

我以 root 身份运行此命令。点火文件正在工作,因为我已成功使用它从 iso 文件部署此虚拟机。

答案1

我遇到了同样的问题,根据入门提示,您可能需要运行 chcon 命令。

如果在启用 SELinux 的情况下运行,您可能需要更改 Ignition 文件的标签以允许访问: chcon -t svirt_home_t path/to/example.ign

答案2

最有可能的是 AppArmor 问题。遇到了同样的问题,尝试了所有可能的文件权限解决方法,例如setfacl -m u:libvirt-qemu:rxchcon -t但它最终是 AppArmor 配置文件限制:

要解决此问题,请更改/etc/apparmor.d/libvirt/TEMPLATE.qemu为包含点火配置的路径:

#
# This profile is for the domain whose UUID matches this file.
#

#include <tunables/global>

profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
  #include <abstractions/libvirt-qemu>
  /home/test/Downloads/example.ign rk,
  /etc/ignition/**.ign rk,
}

/etc/ignition/**.ign请注意,如果您决定将来组织虚拟机的所有 Ignition 配置,我将添加glob 作为示例。

这样您就可以使用virt-install.

作为一个选项,您可以通过设置禁用 Qemu 的 AppArmor,security_driver = "none"/etc/libvirt/qemu.conf我强烈建议不要这样做。

答案3

无论您是否virt-install以 root 身份运行,libvirt 启动的虚拟机qemu:///system都可能使用该qemu用户。例如,该qemu用户可能没有对 /home/test 的搜索+读取访问权限。将文件移动到/tmp可以修复它,或者打开整个/home/test文件路径的权限

答案4

使用更新版本的虚拟管理器(6.5) 和库虚拟机(3.0),您现在可以使用

virt-install \
    --sysinfo type=fwcfg,entry0.name=opt/com.coreos/config,entry0.file=${IGNITION_CONFIG} \
    ...

这将负责正确设置点火文件上的标签。

相关内容