1 1.3 mikel #! /bin/sh -- 2 1.3 mikel # 3 1.31 apb # $NetBSD: checkflist,v 1.31 2006/01/06 18:07:56 apb Exp $ 4 1.3 mikel # 5 1.30 apb # Verify output of makeflist against contents of ${DESTDIR} and ${metalog}. 6 1.1 cgd 7 1.29 apb if [ -z "${DESTDIR}" ]; then 8 1.15 lukem echo "DESTDIR must be set" 9 1.1 cgd exit 1 10 1.15 lukem fi 11 1.15 lukem 12 1.29 apb prog="${0##*/}" 13 1.27 apb rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 14 1.27 apb . "${rundir}/sets.subr" 15 1.1 cgd 16 1.29 apb SDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")" 17 1.20 lukem 18 1.20 lukem es=0 19 1.20 lukem cleanup() 20 1.20 lukem { 21 1.29 apb /bin/rm -rf "${SDIR}" 22 1.29 apb if [ ${es} -gt 255 ] ; then 23 1.20 lukem es=255 24 1.20 lukem fi 25 1.29 apb exit ${es} 26 1.20 lukem } 27 1.20 lukem trap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 28 1.20 lukem 29 1.9 ross origin=. 30 1.10 perry xargs="" 31 1.10 perry dargs="" 32 1.15 lukem metalog= 33 1.22 lukem allowextra=false 34 1.22 lukem allowmissing=false 35 1.10 perry 36 1.10 perry # handle args 37 1.24 lukem while getopts xbM:em ch; do 38 1.24 lukem case ${ch} in 39 1.24 lukem x) 40 1.10 perry xargs="-x" 41 1.18 tron origin="./etc/X11 ./etc/fonts ./usr/X11R6" 42 1.10 perry ;; 43 1.24 lukem b) 44 1.10 perry xargs="-b" 45 1.10 perry ;; 46 1.24 lukem M) 47 1.29 apb metalog="${OPTARG}" 48 1.15 lukem ;; 49 1.24 lukem e) 50 1.22 lukem allowextra=true 51 1.22 lukem ;; 52 1.24 lukem m) 53 1.22 lukem allowmissing=true 54 1.22 lukem ;; 55 1.24 lukem *) 56 1.10 perry cat 1>&2 <<USAGE 57 1.24 lukem Usage: ${prog} [-x|-b] [-M metalog] [-e] [-m] 58 1.24 lukem -x check only x11 lists 59 1.24 lukem -b check netbsd + x11 lists 60 1.15 lukem -M metalog metalog file 61 1.22 lukem -e extra files are not considered an error 62 1.22 lukem -m missing files are not considered an error 63 1.10 perry USAGE 64 1.10 perry exit 1 65 1.10 perry ;; 66 1.10 perry esac 67 1.10 perry done 68 1.24 lukem shift $((${OPTIND} - 1)) 69 1.10 perry 70 1.30 apb # 71 1.30 apb # Exceptions to flist checking (all begin with "./"): 72 1.30 apb # 73 1.30 apb # * ignore var/db/syspkg and its contents 74 1.30 apb # * ignore ${metalog} 75 1.30 apb # * ignore METALOG 76 1.30 apb # * ignore etc/mtree/set.* 77 1.30 apb # 78 1.30 apb IGNORE_REGEXP="^\./var/db/syspkg(\$|/)" 79 1.29 apb if [ -n "${metalog}" ]; then 80 1.30 apb ml="${metalog#${DESTDIR}/}" 81 1.30 apb ml2="METALOG" 82 1.30 apb IGNORE_REGEXP="${IGNORE_REGEXP}|^\./${ml}\$|^\./${ml2}\$" 83 1.30 apb IGNORE_REGEXP="${IGNORE_REGEXP}|^\./etc/mtree/set\.[a-z]*\$" 84 1.15 lukem fi 85 1.15 lukem 86 1.30 apb # 87 1.30 apb # Here would be a good place to add custom exceptions to flist checking. 88 1.30 apb # 89 1.15 lukem 90 1.30 apb # 91 1.30 apb # Make three lists: 92 1.30 apb # * ${SDIR}/files: files present in DESTDIR. 93 1.30 apb # * ${SDIR}/flist: files mentioned in flist; 94 1.30 apb # * ${SDIR}/mlist: files mentioned in metalog; 95 1.30 apb # 96 1.30 apb ( cd "${DESTDIR}" && ${FIND} ${origin} \ 97 1.30 apb \( -type d -o -type f -o -type l \) -print ) \ 98 1.30 apb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/files" 99 1.30 apb ${HOST_SH} "${rundir}/makeflist" ${xargs} ${dargs} \ 100 1.30 apb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/flist" 101 1.30 apb if [ -n "${metalog}" ]; then 102 1.30 apb ${AWK} '{print $1}' <"${metalog}" \ 103 1.30 apb | ${SORT} -u | ${EGREP} -v -e "${IGNORE_REGEXP}" >"${SDIR}/mlist" 104 1.30 apb fi 105 1.10 perry 106 1.30 apb # 107 1.30 apb # compare DESTDIR with METALOG, and report on differences. 108 1.30 apb # 109 1.31 apb # XXX: Temporarily disabled due to problems with obsolete files in metalog 110 1.31 apb # 111 1.31 apb if false && [ -n "${metalog}" ]; then 112 1.30 apb ${COMM} -23 "${SDIR}/files" "${SDIR}/mlist" > "${SDIR}/missing" 113 1.30 apb ${COMM} -13 "${SDIR}/files" "${SDIR}/mlist" > "${SDIR}/extra" 114 1.15 lukem 115 1.30 apb if [ -s "${SDIR}/extra" ]; then 116 1.30 apb count="$(${AWK} 'END {print NR}' "${SDIR}/extra")" 117 1.30 apb echo "" 118 1.30 apb echo "======= ${count} extra files in METALOG =========" 119 1.30 apb echo "Files in METALOG but missing from DESTDIR." 120 1.30 apb echo "File was deleted after installation ?" 121 1.30 apb echo "------------------------------------------" 122 1.30 apb cat "${SDIR}/extra" 123 1.30 apb echo "========= end of ${count} extra files ===========" 124 1.30 apb echo "" 125 1.30 apb es=1 # this is fatal even if ${allowextra} is true 126 1.30 apb fi 127 1.30 apb 128 1.30 apb if [ -s "${SDIR}/missing" ]; then 129 1.30 apb count="$(${AWK} 'END {print NR}' "${SDIR}/missing")" 130 1.30 apb echo "" 131 1.30 apb echo "====== ${count} missing files in METALOG ========" 132 1.30 apb echo "Files in DESTDIR but missing from METALOG." 133 1.30 apb echo "File installed but not registered in METALOG ?" 134 1.30 apb echo "------------------------------------------" 135 1.30 apb cat "${SDIR}/missing" 136 1.30 apb echo "======== end of ${count} missing files ==========" 137 1.30 apb echo "" 138 1.30 apb es=1 # this is fatal even if ${allowmissing} is true 139 1.30 apb fi 140 1.30 apb fi 141 1.30 apb 142 1.30 apb # 143 1.30 apb # compare flist with DESTDIR, and report on differences. 144 1.30 apb # 145 1.30 apb ${COMM} -23 "${SDIR}/flist" "${SDIR}/files" > "${SDIR}/missing" 146 1.30 apb ${COMM} -13 "${SDIR}/flist" "${SDIR}/files" > "${SDIR}/extra" 147 1.15 lukem 148 1.29 apb if [ -s "${SDIR}/extra" ]; then 149 1.29 apb count="$(${AWK} 'END {print NR}' "${SDIR}/extra")" 150 1.20 lukem echo "" 151 1.30 apb echo "======= ${count} extra files in DESTDIR =========" 152 1.20 lukem echo "Files in DESTDIR but missing from flist." 153 1.20 lukem echo "File is obsolete or flist is out of date ?" 154 1.22 lukem if ${allowextra}; then 155 1.30 apb echo "This is non-fatal, due to '-e' option." 156 1.22 lukem else 157 1.22 lukem es=1 158 1.22 lukem fi 159 1.20 lukem echo "------------------------------------------" 160 1.29 apb cat "${SDIR}/extra" 161 1.25 lukem echo "========= end of ${count} extra files ===========" 162 1.20 lukem echo "" 163 1.20 lukem fi 164 1.20 lukem 165 1.29 apb if [ -s "${SDIR}/missing" ]; then 166 1.29 apb count="$(${AWK} 'END {print NR}' "${SDIR}/missing")" 167 1.20 lukem echo "" 168 1.30 apb echo "====== ${count} missing files in DESTDIR ========" 169 1.20 lukem echo "Files in flist but missing from DESTDIR." 170 1.20 lukem echo "File wasn't installed ?" 171 1.22 lukem if ${allowmissing}; then 172 1.30 apb echo "This is non-fatal, due to '-m' option." 173 1.22 lukem else 174 1.22 lukem es=1 175 1.22 lukem fi 176 1.20 lukem echo "------------------------------------------" 177 1.29 apb cat "${SDIR}/missing" 178 1.25 lukem echo "======== end of ${count} missing files ==========" 179 1.20 lukem echo "" 180 1.15 lukem fi 181 1.20 lukem 182 1.29 apb exit 0 # cleanup will exit with ${es} 183