I use the Yocto release Zeus to build my custom Linux image. I have many problems to understand how the recipe procps_3.3.16.bb works. It controls the installation of many important applications into the custom Linux image; below I list some (not all) of the applications that are installed by this recipe:
- program
top - program
sysctl - program
uptime - program
free - program
kill
The content of the recipe meta/recipes-extended/procps/procps_3.3.16.bb is:
SUMMARY = "System and process monitoring utilities" DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \ the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill." HOMEPAGE = "https://gitlab.com/procps-ng/procps" SECTION = "base" LICENSE = "GPLv2+ & LGPLv2+" LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \ " DEPENDS = "ncurses" inherit autotools gettext pkgconfig update-alternatives SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https \ file://sysctl.conf \ " SRCREV = "59c88e18f29000ceaf7e5f98181b07be443cf12f" S = "${WORKDIR}/git" # Upstream has a custom autogen.sh which invokes po/update-potfiles as they # don't ship a po/POTFILES.in (which is silly). Without that file gettext # doesn't believe po/ is a gettext directory and won't generate po/Makefile. do_configure_prepend() { ( cd ${S} && po/update-potfiles ) } EXTRA_OECONF = "--enable-skill --disable-modern-top" PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd" do_install_append () { install -d ${D}${base_bindir} [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done install -d ${D}${base_sbindir} [ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done if [ "${base_sbindir}" != "${sbindir}" ]; then rmdir ${D}${sbindir} fi install -d ${D}${sysconfdir} install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then install -d ${D}${sysconfdir}/sysctl.d ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf fi } CONFFILES_${PN} = "${sysconfdir}/sysctl.conf" bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w" base_bindir_progs += "kill pidof ps watch" base_sbindir_progs += "sysctl" ALTERNATIVE_PRIORITY = "200" ALTERNATIVE_PRIORITY[pidof] = "150" ALTERNATIVE_${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}" ALTERNATIVE_${PN}-doc = "kill.1 uptime.1" ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1" ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1" python __anonymous() { for prog in d.getVar('base_bindir_progs').split(): d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog)) for prog in d.getVar('base_sbindir_progs').split(): d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog)) } # 'ps' isn't suitable for use as a security tool so whitelist this CVE. # https://bugzilla.redhat.com/show_bug.cgi?id=1575473#c3 CVE_CHECK_WHITELIST += "CVE-2018-1121" By the execution of the bitbake command:
> bitbake procps there are compiled many applications and I can found the binary of those in the tmp build folder of procps; for example in the folder:
tmp/work/<MY-ARCHITECTURE>/procps/3.3.16-r0/image/usr/bin there are the following binary:
free pkill pwdx slabtop tload uptime w pgrep pmap skill snice top vmstat Not all the previous binary files are deployed to my image; for example pkill, skill, pgrep are not deployed, while free and top are deployed.
Link about the same topic
This post is about the same topic, but is not sufficient to understand my problem.
Question
Because not all the applications compiled are not deployed, how the recipe procps_3.3.16.bb selects the applications to deploy to the built Yocto image?