Yocto:启用 libvirt 时数据文件冲突构建错误

Yocto: Data file clashes build error while enabling libvirt

在 yocto 中启用 libvirt 时,我在构建 yocto 映像时看到以下数据文件冲突问题,

下面是我试图将安装附加到我的 yocto 映像的包

IMAGE_INSTALL_append = " \     
       packagegroup-core-boot \     
       qemu \     
       libvirt \     
       libvirt-libvirtd \     
       libvirt-virsh \     
       kernel-module-kvm \     
       kernel-module-kvm-intel \    
    " 

但是我看到下面的问题,当我构建图像启用上面的包时,

`Collected errors:

仅供参考:我看到 libvirt 同时依赖 iptables 和 ebtables。

有人可以帮助理解这个问题以及如何解决吗?

我尝试使用 PACKAGECONFIG_remove = "ebtables" 删除 ebtables 并构建了图像,但是当我启动 libvirtd 服务时,它始终处于死模式,我看到一些与套接字相关的问题。

您的问题是有两个包使用相同的文件填充您的 linux 图像,因此存在冲突。 您绝对应该检查 PREFERRED_PROVIDER 变量,这可能是解决方案:

PREFERRED_PROVIDER_ethertypes ?= "libvirt"

其实这是一个无解的问题,除了:

  1. 删除其中一个软件包(ebtables 或 iptables)

  2. 从其中一个食谱中删除文件ethertypes

libvirt 仅在编译时依赖 iptables,所以我不知道为什么 iptables 出现在图像中?

无论如何,它在 ebtables 上有一个配置,根据您的评论,当您将它从 PACKAGECONFIG 中删除时,它无法工作。所以:

我建议在 运行 时检查其他软件包是否需要 iptables,如果没有则将其删除。

如果您的情况需要两者,则采用第二种解决方案,即从其中一个食谱中删除文件,对其中一个使用 bbappend 文件:

您可能需要添加的块是:

do_install_append() {
    rm ${D}/etc/ethertypes
}

或者:

  • meta-custom/recipes-filter/ebtables/ebtables_%.bbappend

或:

  • meta-custom/recipes-extended/iptables/iptables_%.bbappend

注意

如果您选择第二种解决方案,则需要确保该文件不存在于您将从中删除文件的配方的 FILES 变量中,FILES_ebtablesFILES_iptables.