diff options
author | Dave Cobbley <david.j.cobbley@linux.intel.com> | 2018-08-14 20:05:37 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-08-23 04:26:31 +0300 |
commit | eb8dc40360f0cfef56fb6947cc817a547d6d9bc6 (patch) | |
tree | de291a73dc37168da6370e2cf16c347d1eba9df8 /poky/scripts/sstate-sysroot-cruft.sh | |
parent | 9c3cf826d853102535ead04cebc2d6023eff3032 (diff) | |
download | openbmc-eb8dc40360f0cfef56fb6947cc817a547d6d9bc6.tar.xz |
[Subtree] Removing import-layers directory
As part of the move to subtrees, need to bring all the import layers
content to the top level.
Change-Id: I4a163d10898cbc6e11c27f776f60e1a470049d8f
Signed-off-by: Dave Cobbley <david.j.cobbley@linux.intel.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'poky/scripts/sstate-sysroot-cruft.sh')
-rwxr-xr-x | poky/scripts/sstate-sysroot-cruft.sh | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/poky/scripts/sstate-sysroot-cruft.sh b/poky/scripts/sstate-sysroot-cruft.sh new file mode 100755 index 0000000000..d9917f5152 --- /dev/null +++ b/poky/scripts/sstate-sysroot-cruft.sh @@ -0,0 +1,199 @@ +#!/bin/sh + +# Used to find files installed in sysroot which are not tracked by sstate manifest + +# Global vars +tmpdir= + +usage () { + cat << EOF +Welcome to sysroot cruft finding utility. +$0 <OPTION> + +Options: + -h, --help + Display this help and exit. + + --tmpdir=<tmpdir> + Specify tmpdir, will use the environment variable TMPDIR if it is not specified. + Something like /OE/oe-core/tmp-eglibc (no / at the end). + + --whitelist=<whitelist-file> + Text file, each line is regular expression for paths we want to ignore in resulting diff. + You can use diff file from the script output, if it contains only expected exceptions. + '#' is used as regexp delimiter, so you don't need to prefix forward slashes in paths. + ^ and $ is automatically added, so provide only the middle part. + Lines starting with '#' are ignored as comments. + All paths are relative to "sysroots" directory. + Directories don't end with forward slash. +EOF +} + +# Print error information and exit. +echo_error () { + echo "ERROR: $1" >&2 + exit 1 +} + +while [ -n "$1" ]; do + case $1 in + --tmpdir=*) + tmpdir=`echo $1 | sed -e 's#^--tmpdir=##' | xargs readlink -e` + [ -d "$tmpdir" ] || echo_error "Invalid argument to --tmpdir" + shift + ;; + --whitelist=*) + fwhitelist=`echo $1 | sed -e 's#^--whitelist=##' | xargs readlink -e` + [ -f "$fwhitelist" ] || echo_error "Invalid argument to --whitelist" + shift + ;; + --help|-h) + usage + exit 0 + ;; + *) + echo "Invalid arguments $*" + echo_error "Try '$0 -h' for more information." + ;; + esac +done + +# sstate cache directory, use environment variable TMPDIR +# if it was not specified, otherwise, error. +[ -n "$tmpdir" ] || tmpdir=$TMPDIR +[ -n "$tmpdir" ] || echo_error "No tmpdir found!" +[ -d "$tmpdir" ] || echo_error "Invalid tmpdir \"$tmpdir\"" + +OUTPUT=${tmpdir}/sysroot.cruft.`date "+%s"` + +# top level directories +WHITELIST="[^/]*" + +# generated by base-passwd recipe +WHITELIST="${WHITELIST} \ + .*/etc/group-\? \ + .*/etc/passwd-\? \ +" +# generated by pseudo-native +WHITELIST="${WHITELIST} \ + .*/var/pseudo \ + .*/var/pseudo/[^/]* \ +" + +# generated by package.bbclass:SHLIBSDIRS = "${PKGDATA_DIR}/${MLPREFIX}shlibs" +WHITELIST="${WHITELIST} \ + .*/shlibs \ + .*/pkgdata \ +" + +# generated by python +WHITELIST="${WHITELIST} \ + .*\.pyc \ + .*\.pyo \ + .*/__pycache__ \ +" + +# generated by lua +WHITELIST="${WHITELIST} \ + .*\.luac \ +" + +# generated by sgml-common-native +WHITELIST="${WHITELIST} \ + .*/etc/sgml/sgml-docbook.bak \ +" + +# generated by php +WHITELIST="${WHITELIST} \ + .*/usr/lib/php5/php/.channels \ + .*/usr/lib/php5/php/.channels/.* \ + .*/usr/lib/php5/php/.registry \ + .*/usr/lib/php5/php/.registry/.* \ + .*/usr/lib/php5/php/.depdb \ + .*/usr/lib/php5/php/.depdblock \ + .*/usr/lib/php5/php/.filemap \ + .*/usr/lib/php5/php/.lock \ +" + +# generated by toolchain +WHITELIST="${WHITELIST} \ + [^/]*-tcbootstrap/lib \ +" + +# generated by useradd.bbclass +WHITELIST="${WHITELIST} \ + [^/]*/home \ + [^/]*/home/xuser \ + [^/]*/home/xuser/.bashrc \ + [^/]*/home/xuser/.profile \ + [^/]*/home/builder \ + [^/]*/home/builder/.bashrc \ + [^/]*/home/builder/.profile \ +" + +# generated by image.py for WIC +# introduced in oe-core commit 861ce6c5d4836df1a783be3b01d2de56117c9863 +WHITELIST="${WHITELIST} \ + [^/]*/imgdata \ + [^/]*/imgdata/[^/]*\.env \ +" + +# generated by fontcache.bbclass +WHITELIST="${WHITELIST} \ + .*/var/cache/fontconfig/ \ +" + +# created by oe.utils.write_ld_so_conf which is used from few bbclasses and recipes: +# meta/classes/image-prelink.bbclass: oe.utils.write_ld_so_conf(d) +# meta/classes/insane.bbclass: oe.utils.write_ld_so_conf(d) +# meta/classes/insane.bbclass: oe.utils.write_ld_so_conf(d) +# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb: oe.utils.write_ld_so_conf(d) +# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb: oe.utils.write_ld_so_conf(d) +# introduced in oe-core commit 7fd1d7e639c2ed7e0699937a5cb245c187b7c811 +# and more visible since added to gobject-introspection in 10e0c1a3a452baa05d160a92a54b2e33cf0fd061 +WHITELIST="${WHITELIST} \ + [^/]*/etc/ld.so.conf \ +" + +SYSROOTS="`readlink -f ${tmpdir}`/sysroots/" + +mkdir ${OUTPUT} +find ${tmpdir}/sstate-control -name \*.populate-sysroot\* -o -name \*.populate_sysroot\* -o -name \*.package\* | xargs cat | grep sysroots | \ + sed 's#/$##g; s#///*#/#g' | \ + # work around for paths ending with / for directories and multiplied // (e.g. paths to native sysroot) + sort | sed "s#^${SYSROOTS}##g" > ${OUTPUT}/master.list.all.txt +sort -u ${OUTPUT}/master.list.all.txt > ${OUTPUT}/master.list.txt # -u because some directories are listed for more recipes +find ${tmpdir}/sysroots/ | \ + sort | sed "s#^${SYSROOTS}##g" > ${OUTPUT}/sysroot.list.txt + +diff ${OUTPUT}/master.list.all.txt ${OUTPUT}/master.list.txt > ${OUTPUT}/duplicates.txt +diff ${OUTPUT}/master.list.txt ${OUTPUT}/sysroot.list.txt > ${OUTPUT}/diff.all.txt + +grep "^> ." ${OUTPUT}/diff.all.txt | sed 's/^> //g' > ${OUTPUT}/diff.txt +for item in ${WHITELIST}; do + sed -i "\\#^${item}\$#d" ${OUTPUT}/diff.txt; + echo "${item}" >> ${OUTPUT}/used.whitelist.txt +done + +if [ -s "$fwhitelist" ] ; then + cat $fwhitelist >> ${OUTPUT}/used.whitelist.txt + cat $fwhitelist | grep -v '^#' | while read item; do + sed -i "\\#^${item}\$#d" ${OUTPUT}/diff.txt; + done +fi +# too many false positives for directories +# echo "Following files are installed in sysroot at least twice" +# cat ${OUTPUT}/duplicates + +RESULT=`cat ${OUTPUT}/diff.txt | wc -l` + +if [ "${RESULT}" != "0" ] ; then + echo "ERROR: ${RESULT} issues were found." + echo "ERROR: Following files are installed in sysroot, but not tracked by sstate:" + cat ${OUTPUT}/diff.txt +else + echo "INFO: All files are tracked by sstate or were explicitly ignored by this script" +fi + +echo "INFO: Output written in: ${OUTPUT}" +exit ${RESULT} |