Yocto:如何知道为什么包含一个包?

问题描述 投票:0回答:4

这是一个老问题,我知道

Yocto:为什么包含一个包?

为什么包包含在 Yocto rootfs 中?

但没有令人满意的答案。

我在 yocto 自定义映像中得到 valgrind(用任何包名称替换 valgrind),但我不知道为什么。

Valgrin 的配方 RDEPENDS 变量显示将在映像中安装哪些软件包以供 valgrind 运行。

有什么办法可以知道逆函数吗?也就是说,他的 RDEPENDS valgrind 中有什么食谱?

bitbake -g valgrind 或在菜谱文件中查找 valgrind 没有帮助。

yocto bitbake
4个回答
1
投票

获取依赖于特定包的配方列表的另一种方法是屏蔽它的配方,为反向依赖生成位烘焙错误。

build/conf/local.conf

BBMASK = "valgrind"

会产生错误,有清晰的依赖链:

ERROR: Nothing PROVIDES 'valgrind' (but *** DEPENDS on or otherwise requires it)
ERROR: Required build target 'core-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image', '***', 'valgrind']

如果通过多个依赖链使用配方,则可能需要多次运行此方法。

这个答案与 Jose Luis Zabalza 的类似,但实施起来比查找并删除所有食谱的

.bb
.bbappend
更快一些。


0
投票

有几种方法可以找到这个问题:

bitbake -g
可能是其中之一,您只是错误地设置了目标。
bitbake -g
获取 BUILD 依赖项,因此,它告诉您构建 valgrind 需要哪些包(或任务),但是执行
bitbake -g valgrind
会告诉您 valgrind 需要哪些 包,而不是 valgrind 需要哪些包(不是一样),你需要做:
bitbake <your-image> -g
例如
bitbake core-image-minimal -g
这将是您的映像的构建依赖项,它可能会告诉您映像中的哪个包需要 valgrind,(打开 task-depends.dot 文件并查找右侧的 valgrind 行)

如果 bitbake -g 不够的话,Bitbake -e 可能是另一种方式

bitbake -e | grep PACKAGE_INSTALL

bitbake -e
将打印出bitbake的字典,特别是你应该查看
PACKAGE_INSTALL
变量,如果valgrind在那里,你可以看到什么配方将其添加到变量中,以及为什么要安装它

如果valgrind实际上是次要依赖项,也就是说

PACKAGE_A
有一个
RDEPENDS+="valgrind"
,并且需要安装
PACKAGE_A
,那么你需要查看包管理器的输出,这取决于你是否使用RPM、DEB 或 IPK 文件,有更具体的方法可以找到此问题,但查看映像的 log.do_rootfs 文件可能会为您提供有关哪个包对 valgrind 具有运行时依赖性的足够信息:

例如,如果您使用 RPM,您会看到类似这样的内容(经过修剪以便于阅读):

$ cat tmp/work/qemuarm64-poky-linux-musl/core-image-minimal/1.0-r0/temp/log.do_rootfs
Package                   Arch       Version                    Repo      Size
================================================================================
Installing:
 base-passwd               cortexa57  3.5.29-r0                  oe-repo  7.2 k
 busybox                   cortexa57  1.35.0-r0                  oe-repo  364 k
 busybox-mdev              cortexa57  1.35.0-r0                  oe-repo  8.7 k
 dropbear                  cortexa57  2020.81-r0                 oe-repo  132 k
 initramfs-live-boot-tiny  qemuarm64  1.0-r12                    oe-repo  8.6 k
 packagegroup-core-boot    qemuarm64  1.0-r17                    oe-repo  5.8 k
 run-postinsts             noarch     1.0-r10                    oe-repo  7.4 k
Installing dependencies:
 base-files                qemuarm64  3.0.14-r89                 oe-repo   13 k
 busybox-inittab           qemuarm64  1.35.0-r0                  oe-repo  7.6 k
 eudev                     cortexa57  3.2.10-r0                  oe-repo  181 k
 libblkid1                 cortexa57  2.37.3-r0                  oe-repo   85 k
 libkmod2                  cortexa57  29-r0                      oe-repo   36 k
 libz1                     cortexa57  1.2.11-r0                  oe-repo   46 k
 musl                      cortexa57  1.2.2+git0+c4d4028dde-r0   oe-repo  364 k
 netbase                   noarch     1:6.3-r0                   oe-repo   14 k
 update-alternatives-opkg  cortexa57  0.5.0-r0                   oe-repo  8.5 k
Installing weak dependencies:
 busybox-syslog            cortexa57  1.35.0-r0                  oe-repo  8.7 k

在此示例中,您可以看到我从未请求将

libz1
安装在我的映像中(以及列为依赖项的其他包),但是上半部分中的一个包需要运行这些包。
log.do_rootfs
文件中有更多信息,可以直接告诉您需要什么 valgrind,如果您仍然找不到它,请返回 bitbake -g 并查找包含上述包的行(因为这些是对您的图像的直接依赖项) ),其中之一应该需要 valgrind。

RPM 命令

最后但并非最不重要的一点是,这是为 rpm 量身定制的,但该过程对于 debs 或 ipks 应该非常相似,尽管命令会有所不同,但是一旦您获得了要从

log.do_rootfs
安装的软件包列表,您就可以查询 rpm通过 rpm 命令打包:

我将使用上面的 dropbear 包作为示例:

$ rpm -qR tmp/deploy/rpm/cortexa57/dropbear-2020.81-r0.cortexa57.rpm
/bin/sh
libc.so()(64bit)
libz1 >= 1.2.11
libz.so.1()(64bit)
rtld(GNU_HASH)
update-alternatives-opkg

因此,就我而言,dropbear包是造成libz1依赖的罪魁祸首。


0
投票

感谢您的回答@aehs29,非常有启发性,但是有很多软件包已构建但未安装。

我不明白

bitbake -g <image-recipe>
告诉我 build 依赖项,而不是 runtime 依赖项,是的,我的自定义映像具有来自 valgrind 的构建依赖项,但我无法获取有关 task- 中谁有罪的信息 -取决于.dot 文件。

valgrind 未在

bitbake -e | grep PACKAGE_INSTALL
中列出,所以运气不佳。

我正在使用 ipkg 软件包,因此 log.do_rootfs 文件不显示软件包依赖关系表。

查看软件包文件是不可行的,因为有许多未安装的软件包具有 valgrind 依赖项。

策略是首先构建镜像,然后删除valgrind配方,尝试再次构建镜像并分析错误

user@build:~/home/user/yocto-local/build$ bitbake mycustom-image
Loading cache: 100%   |######################| Time: 0:00:01
Loaded 4841 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'valgrind' (but /home/user/yocto-local/sources/meta-imx/meta-bsp/recipes-graphics/imx-gpu-viv/imx-gpu-viv_6.4.3.p2.2-aarch64.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'valgrind' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['valgrind']
NOTE: Runtime target 'opencv' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['opencv', 'virtual/opencl-icd', 'valgrind']
ERROR: Required build target 'mycustom-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['mycustom-image', 'opencv', 'virtual/opencl-icd', 'valgrind']

Summary: There were 2 ERROR messages shown, returning a non-zero exit code.

我相信这不是“正式”的做法,但我还没有找到另一种做法。


0
投票

Yocto 现在有一个合适的工具来确定构建包的原因。

您必须首先为要构建的最终配方生成依赖关系图。然后,运行

oe-depends-dot --why

bitbake -g core-image-minimal
oe-depends-dot -k base-files -w ./task-depends.dot
© www.soinside.com 2019 - 2024. All rights reserved.