'Yocto: How to know why a package is included?
This is a old question, I know
Yocto: why is a package included?
Why is package included in Yocto rootfs?
but there is not satisfactory answer.
I get valgrind inside my yocto custom image (sustitute valgrind with whatever package name) and I do not why.
Valgrin's recipe RDEPENDS variable show what packages will be installed in the image for valgrind runs.
Is there any way to know the reverse function? that is, what recipe has in his RDEPENDS valgrind?
bitbake -g valgrind or find valgrind in recipes files do not help.
Solution 1:[1]
There's several ways to find this out:
bitbake -g may be one of them, you are just setting the target incorrectly.
bitbake -g gets the BUILD dependencies, so, it tells you what package (or task) required valgrind to be built, however doing bitbake -g valgrind will tell you what packages are required for valgrind, not what packages require valgrind (not the same), you need to do:
bitbake <your-image> -g
e.g.
bitbake core-image-minimal -g
This will the the build dependencies for your image, and it may tell you what package from your image required valgrind, (open the task-depends.dot file and look for the valgrind lines on the right)
Bitbake -e may be another way if bitbake -g didnt suffice
bitbake -e | grep PACKAGE_INSTALL
bitbake -e will print out bitbake's dictionary, and specifically you should be looking at the PACKAGE_INSTALL variable, if valgrind is there, you can see what recipe added it to the variable and hence why its being installed
If valgrind is actually a secondary dependency, that is to say PACKAGE_A has an RDEPENDS+="valgrind", and PACKAGE_A is required to be installed, then you need to look at the package manager output, this varies depending if you are using RPMs, DEBs or IPKs files, there's more specific ways to find this out but looking at the log.do_rootfs file for your image would probably give you enough information about which package had a runtime dependency to valgrind:
for example if you used RPMs you would see something like this (trimmed for easier reading):
$ 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
In this example, you can see that I never requested libz1 to be installed in my image (and others listed as dependencies), however one of the packages from the upper section required those to run.
There's much more information in the log.do_rootfs file which may directly tell you what required valgrind, if you still cant find it, go back to bitbake -g and look for the lines containing the packages above (since those are direct dependencies to your image), one of them should be requiring valgrind.
The RPM command
Last but not least, this is tailored for rpms, but the process should be fairly similar for debs or ipks, although the commands will differ, but once you have the list of packages to be installed from log.do_rootfs you can query the rpm packages via the rpm command:
I'll use the dropbear package as an example from above:
$ 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
So, in my case, the dropbear package is the one to blame for the libz1 dependency.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
