我如何确定是什么导致在 Yocto 中构建不需要的包?

How can I determine what is causing an unwanted package to be built in Yocto?

我正在尝试使用 core-image-base 配方为 RPi 构建控制台映像,但在我的配置中的某个地方,我似乎已经打开了一些东西,它增加了大约 1000 个构建的配方数量,这包括许多感觉不属于控制台图像的东西(libx11gnome-desktop-testing 等)

我正在尝试追查为什么这些食谱会包含在我的构建中。到目前为止,我的方法是 运行 以下命令:

# Generate a massive dot file with all the dependencies in it
bitbake -g core-image-base

# grep through that file to find out what is bringing in
# gnome-desktop-testing.
cat task-depends.dot | grep -i gnome-desktop-testing | grep -vi do_package_write_rpm

我从匹配中删除了 do_package_write_rpm,因为一切似乎都与它匹配。这留下了以下内容:

"core-image-base.do_build" -> "gnome-desktop-testing.do_build"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_package_qa"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_packagedata"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_populate_lic"
"glib-2.0.do_package_qa" -> "gnome-desktop-testing.do_packagedata"
(followed by many dependencies between the tasks of the gnome-desktop-testing recipe)

所以,如果我的解释是正确的,似乎 core-image-base 直接依赖于 gnome-desktop-testing。这似乎很不寻常,因为 core-image-base 应该是仅控制台图像。

我尝试将 PACKAGE_EXCLUDE = "gnome-desktop-testing" 添加到我的 local.conf 中,希望它能返回更多信息,但无论此变量的设置如何,构建似乎都在继续:/

我如何弄清楚为什么 gnome-desktop-testing 是由 Yocto 构建的?理想情况下,我希望有一个不涉及烤面包机的解决方案。

这个问题的一个残酷的解决方案是只删除你不想要的配方并重新运行 bitbake。这会为您提供有用的消息,例如:

ERROR: Required build target 'core-image-base' has no buildable providers.
Missing or unbuildable dependency chain was:
['core-image-base', 'packagegroup-base-extended', 'ofono', 'glib-2.0', 'gnome-desktop-testing']

如果您使用 git 引入了这些层,则可以使用 git checkout path/to/deleted/recipe

快速恢复更改

我 运行 进入这个问题,所以我想我会 post 答案。

首先,我删除了配方,重新构建,然后查看第一个依赖链。

NOTE: Runtime target 'shared-mime-info' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['shared-mime-info', 'glib-2.0', 'gnome-desktop-testing']

然后我们查看配方,发现 glib-ptest 在 gnome-desktop-testing 上有一个 RDEPENDS。

RDEPENDS_${PN}-ptest += "\
            coreutils \
            libgcc \
            dbus \
            gnome-desktop-testing \
            tzdata \

那么要解决这个问题,您需要禁用“ptest”。这可以通过您的发行版配置完成 (meta-layer/conf/distro/*.conf)。