checkflist revision 1.30
11.3Smikel#! /bin/sh -- 21.3Smikel# 31.30Sapb# $NetBSD: checkflist,v 1.30 2006/01/04 15:08:42 apb 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.29SapbSDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")" 171.20Slukem 181.20Slukemes=0 191.20Slukemcleanup() 201.20Slukem{ 211.29Sapb /bin/rm -rf "${SDIR}" 221.29Sapb if [ ${es} -gt 255 ] ; then 231.20Slukem es=255 241.20Slukem fi 251.29Sapb exit ${es} 261.20Slukem} 271.20Slukemtrap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 281.20Slukem 291.9Srossorigin=. 301.10Sperryxargs="" 311.10Sperrydargs="" 321.15Slukemmetalog= 331.22Slukemallowextra=false 341.22Slukemallowmissing=false 351.10Sperry 361.10Sperry# handle args 371.24Slukemwhile getopts xbM:em ch; do 381.24Slukem case ${ch} in 391.24Slukem x) 401.10Sperry xargs="-x" 411.18Stron origin="./etc/X11 ./etc/fonts ./usr/X11R6" 421.10Sperry ;; 431.24Slukem b) 441.10Sperry xargs="-b" 451.10Sperry ;; 461.24Slukem M) 471.29Sapb metalog="${OPTARG}" 481.15Slukem ;; 491.24Slukem e) 501.22Slukem allowextra=true 511.22Slukem ;; 521.24Slukem m) 531.22Slukem allowmissing=true 541.22Slukem ;; 551.24Slukem *) 561.10Sperry cat 1>&2 <<USAGE 571.24SlukemUsage: ${prog} [-x|-b] [-M metalog] [-e] [-m] 581.24Slukem -x check only x11 lists 591.24Slukem -b check netbsd + x11 lists 601.15Slukem -M metalog metalog file 611.22Slukem -e extra files are not considered an error 621.22Slukem -m missing files are not considered an error 631.10SperryUSAGE 641.10Sperry exit 1 651.10Sperry ;; 661.10Sperry esac 671.10Sperrydone 681.24Slukemshift $((${OPTIND} - 1)) 691.10Sperry 701.30Sapb# 711.30Sapb# Exceptions to flist checking (all begin with "./"): 721.30Sapb# 731.30Sapb# * ignore var/db/syspkg and its contents 741.30Sapb# * ignore ${metalog} 751.30Sapb# * ignore METALOG 761.30Sapb# * ignore etc/mtree/set.* 771.30Sapb# 781.30SapbIGNORE_REGEXP="^\./var/db/syspkg(\$|/)" 791.29Sapbif [ -n "${metalog}" ]; then 801.30Sapb ml="${metalog#${DESTDIR}/}" 811.30Sapb ml2="METALOG" 821.30Sapb IGNORE_REGEXP="${IGNORE_REGEXP}|^\./${ml}\$|^\./${ml2}\$" 831.30Sapb IGNORE_REGEXP="${IGNORE_REGEXP}|^\./etc/mtree/set\.[a-z]*\$" 841.15Slukemfi 851.15Slukem 861.30Sapb# 871.30Sapb# Here would be a good place to add custom exceptions to flist checking. 881.30Sapb# 891.15Slukem 901.30Sapb# 911.30Sapb# Make three lists: 921.30Sapb# * ${SDIR}/files: files present in DESTDIR. 931.30Sapb# * ${SDIR}/flist: files mentioned in flist; 941.30Sapb# * ${SDIR}/mlist: files mentioned in metalog; 951.30Sapb# 961.30Sapb( cd "${DESTDIR}" && ${FIND} ${origin} \ 971.30Sapb \( -type d -o -type f -o -type l \) -print ) \ 981.30Sapb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/files" 991.30Sapb${HOST_SH} "${rundir}/makeflist" ${xargs} ${dargs} \ 1001.30Sapb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/flist" 1011.30Sapbif [ -n "${metalog}" ]; then 1021.30Sapb ${AWK} '{print $1}' <"${metalog}" \ 1031.30Sapb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/mlist" 1041.30Sapbfi 1051.10Sperry 1061.30Sapb# 1071.30Sapb# compare DESTDIR with METALOG, and report on differences. 1081.30Sapb# 1091.30Sapbif [ -n "${metalog}" ]; then 1101.30Sapb ${COMM} -23 "${SDIR}/files" "${SDIR}/mlist" > "${SDIR}/missing" 1111.30Sapb ${COMM} -13 "${SDIR}/files" "${SDIR}/mlist" > "${SDIR}/extra" 1121.15Slukem 1131.30Sapb if [ -s "${SDIR}/extra" ]; then 1141.30Sapb count="$(${AWK} 'END {print NR}' "${SDIR}/extra")" 1151.30Sapb echo "" 1161.30Sapb echo "======= ${count} extra files in METALOG =========" 1171.30Sapb echo "Files in METALOG but missing from DESTDIR." 1181.30Sapb echo "File was deleted after installation ?" 1191.30Sapb echo "------------------------------------------" 1201.30Sapb cat "${SDIR}/extra" 1211.30Sapb echo "========= end of ${count} extra files ===========" 1221.30Sapb echo "" 1231.30Sapb es=1 # this is fatal even if ${allowextra} is true 1241.30Sapb fi 1251.30Sapb 1261.30Sapb if [ -s "${SDIR}/missing" ]; then 1271.30Sapb count="$(${AWK} 'END {print NR}' "${SDIR}/missing")" 1281.30Sapb echo "" 1291.30Sapb echo "====== ${count} missing files in METALOG ========" 1301.30Sapb echo "Files in DESTDIR but missing from METALOG." 1311.30Sapb echo "File installed but not registered in METALOG ?" 1321.30Sapb echo "------------------------------------------" 1331.30Sapb cat "${SDIR}/missing" 1341.30Sapb echo "======== end of ${count} missing files ==========" 1351.30Sapb echo "" 1361.30Sapb es=1 # this is fatal even if ${allowmissing} is true 1371.30Sapb fi 1381.30Sapbfi 1391.30Sapb 1401.30Sapb# 1411.30Sapb# compare flist with DESTDIR, and report on differences. 1421.30Sapb# 1431.30Sapb${COMM} -23 "${SDIR}/flist" "${SDIR}/files" > "${SDIR}/missing" 1441.30Sapb${COMM} -13 "${SDIR}/flist" "${SDIR}/files" > "${SDIR}/extra" 1451.15Slukem 1461.29Sapbif [ -s "${SDIR}/extra" ]; then 1471.29Sapb count="$(${AWK} 'END {print NR}' "${SDIR}/extra")" 1481.20Slukem echo "" 1491.30Sapb echo "======= ${count} extra files in DESTDIR =========" 1501.20Slukem echo "Files in DESTDIR but missing from flist." 1511.20Slukem echo "File is obsolete or flist is out of date ?" 1521.22Slukem if ${allowextra}; then 1531.30Sapb echo "This is non-fatal, due to '-e' option." 1541.22Slukem else 1551.22Slukem es=1 1561.22Slukem fi 1571.20Slukem echo "------------------------------------------" 1581.29Sapb cat "${SDIR}/extra" 1591.25Slukem echo "========= end of ${count} extra files ===========" 1601.20Slukem echo "" 1611.20Slukemfi 1621.20Slukem 1631.29Sapbif [ -s "${SDIR}/missing" ]; then 1641.29Sapb count="$(${AWK} 'END {print NR}' "${SDIR}/missing")" 1651.20Slukem echo "" 1661.30Sapb echo "====== ${count} missing files in DESTDIR ========" 1671.20Slukem echo "Files in flist but missing from DESTDIR." 1681.20Slukem echo "File wasn't installed ?" 1691.22Slukem if ${allowmissing}; then 1701.30Sapb echo "This is non-fatal, due to '-m' option." 1711.22Slukem else 1721.22Slukem es=1 1731.22Slukem fi 1741.20Slukem echo "------------------------------------------" 1751.29Sapb cat "${SDIR}/missing" 1761.25Slukem echo "======== end of ${count} missing files ==========" 1771.20Slukem echo "" 1781.15Slukemfi 1791.20Slukem 1801.29Sapbexit 0 # cleanup will exit with ${es} 181