虛擬安裝錯誤:無法載入點火文件

虛擬安裝錯誤:無法載入點火文件

我正在嘗試使用 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} \
    ...

這將負責正確設定點火文件上的標籤。

相關內容