При включении libvirt в yocto я вижу ниже проблему конфликта файлов данных при создании образа yocto,
Ниже приведены пакеты, которые я пытаюсь добавить к своему образу yocto.
IMAGE_INSTALL_append = " \
packagegroup-core-boot \
qemu \
libvirt \
libvirt-libvirtd \
libvirt-virsh \
kernel-module-kvm \
kernel-module-kvm-intel \
"
Но я вижу проблему ниже, когда я создаю изображение, включающее вышеуказанные пакеты,
`Collected errors:
check_data_file_clashes: Package iptables wants to install file /-/-/-/rootfs/etc/ethertypes
But that file is already provided by package * ebtables`
К вашему сведению: я вижу, что libvirt зависит как от iptables, так и от ebtables.
может кто-нибудь помочь понять это и как решить?
Я попытался удалить ebtables с помощью PACKAGECONFIG_remove = "ebtables"
, и образ был создан, но при запуске службы libvirtd он всегда находится в мертвом режиме, и я вижу некоторые проблемы, связанные с сокетом.
Ваша проблема в том, что есть два пакета, которые заполняют ваш образ Linux одним и тем же файлом, поэтому возникает конфликт. Вы обязательно должны проверить переменную PREFERRED_PROVIDER, это может быть решением:
PREFERRED_PROVIDER_ethertypes ?= "libvirt"
Да, поскольку это конфликт файлов, PREFERRED_PROVIDER не работает, @TalelBELHADJSALEM может предложить что-нибудь еще?
Проверьте мой ответ выше.
На самом деле, это проблема, которая не имеет решения, кроме:
Удалите один из пакетов (ebtables или iptables)
Удалите файл ethertypes
из одного из рецептов
libvirt
зависит от iptables
только во время компиляции, поэтому я не знал, почему iptables
присутствует на изображении?
В любом случае, у него есть конфигурация на ebtables
, и, судя по вашему комментарию, когда вы удалили его из PACKAGECONFIG
, он не работал. Так:
Я предлагаю проверить, требуется ли iptables
другим пакетом во время выполнения, если не удалить его.
Если в вашем случае требуются оба, выберите второе решение, которое удаляет файл из одного из рецептов, используя файл bbappend
для одного из них:
Блок, который вам может понадобиться добавить:
do_install_append() {
rm ${D}/etc/ethertypes
}
либо в:
или:
ПРИМЕЧАНИЕ
Если вы выберете второе решение, вам нужно убедиться, что файл отсутствует в переменной FILES
рецепта, из которого вы удалите файл, FILES_ebtables
или FILES_iptables
.
Спасибо за подробный ответ, теперь сборка идет успешно. Я удалил файл ethertypes из iptables, но все еще вижу проблему с сокетом: когда livirtd запускается, libvirtd всегда мертв или неактивен # ошибка списка virsh: не удалось подключиться к ошибке гипервизора: не удалось подключить сокет к '/var/run/libvirt /libvirt-sock': Нет такого файла или каталога #ls /var/run/libvirt/ interface network virtlockd-sock virtlogd-sock
Если мое решение решило вашу проблему, примите его как правильное, в противном случае ваша новая проблема должна быть в отдельном вопросе.
PREFERRED_PROVIDER
используется не для указания файлов, а для указания пакета. Ваше решение не сработает.