checkflist revision 1.45
11.3Smikel#! /bin/sh -- 21.3Smikel# 31.45Ssnj# $NetBSD: checkflist,v 1.45 2018/03/01 07:18:39 snj Exp $ 41.3Smikel# 51.30Sapb# Verify output of makeflist against contents of ${DESTDIR} and ${metalog}. 61.1Scgd 71.29Sapbif [ -z "${DESTDIR}" ]; then 81.15Slukem echo "DESTDIR must be set" 91.1Scgd exit 1 101.15Slukemfi 111.15Slukem 121.29Sapbprog="${0##*/}" 131.27Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 141.27Sapb. "${rundir}/sets.subr" 151.1Scgd 161.42Suebayasi# 171.42Suebayasi# * ${SETS_DLIST}: files present in DESTDIR. 181.42Suebayasi# * ${SETS_FLIST}: files mentioned in flist; 191.42Suebayasi# * ${SETS_MLIST}: files mentioned in metalog; 201.42Suebayasi# 211.42SuebayasiSETS_DLIST="${DESTDIR}/SETS.dlist" 221.42SuebayasiSETS_FLIST="${DESTDIR}/SETS.flist" 231.42SuebayasiSETS_MLIST="${DESTDIR}/SETS.mlist" 241.42Suebayasi 251.42Suebayasi# 261.42Suebayasi# * ${SETS_METALOG_EXTRA}: Files in METALOG but missing from DESTDIR." 271.42Suebayasi# * ${SETS_METALOG_MISSING}: Files in DESTDIR but missing from METALOG." 281.42Suebayasi# * ${SETS_DESTDIR_EXTRA}: Files in DESTDIR but missing from setlist." 291.42Suebayasi# * ${SETS_DESTDIR_MISSING}: Files in setlist but missing from DESTDIR." 301.42Suebayasi# 311.42SuebayasiSETS_METALOG_EXTRA="${DESTDIR}/SETS.metalog.extra" 321.42SuebayasiSETS_METALOG_MISSING="${DESTDIR}/SETS.metalog.missing" 331.42SuebayasiSETS_DESTDIR_EXTRA="${DESTDIR}/SETS.destdir.extra" 341.42SuebayasiSETS_DESTDIR_MISSING="${DESTDIR}/SETS.destdir.missing" 351.20Slukem 361.20Slukemes=0 371.20Slukemcleanup() 381.20Slukem{ 391.32Sapb if [ ${es} -gt 255 ]; then 401.20Slukem es=255 411.20Slukem fi 421.29Sapb exit ${es} 431.20Slukem} 441.20Slukemtrap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 451.20Slukem 461.9Srossorigin=. 471.10Sperryxargs="" 481.10Sperrydargs="" 491.15Slukemmetalog= 501.22Slukemallowextra=false 511.22Slukemallowmissing=false 521.10Sperry 531.10Sperry# handle args 541.35Suebayasiwhile getopts xybL:M:em ch; do 551.24Slukem case ${ch} in 561.24Slukem x) 571.10Sperry xargs="-x" 581.45Ssnj origin="./etc/X11 ./etc/fonts ./usr/X11R7" 591.10Sperry ;; 601.35Suebayasi y) 611.35Suebayasi xargs="-y" 621.35Suebayasi origin="./etc/ext ./usr/ext" 631.35Suebayasi ;; 641.35Suebayasi # backward compat 651.24Slukem b) 661.10Sperry xargs="-b" 671.10Sperry ;; 681.35Suebayasi L) 691.35Suebayasi xargs="-L ${OPTARG}" 701.35Suebayasi ;; 711.24Slukem M) 721.29Sapb metalog="${OPTARG}" 731.15Slukem ;; 741.24Slukem e) 751.22Slukem allowextra=true 761.22Slukem ;; 771.24Slukem m) 781.22Slukem allowmissing=true 791.22Slukem ;; 801.24Slukem *) 811.10Sperry cat 1>&2 <<USAGE 821.35SuebayasiUsage: ${prog} [-x|-y|-b|-L lists] [-M metalog] [-e] [-m] 831.24Slukem -x check only x11 lists 841.35Suebayasi -y check only extsrc lists 851.24Slukem -b check netbsd + x11 lists 861.35Suebayasi -L base,x,ext check specified lists 871.15Slukem -M metalog metalog file 881.22Slukem -e extra files are not considered an error 891.22Slukem -m missing files are not considered an error 901.10SperryUSAGE 911.10Sperry exit 1 921.10Sperry ;; 931.10Sperry esac 941.10Sperrydone 951.24Slukemshift $((${OPTIND} - 1)) 961.10Sperry 971.30Sapb# 981.30Sapb# Exceptions to flist checking (all begin with "./"): 991.30Sapb# 1001.30Sapb# * ignore var/db/syspkg and its contents 1011.34Sapb# * ignore METALOG and METALOG.* 1021.30Sapb# * ignore etc/mtree/set.* 1031.30Sapb# 1041.36Suebayasiignore_exceptions() 1051.36Suebayasi{ 1061.40SuebayasiIGNORE_REGEXP_SYSPKG="^\./var/db/syspkg(\$|/)" 1071.40SuebayasiIGNORE_REGEXP_METALOG="^\./METALOG(\..*)?\$" 1081.42SuebayasiIGNORE_REGEXP_SETS="^\./SETS\..*\$" 1091.40SuebayasiIGNORE_REGEXP_MTREE="^\./etc/mtree/set\.[a-z]*\$" 1101.40Suebayasi 1111.40Suebayasi ${EGREP} -v \ 1121.40Suebayasi -e "${IGNORE_REGEXP_SYSPKG}" \ 1131.40Suebayasi -e "${IGNORE_REGEXP_METALOG}" \ 1141.42Suebayasi -e "${IGNORE_REGEXP_SETS}" \ 1151.40Suebayasi -e "${IGNORE_REGEXP_MTREE}" 1161.36Suebayasi} 1171.15Slukem 1181.30Sapb# 1191.30Sapb# Here would be a good place to add custom exceptions to flist checking. 1201.30Sapb# 1211.15Slukem 1221.30Sapb# 1231.30Sapb# Make three lists: 1241.30Sapb# 1251.34Sapb# All three lists are filtered against ${IGNORE_REGEXP}. 1261.34Sapb# 1271.36Suebayasi 1281.42Suebayasigenerate_dlist() 1291.36Suebayasi{ 1301.30Sapb( cd "${DESTDIR}" && ${FIND} ${origin} \ 1311.30Sapb \( -type d -o -type f -o -type l \) -print ) \ 1321.42Suebayasi | ${SORT} -u | ignore_exceptions >"${SETS_DLIST}" 1331.36Suebayasi} 1341.36Suebayasi 1351.36Suebayasigenerate_flist() 1361.36Suebayasi{ 1371.30Sapb${HOST_SH} "${rundir}/makeflist" ${xargs} ${dargs} \ 1381.42Suebayasi | ${SORT} -u | ignore_exceptions >"${SETS_FLIST}" 1391.36Suebayasi} 1401.36Suebayasi 1411.36Suebayasigenerate_mlist() 1421.36Suebayasi{ 1431.30Sapbif [ -n "${metalog}" ]; then 1441.30Sapb ${AWK} '{print $1}' <"${metalog}" \ 1451.42Suebayasi | ${SORT} -u | ignore_exceptions >"${SETS_MLIST}" 1461.43Schristoselse 1471.43Schristos SETS_MLIST=/dev/null 1481.30Sapbfi 1491.36Suebayasi} 1501.36Suebayasi 1511.41Suebayasigenerate_mlist_missing() 1521.36Suebayasi{ 1531.42Suebayasi ${COMM} -23 "${SETS_DLIST}" "${SETS_MLIST}" > "${SETS_METALOG_MISSING}" 1541.36Suebayasi} 1551.36Suebayasi 1561.41Suebayasigenerate_mlist_extra() 1571.36Suebayasi{ 1581.42Suebayasi ${COMM} -13 "${SETS_DLIST}" "${SETS_MLIST}" > "${SETS_METALOG_EXTRA}" 1591.36Suebayasi} 1601.36Suebayasi 1611.42Suebayasigenerate_dlist_missing() 1621.41Suebayasi{ 1631.42Suebayasi ${COMM} -23 "${SETS_FLIST}" "${SETS_DLIST}" > "${SETS_DESTDIR_MISSING}" 1641.41Suebayasi} 1651.41Suebayasi 1661.42Suebayasigenerate_dlist_extra() 1671.41Suebayasi{ 1681.42Suebayasi ${COMM} -13 "${SETS_FLIST}" "${SETS_DLIST}" > "${SETS_DESTDIR_EXTRA}" 1691.41Suebayasi} 1701.41Suebayasi 1711.39Suebayasiexist_case_insensitive() 1721.39Suebayasi{ 1731.39Suebayasi while read f; do 1741.39Suebayasi [ -f "${DESTDIR}/${f}" ] || \ 1751.39Suebayasi [ -d "${DESTDIR}/${f}" ] || \ 1761.39Suebayasi [ -L "${DESTDIR}/${f}" ] || \ 1771.39Suebayasi echo "$f" 1781.39Suebayasi done 1791.39Suebayasi} 1801.39Suebayasi 1811.30Sapb# 1821.30Sapb# compare DESTDIR with METALOG, and report on differences. 1831.30Sapb# 1841.37Suebayasicompare_metalog() 1851.37Suebayasi{ 1861.33Sdbj # Handle case insensitive filesystems 1871.42Suebayasi mv -f "${SETS_METALOG_EXTRA}" "${SETS_METALOG_EXTRA}.all" 1881.42Suebayasi exist_case_insensitive < "${SETS_METALOG_EXTRA}.all" > "${SETS_METALOG_EXTRA}" 1891.42Suebayasi rm -f "${SETS_METALOG_EXTRA}.all" 1901.33Sdbj 1911.37Suebayasi check_metalog_extra 1921.37Suebayasi check_metalog_missing 1931.37Suebayasi} 1941.37Suebayasi 1951.37Suebayasicheck_metalog_extra() 1961.37Suebayasi{ 1971.42Suebayasi if [ -s "${SETS_METALOG_EXTRA}" ]; then 1981.42Suebayasi count="$(${AWK} 'END {print NR}' "${SETS_METALOG_EXTRA}")" 1991.30Sapb echo "" 2001.30Sapb echo "======= ${count} extra files in METALOG =========" 2011.30Sapb echo "Files in METALOG but missing from DESTDIR." 2021.30Sapb echo "File was deleted after installation ?" 2031.30Sapb echo "------------------------------------------" 2041.42Suebayasi cat "${SETS_METALOG_EXTRA}" 2051.30Sapb echo "========= end of ${count} extra files ===========" 2061.30Sapb echo "" 2071.30Sapb es=1 # this is fatal even if ${allowextra} is true 2081.30Sapb fi 2091.37Suebayasi} 2101.30Sapb 2111.37Suebayasicheck_metalog_missing() 2121.37Suebayasi{ 2131.42Suebayasi if [ -s "${SETS_METALOG_MISSING}" ]; then 2141.42Suebayasi count="$(${AWK} 'END {print NR}' "${SETS_METALOG_MISSING}")" 2151.30Sapb echo "" 2161.30Sapb echo "====== ${count} missing files in METALOG ========" 2171.30Sapb echo "Files in DESTDIR but missing from METALOG." 2181.30Sapb echo "File installed but not registered in METALOG ?" 2191.30Sapb echo "------------------------------------------" 2201.42Suebayasi cat "${SETS_METALOG_MISSING}" 2211.30Sapb echo "======== end of ${count} missing files ==========" 2221.30Sapb echo "" 2231.30Sapb es=1 # this is fatal even if ${allowmissing} is true 2241.30Sapb fi 2251.37Suebayasi} 2261.37Suebayasi 2271.30Sapb# 2281.30Sapb# compare flist with DESTDIR, and report on differences. 2291.30Sapb# 2301.37Suebayasicompare_destdir() 2311.37Suebayasi{ 2321.33Sdbj# Handle case insensitive filesystems 2331.42Suebayasimv -f "${SETS_DESTDIR_MISSING}" "${SETS_DESTDIR_MISSING}.all" 2341.42Suebayasiexist_case_insensitive < "${SETS_DESTDIR_MISSING}.all" > "${SETS_DESTDIR_MISSING}" 2351.42Suebayasirm -f "${SETS_DESTDIR_MISSING}.all" 2361.33Sdbj 2371.37Suebayasicheck_destdir_extra 2381.37Suebayasicheck_destdir_missing 2391.37Suebayasi} 2401.37Suebayasi 2411.37Suebayasicheck_destdir_extra() 2421.37Suebayasi{ 2431.42Suebayasiif [ -s "${SETS_DESTDIR_EXTRA}" ]; then 2441.42Suebayasi count="$(${AWK} 'END {print NR}' "${SETS_DESTDIR_EXTRA}")" 2451.20Slukem echo "" 2461.30Sapb echo "======= ${count} extra files in DESTDIR =========" 2471.20Slukem echo "Files in DESTDIR but missing from flist." 2481.20Slukem echo "File is obsolete or flist is out of date ?" 2491.22Slukem if ${allowextra}; then 2501.30Sapb echo "This is non-fatal, due to '-e' option." 2511.22Slukem else 2521.22Slukem es=1 2531.22Slukem fi 2541.20Slukem echo "------------------------------------------" 2551.42Suebayasi cat "${SETS_DESTDIR_EXTRA}" 2561.25Slukem echo "========= end of ${count} extra files ===========" 2571.20Slukem echo "" 2581.20Slukemfi 2591.37Suebayasi} 2601.20Slukem 2611.37Suebayasicheck_destdir_missing() 2621.37Suebayasi{ 2631.42Suebayasiif [ -s "${SETS_DESTDIR_MISSING}" ]; then 2641.42Suebayasi count="$(${AWK} 'END {print NR}' "${SETS_DESTDIR_MISSING}")" 2651.20Slukem echo "" 2661.30Sapb echo "====== ${count} missing files in DESTDIR ========" 2671.20Slukem echo "Files in flist but missing from DESTDIR." 2681.20Slukem echo "File wasn't installed ?" 2691.22Slukem if ${allowmissing}; then 2701.30Sapb echo "This is non-fatal, due to '-m' option." 2711.22Slukem else 2721.22Slukem es=1 2731.22Slukem fi 2741.20Slukem echo "------------------------------------------" 2751.42Suebayasi cat "${SETS_DESTDIR_MISSING}" 2761.25Slukem echo "======== end of ${count} missing files ==========" 2771.20Slukem echo "" 2781.15Slukemfi 2791.37Suebayasi} 2801.37Suebayasi 2811.42Suebayasigenerate_dlist 2821.38Suebayasigenerate_flist 2831.38Suebayasigenerate_mlist 2841.38Suebayasi 2851.42Suebayasigenerate_mlist_missing 2861.42Suebayasigenerate_mlist_extra 2871.42Suebayasi 2881.42Suebayasigenerate_dlist_missing 2891.42Suebayasigenerate_dlist_extra 2901.42Suebayasi 2911.39Suebayasiif false && [ -n "${metalog}" ]; then 2921.41Suebayasi # XXX: Temporarily disabled due to problems with obsolete files in metalog 2931.39Suebayasi compare_metalog 2941.41Suebayasielse 2951.41Suebayasi compare_destdir 2961.39Suebayasifi 2971.20Slukem 2981.29Sapbexit 0 # cleanup will exit with ${es} 299