Step 1: Copy the ffs stage1 tarball to /tmp in a work directory mkdir /tmp/ffs_stage1_analysis ; cp -v /home/mirror/funtoo/next/arm-64bit/raspi4/2022-10-20/stage1-raspi4-next-2022-10-20.tar Step 2: Extract the stage1 in the work directory cd /tmp/ffs_stage1_analysis ; tar xvf stage1-raspi4-next-2022-10-20.tar Step 3: Find all files in the stage1 that are recognized as shell scripts by the file command find ./ | xargs file | grep "shell script" | cut -d: -f1 > /tmp/ffs_stage1_shell_scripts.list Step 4: Grep those files in a for loop for a /usr/bin/ regex path pattern for sh in $(cat /tmp/ffs_stage1_shell_scripts.list | xargs) ; do grep -nH "/usr/bin/[[:alpha:]]*" $sh ; done > /tmp/ffs_stage1_bin_paths.list Results: ./usr/bin/zgrep:25:grep='${GREP-'\''/usr/bin/grep'\''}' ./usr/bin/gdiffmk:1:#!/usr/bin/bash ./usr/bin/gdiffmk:173:BASH_PROG=/usr/bin/bash ./usr/bin/gcc-config:341: atomic_ln "${EPREFIX%/}/usr/bin/${CTARGET}-cpp" "${EROOT}lib" "cpp" ./usr/bin/bashbug:123: if [ -x /usr/bin/editor ]; then ./usr/bin/bashbug:131: elif [ -x /usr/bin/emacs ]; then ./usr/bin/bashbug:133: elif [ -x /usr/bin/xemacs ]; then ./usr/bin/bashbug:135: elif [ -x /usr/bin/vim; then ./usr/bin/bashbug:137: elif [ -x /usr/bin/gvim; then ./usr/bin/bashbug:139: elif [ -x /usr/bin/nano ]; then ./usr/bin/bashbug:145: elif [ -x /usr/bin/vi ]; then ./usr/bin/eselect:1:#!/usr/bin/bash ./usr/bin/rsync-ssl:1:#!/usr/bin/env bash ./usr/bin/ldd:1:#! /usr/bin/bash ./usr/bin/sotruss:1:#! /usr/bin/bash ./usr/bin/xtrace:1:#! /usr/bin/bash ./usr/bin/xtrace:21:pcprofiledump='/usr/bin/pcprofiledump' ./usr/bin/autoconf-2.69:48:# Printing a long string crashes Solaris 7 /usr/bin/printf. ./usr/bin/autoconf-2.69:401:: ${AUTOM4TE='/usr/bin/autom4te-2.69'} ./usr/bin/libtool:1:#! /usr/bin/bash ./usr/bin/libtool:69:SHELL="/usr/bin/bash" ./usr/bin/libtool:94:GREP="/usr/bin/grep" ./usr/bin/libtool:97:EGREP="/usr/bin/grep -E" ./usr/bin/libtool:100:FGREP="/usr/bin/grep -F" ./usr/bin/libtool:103:NM="/usr/bin/aarch64-unknown-linux-gnu-nm -B" ./usr/bin/libtool:198:lt_truncate_bin="/usr/bin/dd bs=4096 count=1" ./usr/bin/libtool:5063: # remove .exe since cygwin /usr/bin/install will append another ./usr/bin/libtool:5066: */usr/bin/install*,*cygwin*) ./usr/bin/libtool:8834: if /usr/bin/file -L $add 2> /dev/null | ./usr/bin/libtoolize:45:: ${EGREP="/usr/bin/grep -E"} ./usr/bin/libtoolize:46:: ${FGREP="/usr/bin/grep -F"} ./usr/bin/libtoolize:47:: ${GREP="/usr/bin/grep"} ./usr/sbin/perl-cleaner:303: if [[ ${PMS_COMMAND[${PMS_INDEX}]} == emerge && -x ""/usr/bin/portageq ]] ; then ./usr/lib/portage/python3.9/estrip:104: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.9/estrip:109: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.9/misc-functions.sh:480: "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH"/xpak-helper.py recompose \ ./usr/lib/portage/python3.9/chmod-lite:10: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/chmod-lite.py" "$@" ./usr/lib/portage/python3.9/ebuild-ipc:8: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/ebuild-ipc.py" "$@" ./usr/lib/portage/python3.9/phase-functions.sh:149: "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-environment.py failed" ./usr/lib/portage/python3.9/ebuild-helpers/xattr/install:5:INSTALL_XATTR=${EPREFIX}/usr/bin/install-xattr ./usr/lib/portage/python3.9/ebuild-helpers/xattr/install:40: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/install.py" "$@" ./usr/lib/portage/python3.9/ebuild-helpers/dohtml:20: "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/dohtml.py" "$@" ./usr/lib/portage/python3.9/ebuild-helpers/doins:95: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.9/ebuild-helpers/portageq:19: exec "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.7/phase-functions.sh:149: "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-environment.py failed" ./usr/lib/portage/python3.7/ebuild-ipc:8: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/ebuild-ipc.py" "$@" ./usr/lib/portage/python3.7/estrip:104: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.7/estrip:109: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.7/chmod-lite:10: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/chmod-lite.py" "$@" ./usr/lib/portage/python3.7/misc-functions.sh:480: "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH"/xpak-helper.py recompose \ ./usr/lib/portage/python3.7/ebuild-helpers/xattr/install:5:INSTALL_XATTR=${EPREFIX}/usr/bin/install-xattr ./usr/lib/portage/python3.7/ebuild-helpers/xattr/install:40: exec "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/install.py" "$@" ./usr/lib/portage/python3.7/ebuild-helpers/dohtml:20: "${PORTAGE_PYTHON:-/usr/bin/python}" "$PORTAGE_BIN_PATH/dohtml.py" "$@" ./usr/lib/portage/python3.7/ebuild-helpers/doins:95: "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/lib/portage/python3.7/ebuild-helpers/portageq:19: exec "${PORTAGE_PYTHON:-/usr/bin/python}" \ ./usr/share/gnuconfig/config.guess:369: case `/usr/bin/uname -p` in ./usr/share/gnuconfig/config.guess:407: case "`/usr/bin/arch -k`" in ./usr/share/gnuconfig/config.guess:529: UNAME_PROCESSOR=`/usr/bin/uname -p` ./usr/share/gnuconfig/config.guess:566: if [ -x /usr/bin/oslevel ] ; then ./usr/share/gnuconfig/config.guess:567: IBM_REV=`/usr/bin/oslevel` ./usr/share/gnuconfig/config.guess:606: if [ -x /usr/bin/lslpp ] ; then ./usr/share/gnuconfig/config.guess:607: IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | ./usr/share/gnuconfig/config.guess:641: if [ -x /usr/bin/getconf ]; then ./usr/share/gnuconfig/config.guess:642: sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` ./usr/share/gnuconfig/config.guess:643: sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ./usr/share/gnuconfig/config.guess:837: UNAME_PROCESSOR=`/usr/bin/uname -p` ./usr/share/gnuconfig/config.guess:1454:/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` ./usr/share/gnuconfig/config.guess:1459:/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` ./usr/share/gnuconfig/config.guess:1461:/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` ./usr/share/git/contrib/hooks/pre-auto-gc-battery:35:elif test -x /usr/bin/pmset && /usr/bin/pmset -g batt | ./usr/share/git-core/templates/hooks/prepare-commit-msg.sample:27:/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" ./usr/share/git-core/templates/hooks/prepare-commit-msg.sample:31:# /usr/bin/perl -i.bak -pe ' ./usr/share/git-core/templates/hooks/prepare-commit-msg.sample:41:# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" ./usr/share/git-core/templates/hooks/pre-rebase.sample:68: /usr/bin/perl -e ' ./usr/share/git-core/templates/hooks/pre-commit.sample:29: # even required, for portability to Solaris 10's /usr/bin/tr), since ./usr/share/libtool/configure:39:# Printing a long string crashes Solaris 7 /usr/bin/printf. ./usr/share/libtool/configure:1913:/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1917:/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1919:/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1921:/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:2296:# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ./usr/share/libtool/configure:5182: lt_cv_file_magic_cmd='/usr/bin/file -L' ./usr/share/libtool/configure:5223: lt_cv_file_magic_cmd=/usr/bin/file ./usr/share/libtool/configure:5237: lt_cv_file_magic_cmd=/usr/bin/file ./usr/share/libtool/configure:5284: lt_cv_file_magic_cmd=/usr/bin/file ./usr/share/libtool/configure:6428: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6449: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6461: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6487: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6495: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6503: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6527: case `/usr/bin/file conftest.o` in ./usr/share/libtool/configure:6534: case `/usr/bin/file conftest.o` in ./usr/share/libtool/configure:6640: case `/usr/bin/file conftest.o` in ./usr/share/libtool/configure:11073: if test -x /usr/bin/objformat; then ./usr/share/libtool/configure:11074: objformat=`/usr/bin/objformat` ./usr/share/libtool/configure:13445:# Printing a long string crashes Solaris 7 /usr/bin/printf. ./usr/share/libtool/build-aux/ltmain.sh:4548: # remove .exe since cygwin /usr/bin/install will append another ./usr/share/libtool/build-aux/ltmain.sh:4551: */usr/bin/install*,*cygwin*) ./usr/share/libtool/build-aux/ltmain.sh:8319: if /usr/bin/file -L $add 2> /dev/null | ./usr/libexec/git-core/git-web--browse:131: # /usr/bin/cygstart indicates Cygwin ./usr/libexec/git-core/git-web--browse:132: if test -x /usr/bin/cygstart; then ./usr/libexec/git-core/git-request-pull:115:set fnord $(git ls-remote "$url" | /usr/bin/perl -e "$find_matching_ref" "${remote:-HEAD}" "$headrev") ./etc/netif.d/wireguard:3:WG_QUICK="/usr/bin/wg-quick" Step 5: Analyze the paths Step 6: Extract all script file names where patterns matched and loop through equery b to isolate CatPkg names for f in $(cut -d: -f1 /tmp/ffs_stage1_bin_paths.list | sort | uniq | sed 's/\.//g' | xargs) ; do equery b $f ; done > /tmp/ffs_stage1_shell_scripts_catpkgs.list Results: * Searching for /etc/netifd/wireguard ... * Searching for /usr/bin/autoconf-269 ... * Searching for /usr/bin/bashbug ... app-shells/bash-5.2 (/usr/bin/bashbug) * Searching for /usr/bin/eselect ... app-admin/eselect-1.4.14-r1 (/usr/bin/eselect) * Searching for /usr/bin/gcc-config ... sys-devel/gcc-config-2.4 (/usr/bin/gcc-config) * Searching for /usr/bin/gdiffmk ... sys-apps/groff-1.22.4 (/usr/bin/gdiffmk) * Searching for /usr/bin/ldd ... sys-libs/glibc-2.33-r2 (/usr/bin/ldd) * Searching for /usr/bin/libtool ... sys-devel/libtool-2.4.6-r5 (/usr/bin/libtool) * Searching for /usr/bin/libtoolize ... sys-devel/libtool-2.4.6-r5 (/usr/bin/libtoolize) * Searching for /usr/bin/rsync-ssl ... net-misc/rsync-3.2.6 (/usr/bin/rsync-ssl) * Searching for /usr/bin/sotruss ... sys-libs/glibc-2.33-r2 (/usr/bin/sotruss) * Searching for /usr/bin/xtrace ... sys-libs/glibc-2.33-r2 (/usr/bin/xtrace) * Searching for /usr/bin/zgrep ... app-arch/gzip-1.12 (/usr/bin/zgrep) * Searching for /usr/lib/portage/python37/chmod-lite ... * Searching for /usr/lib/portage/python37/ebuild-helpers/dohtml ... * Searching for /usr/lib/portage/python37/ebuild-helpers/doins ... * Searching for /usr/lib/portage/python37/ebuild-helpers/portageq ... * Searching for /usr/lib/portage/python37/ebuild-helpers/xattr/install ... * Searching for /usr/lib/portage/python37/ebuild-ipc ... * Searching for /usr/lib/portage/python37/estrip ... * Searching for /usr/lib/portage/python37/misc-functionssh ... * Searching for /usr/lib/portage/python37/phase-functionssh ... * Searching for /usr/lib/portage/python39/chmod-lite ... * Searching for /usr/lib/portage/python39/ebuild-helpers/dohtml ... * Searching for /usr/lib/portage/python39/ebuild-helpers/doins ... * Searching for /usr/lib/portage/python39/ebuild-helpers/portageq ... * Searching for /usr/lib/portage/python39/ebuild-helpers/xattr/install ... * Searching for /usr/lib/portage/python39/ebuild-ipc ... * Searching for /usr/lib/portage/python39/estrip ... * Searching for /usr/lib/portage/python39/misc-functionssh ... * Searching for /usr/lib/portage/python39/phase-functionssh ... * Searching for /usr/libexec/git-core/git-request-pull ... dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-request-pull) * Searching for /usr/libexec/git-core/git-web--browse ... dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-web--browse) * Searching for /usr/sbin/perl-cleaner ... app-admin/perl-cleaner-2.28 (/usr/sbin/perl-cleaner) * Searching for /usr/share/git-core/templates/hooks/pre-commitsample ... * Searching for /usr/share/git-core/templates/hooks/pre-rebasesample ... * Searching for /usr/share/git-core/templates/hooks/prepare-commit-msgsample ... * Searching for /usr/share/git/contrib/hooks/pre-auto-gc-battery ... dev-vcs/git-2.38.1 (/usr/share/git/contrib/hooks/pre-auto-gc-battery) * Searching for /usr/share/gnuconfig/configguess ... * Searching for /usr/share/libtool/build-aux/ltmainsh ... * Searching for /usr/share/libtool/configure ... sys-devel/libtool-2.4.6-r5 (/usr/share/libtool/configure) Step 7: Extract all CatPkgs names that got an equery b hit: grep -vi searching /tmp/ffs_stage1_shell_scripts_catpkgs.list | sort Results: app-admin/eselect-1.4.14-r1 (/usr/bin/eselect) app-admin/perl-cleaner-2.28 (/usr/sbin/perl-cleaner) app-arch/gzip-1.12 (/usr/bin/zgrep) app-shells/bash-5.2 (/usr/bin/bashbug) dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-request-pull) dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-web--browse) dev-vcs/git-2.38.1 (/usr/share/git/contrib/hooks/pre-auto-gc-battery) net-misc/rsync-3.2.6 (/usr/bin/rsync-ssl) sys-apps/groff-1.22.4 (/usr/bin/gdiffmk) sys-devel/gcc-config-2.4 (/usr/bin/gcc-config) sys-devel/libtool-2.4.6-r5 (/usr/bin/libtool) sys-devel/libtool-2.4.6-r5 (/usr/bin/libtoolize) sys-devel/libtool-2.4.6-r5 (/usr/share/libtool/configure) sys-libs/glibc-2.33-r2 (/usr/bin/ldd) sys-libs/glibc-2.33-r2 (/usr/bin/sotruss) sys-libs/glibc-2.33-r2 (/usr/bin/xtrace) Step 8: Extract the script file names from the discovered catpkgs and re-run the /usr/bin path regex to further refine the results grep -vi searching /tmp/ffs_stage1_shell_scripts_catpkgs.list | sort | cut -d' ' -f2 | sed -e 's/(//g' -e 's/)//g' | sort > /tmp/ffs_stage1_catpkg_shell_scripts_paths_filtered.list Results: /usr/bin/bashbug /usr/bin/eselect /usr/bin/gcc-config /usr/bin/gdiffmk /usr/bin/ldd /usr/bin/libtool /usr/bin/libtoolize /usr/bin/rsync-ssl /usr/bin/sotruss /usr/bin/xtrace /usr/bin/zgrep /usr/libexec/git-core/git-request-pull /usr/libexec/git-core/git-web--browse /usr/sbin/perl-cleaner /usr/share/git/contrib/hooks/pre-auto-gc-battery /usr/share/libtool/configure Step 9: Re-run the /usr/bin path regex using refined script path results against stage1 files for sh in $(cat /tmp/ffs_stage1_catpkg_shell_scripts_paths_filtered.list | sed 's/\/usr/\.\/usr/g' | xargs) ; do grep -nH "/usr/bin/[[:alpha:]]*" $sh ; done > /tmp/ Results: ./usr/bin/bashbug:123: if [ -x /usr/bin/editor ]; then ./usr/bin/bashbug:131: elif [ -x /usr/bin/emacs ]; then ./usr/bin/bashbug:133: elif [ -x /usr/bin/xemacs ]; then ./usr/bin/bashbug:135: elif [ -x /usr/bin/vim; then ./usr/bin/bashbug:137: elif [ -x /usr/bin/gvim; then ./usr/bin/bashbug:139: elif [ -x /usr/bin/nano ]; then ./usr/bin/bashbug:145: elif [ -x /usr/bin/vi ]; then ./usr/bin/eselect:1:#!/usr/bin/bash ./usr/bin/gcc-config:341: atomic_ln "${EPREFIX%/}/usr/bin/${CTARGET}-cpp" "${EROOT}lib" "cpp" ./usr/bin/gdiffmk:1:#!/usr/bin/bash ./usr/bin/gdiffmk:173:BASH_PROG=/usr/bin/bash ./usr/bin/ldd:1:#! /usr/bin/bash ./usr/bin/libtool:1:#! /usr/bin/bash ./usr/bin/libtool:69:SHELL="/usr/bin/bash" ./usr/bin/libtool:94:GREP="/usr/bin/grep" ./usr/bin/libtool:97:EGREP="/usr/bin/grep -E" ./usr/bin/libtool:100:FGREP="/usr/bin/grep -F" ./usr/bin/libtool:103:NM="/usr/bin/aarch64-unknown-linux-gnu-nm -B" ./usr/bin/libtool:198:lt_truncate_bin="/usr/bin/dd bs=4096 count=1" ./usr/bin/libtool:5063:# remove .exe since cygwin /usr/bin/install will append another ./usr/bin/libtool:5066:*/usr/bin/install*,*cygwin*) ./usr/bin/libtool:8834: if /usr/bin/file -L $add 2> /dev/null | ./usr/bin/libtoolize:45:: ${EGREP="/usr/bin/grep -E"} ./usr/bin/libtoolize:46:: ${FGREP="/usr/bin/grep -F"} ./usr/bin/libtoolize:47:: ${GREP="/usr/bin/grep"} ./usr/bin/rsync-ssl:1:#!/usr/bin/env bash ./usr/bin/sotruss:1:#! /usr/bin/bash ./usr/bin/xtrace:1:#! /usr/bin/bash ./usr/bin/xtrace:21:pcprofiledump='/usr/bin/pcprofiledump' ./usr/bin/zgrep:25:grep='${GREP-'\''/usr/bin/grep'\''}' ./usr/libexec/git-core/git-request-pull:115:set fnord $(git ls-remote "$url" | /usr/bin/perl -e "$find_matching_ref" "${remote:-HEAD}" "$headrev") ./usr/libexec/git-core/git-web--browse:131: # /usr/bin/cygstart indicates Cygwin ./usr/libexec/git-core/git-web--browse:132: if test -x /usr/bin/cygstart; then ./usr/sbin/perl-cleaner:303: if [[ ${PMS_COMMAND[${PMS_INDEX}]} == emerge && -x ""/usr/bin/portageq ]] ; then ./usr/share/git/contrib/hooks/pre-auto-gc-battery:35:elif test -x /usr/bin/pmset && /usr/bin/pmset -g batt | ./usr/share/libtool/configure:39:# Printing a long string crashes Solaris 7 /usr/bin/printf. ./usr/share/libtool/configure:1913:/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1917:/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1919:/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1921:/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:2296:# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ./usr/share/libtool/configure:5182: lt_cv_file_magic_cmd='/usr/bin/file -L' ./usr/share/libtool/configure:5223: lt_cv_file_magic_cmd=/usr/bin/file ./usr/share/libtool/configure:5237: lt_cv_file_magic_cmd /usr/bin/file ./usr/share/libtool/configure:5284: lt_cv_file_magic_cmd /usr/bin/file ./usr/share/libtool/configure:6428: case `/usr/bin/fil conftest.$ac_objext` in ./usr/share/libtool/configure:6449: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6461: case `/usr/bin/file conftest.$ac_objext` in ./usr/share/libtool/configure:6487: case `/usr/bin/fil conftest.$ac_objext` in ./usr/share/libtool/configure:6495: case `/usr/bin/fil conftest.$ac_objext` in ./usr/share/libtool/configure:6503: case `/usr/bin/fil conftest.$ac_objext` in ./usr/share/libtool/configure:6527: case `/usr/bin/fil conftest.o` in ./usr/share/libtool/configure:6534: case `/usr/bin/file conftest.o` in ./usr/share/libtool/configure:6640: case `/usr/bin/fil conftest.o` in ./usr/share/libtool/configure:11073: if test -x /usr/bin/objformat; then ./usr/share/libtool/configure:11074: objformat=`/usr/bin/objformat` ./usr/share/libtool/configure:13445:# Printing a long string crashes Solaris 7 /usr/bin/printf. Step 10: Get the paths through copy and pasting (ran out of oneliner stamina) and, run them through uniq Results: /usr/bin/aarch64-unknown-linux-gnu-nm /usr/bin/arch /usr/bin/bash /usr/bin/cygstart /usr/bin/dd /usr/bin/editor /usr/bin/emacs /usr/bin/env /usr/bin/file /usr/bin/grep /usr/bin/grep /usr/bin/gvim /usr/bin/hostinfo /usr/bin/install /usr/bin/installbsd /usr/bin/nano /usr/bin/objformat /usr/bin/oslevel /usr/bin/pcprofiledump /usr/bin/perl /usr/bin/pmset /usr/bin/portageq /usr/bin/printf /usr/bin/uname /usr/bin/vi /usr/bin/vim /usr/bin/xemacs Step 11: Take that list of suspicious paths and run a for loop on them against the ffs extract stage3 work directory for f in $(cat /tmp/ffs_stage1_extract_bin_paths.list | xargs) ; do file /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20${f} ; done | grep "No such file" > /tmp/ffs_stage1_non_existent_paths.list /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/editor: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/editor' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/emacs: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/emacs' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/xemacs: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/xemacs' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/vim: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/vim' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/gvim: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/gvim' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/vi: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/vi' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/bash: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/bash' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/grep: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/grep' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/dd: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/dd' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/grep: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/grep' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/cygstart: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/cygstart' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/pmset: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/pmset' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/hostinfo: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/hostinfo' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/oslevel: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/oslevel' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/installbsd: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/installbsd' (No such file or directory) /var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/objformat: cannot open `/var/tmp/metro/work/next/stage3-raspi4-next-2022-10-20/usr/bin/objformat' (No such fil or directory) Step 12: Re-extract the file path and run a grep for those files to determine the exact scripts that have refernces to non-existent paths cat /tmp/ffs_stage1_non_existent_paths.list | cut -d: -f1 | cut -d/ -f8-10 | sed 's/usr/\/usr/g' > /tmp/ffs_stage1_non_canonical_bin_paths.list Results: /usr/bin/editor /usr/bin/emacs /usr/bin/xemacs /usr/bin/vim /usr/bin/gvim /usr/bin/vi /usr/bin/bash /usr/bin/grep /usr/bin/dd /usr/bin/grep /usr/bin/cygstart /usr/bin/pmset /usr/bin/hostinfo /usr/bin/oslevel /usr/bin/installbsd /usr/bin/objformat Step 13: Use the list of non-canonical derived paths in all of the stage1 shell scripts and grep against Step 9 filtered search results for bin in $(cat /tmp/ffs_stage1_non_canonical_bin_paths.list | xargs); do grep $bin /tmp/ffs_stage1_bin_paths_search_refined.list ; done > /tmp/ffs_stage1_final_scripts_with_non_canonical_paths.list Step 14: Take the script paths from the final match against non-canoical derived paths and run it through equery for a final set of bad packages for f in $(cat /tmp/ffs_stage1_final_scripts_with_non_canonical_paths.list | cut -d: -f1 | sed 's/\.//g' | sort | uniq); do equery b $f ; done > /tmp/ffs_stage1_final_catpkgs_scripts_with_non_canonical_paths.list Results: * Searching for /usr/bin/bashbug ... app-shells/bash-5.2 (/usr/bin/bashbug) * Searching for /usr/bin/eselect ... app-admin/eselect-1.4.14-r1 (/usr/bin/eselect) * Searching for /usr/bin/gdiffmk ... sys-apps/groff-1.22.4 (/usr/bin/gdiffmk) * Searching for /usr/bin/ldd ... sys-libs/glibc-2.33-r2 (/usr/bin/ldd) * Searching for /usr/bin/libtool ... sys-devel/libtool-2.4.6-r5 (/usr/bin/libtool) * Searching for /usr/bin/libtoolize ... sys-devel/libtool-2.4.6-r5 (/usr/bin/libtoolize) * Searching for /usr/bin/sotruss ... sys-libs/glibc-2.33-r2 (/usr/bin/sotruss) * Searching for /usr/bin/xtrace ... sys-libs/glibc-2.33-r2 (/usr/bin/xtrace) * Searching for /usr/bin/zgrep ... app-arch/gzip-1.12 (/usr/bin/zgrep) * Searching for /usr/libexec/git-core/git-web--browse ... dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-web--browse) * Searching for /usr/share/git/contrib/hooks/pre-auto-gc-battery ... dev-vcs/git-2.38.1 (/usr/share/git/contrib/hooks/pre-auto-gc-battery) * Searching for /usr/share/libtool/configure ... sys-devel/libtool-2.4.6-r5 (/usr/share/libtool/configure) Step 15: Extract the final CatPkg names with scripts that contain non-canonical paths in them grep -v Searching /tmp/ffs_stage1_final_catpkgs_scripts_with_non_canonical_paths.list | sort Results: app-admin/eselect-1.4.14-r1 (/usr/bin/eselect) app-arch/gzip-1.12 (/usr/bin/zgrep) app-shells/bash-5.2 (/usr/bin/bashbug) dev-vcs/git-2.38.1 (/usr/libexec/git-core/git-web--browse) dev-vcs/git-2.38.1 (/usr/share/git/contrib/hooks/pre-auto-gc-battery) sys-apps/groff-1.22.4 (/usr/bin/gdiffmk) sys-devel/libtool-2.4.6-r5 (/usr/bin/libtool) sys-devel/libtool-2.4.6-r5 (/usr/bin/libtoolize) sys-devel/libtool-2.4.6-r5 (/usr/share/libtool/configure) sys-libs/glibc-2.33-r2 (/usr/bin/ldd) sys-libs/glibc-2.33-r2 (/usr/bin/sotruss) sys-libs/glibc-2.33-r2 (/usr/bin/xtrace) Step 16: Use the final list of non-canonical derived bin path and research all stage1 shell scripts with them: for sh in $(cat /tmp/ffs_stage1_shell_scripts.list | xargs) ; do for p in $(cat /tmp/ffs_stage1_non_canonical_bin_paths.list); do grep -nH $p $sh ; done ; done Results: ./usr/bin/zgrep:25:grep='${GREP-'\''/usr/bin/grep'\''}' ./usr/bin/zgrep:25:grep='${GREP-'\''/usr/bin/grep'\''}' ./usr/bin/gdiffmk:1:#!/usr/bin/bash ./usr/bin/gdiffmk:173:BASH_PROG=/usr/bin/bash ./usr/bin/bashbug:123: if [ -x /usr/bin/editor ]; then ./usr/bin/bashbug:131: elif [ -x /usr/bin/emacs ]; then ./usr/bin/bashbug:133: elif [ -x /usr/bin/xemacs ]; then ./usr/bin/bashbug:135: elif [ -x /usr/bin/vim; then ./usr/bin/bashbug:137: elif [ -x /usr/bin/gvim; then ./usr/bin/bashbug:135: elif [ -x /usr/bin/vim; then ./usr/bin/bashbug:145: elif [ -x /usr/bin/vi ]; then ./usr/bin/eselect:1:#!/usr/bin/bash ./usr/bin/ldd:1:#! /usr/bin/bash ./usr/bin/sotruss:1:#! /usr/bin/bash ./usr/bin/xtrace:1:#! /usr/bin/bash ./usr/bin/libtool:1:#! /usr/bin/bash ./usr/bin/libtool:69:SHELL="/usr/bin/bash" ./usr/bin/libtool:94:GREP="/usr/bin/grep" ./usr/bin/libtool:97:EGREP="/usr/bin/grep -E" ./usr/bin/libtool:100:FGREP="/usr/bin/grep -F" ./usr/bin/libtool:198:lt_truncate_bin="/usr/bin/dd bs=4096 count=1" ./usr/bin/libtool:94:GREP="/usr/bin/grep" ./usr/bin/libtool:97:EGREP="/usr/bin/grep -E" ./usr/bin/libtool:100:FGREP="/usr/bin/grep -F" ./usr/bin/libtoolize:45:: ${EGREP="/usr/bin/grep -E"} ./usr/bin/libtoolize:46:: ${FGREP="/usr/bin/grep -F"} ./usr/bin/libtoolize:47:: ${GREP="/usr/bin/grep"} ./usr/bin/libtoolize:45:: ${EGREP="/usr/bin/grep -E"} ./usr/bin/libtoolize:46:: ${FGREP="/usr/bin/grep -F"} ./usr/bin/libtoolize:47:: ${GREP="/usr/bin/grep"} ./usr/share/gnuconfig/config.guess:566:if [ -x /usr/bin/oslevel ] ; then ./usr/share/gnuconfig/config.guess:567: IBM_REV=`/usr/bin/oslevel` ./usr/share/gnuconfig/config.guess:1461:/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` ./usr/share/git/contrib/hooks/pre-auto-gc-battery:35:elif test -x /usr/bin/pmset && /usr/bin/pmset -g batt | ./usr/share/libtool/configure:1919:/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:1921:/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` ./usr/share/libtool/configure:2296:# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ./usr/share/libtool/configure:11073: if test -x /usr/bin/objformat; then ./usr/share/libtool/configure:11074: objformat=`/usr/bin/objformat` ./usr/libexec/git-core/git-web--browse:131: # /usr/bin/cygstart indicates Cygwin ./usr/libexec/git-core/git-web--browse:132: if test -x /usr/bin/cygstart; then