maketars revision 1.59
11.2Sgwr#!/bin/sh 21.2Sgwr# 31.59Sapb# $NetBSD: maketars,v 1.59 2006/01/04 15:03:39 apb Exp $ 41.2Sgwr# 51.2Sgwr# Make release tar files for some or all lists. Usage: 61.34Slukem# maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir] 71.34Slukem# [-M metalog] [-N etcdir] [-d destdir] [-t tardir] [setname ...] 81.35Slukem# 91.35Slukem# The default sets are "base comp etc games man misc text" 101.50Slukem# The X sets are "xbase xcomp xetc xfont xserver" 111.35Slukem# 121.35Slukem# If '-i installdir' is given, copy the given sets to installdir 131.35Slukem# (using pax -rw ...) instead of creating tar files. 141.49Slukem# In this case, remove "etc" and "xetc" from the list of default sets. 151.2Sgwr# 161.2Sgwr 171.58Sapbprog="${0##*/}" 181.56Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 191.56Sapb. "${rundir}/sets.subr" 201.41Slukem 211.2Sgwr# set defaults 221.58Sapblists="${nlists}" 231.58Sapbtars="${RELEASEDIR}" 241.58Sapbdest="${DESTDIR}" 251.18Slukemmetalog= 261.28Slukeminstalldir= 271.30Slukemetcdir= 281.50Slukemsetfilesonly=false 291.2Sgwr 301.47Slukemusage() 311.47Slukem{ 321.47Slukem cat 1>&2 <<USAGE 331.50SlukemUsage: ${prog} [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir] [-S] 341.36Slukem [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...] 351.50Slukem -b Make both netbsd and x11 lists 361.50Slukem -x Only make x11 lists 371.50Slukem [Default: make netbsd lists] 381.50Slukem -i idir Install sets to idir instead of creating tar files 391.58Sapb -a arch Set arch (e.g, m68k, mipseb, mipsel, powerpc) [${MACHINE_ARCH}] 401.58Sapb -m machine Set machine (e.g, amiga, i386, macppc) [${MACHINE}] 411.58Sapb -s setsdir Directory to find sets [${setsdir}] 421.58Sapb -S Exit after creating set files ${dest}/etc/mtree/set.* 431.18Slukem -M metalog metalog file 441.58Sapb -N etcdir etc dir for metalog use [${dest}/etc] 451.58Sapb -d dest \${DESTDIR} [${dest}] 461.58Sapb -t targetdir \${RELEASEDIR} [${tars}] 471.58Sapb [setname ...] Sets to build [${lists}] 481.9SlukemUSAGE 491.47Slukem exit 1 501.47Slukem} 511.47Slukem 521.47Slukem# handle args 531.50Slukemwhile getopts bxi:a:m:s:SM:N:d:t: ch; do 541.47Slukem case ${ch} in 551.47Slukem b) 561.58Sapb lists="${nlists} ${xlists}" 571.47Slukem ;; 581.47Slukem x) 591.58Sapb lists="${xlists}" 601.47Slukem ;; 611.47Slukem i) 621.58Sapb installdir="${OPTARG}" 631.47Slukem ;; 641.47Slukem a) 651.58Sapb MACHINE_ARCH="${OPTARG}" 661.58Sapb MACHINE_CPU="$(arch_to_cpu "${OPTARG}")" 671.47Slukem ;; 681.47Slukem m) 691.58Sapb MACHINE="${OPTARG}" 701.47Slukem ;; 711.47Slukem s) 721.58Sapb setsdir="${OPTARG}" 731.47Slukem ;; 741.50Slukem S) 751.50Slukem setfilesonly=true 761.50Slukem ;; 771.47Slukem M) 781.58Sapb metalog="${OPTARG}" 791.47Slukem ;; 801.47Slukem N) 811.58Sapb etcdir="${OPTARG}" 821.47Slukem ;; 831.47Slukem d) 841.58Sapb dest="${OPTARG}" 851.47Slukem ;; 861.47Slukem t) 871.58Sapb tars="${OPTARG}" 881.9Slukem ;; 891.9Slukem *) 901.47Slukem usage 911.9Slukem ;; 921.2Sgwr esac 931.2Sgwrdone 941.47Slukemshift $((${OPTIND} - 1)) 951.58Sapbif [ -n "${installdir}" ]; then # if -i, remove etc & xetc from the default list 961.58Sapb lists="$(echo ${lists} | ${SED} -e 's/ etc / /;s/ xetc / /')" 971.28Slukemfi 981.10Srossif [ -n "$*" ]; then 991.10Sross lists="$*" 1001.9Slukemfi 1011.1Scgd 1021.58Sapbif [ -z "${tars}" -a -z "${installdir}" ]; then 1031.58Sapb echo 1>&2 \${RELEASEDIR} must be set, or -i must be used 1041.1Scgd exit 1 1051.9Slukemfi 1061.1Scgd 1071.58Sapbif [ -z "${dest}" ]; then 1081.58Sapb echo 1>&2 \${DESTDIR} must be set 1091.1Scgd exit 1 1101.9Slukemfi 1111.58Sapb: ${etcdir:="${dest}/etc"} 1121.1Scgd 1131.58SapbSDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")" 1141.20Sbjh21 1151.58Sapbsetlistdir="${dest}/etc/mtree" 1161.50Slukem 1171.38Serhcleanup() 1181.38Serh{ 1191.44Sdsl es=$? 1201.58Sapb /bin/rm -rf "${SDIR}" 1211.58Sapb exit ${es} 1221.38Serh} 1231.38Serhtrap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 1241.18Slukem 1251.50Slukem# 1261.50Slukem# build the setfiles 1271.50Slukem# 1281.50Slukem 1291.58Sapbfor setname in ${lists}; do 1301.58Sapb ${HOST_SH} "${setsdir}/makeflist" -a "${MACHINE_ARCH}" -m "${MACHINE}" \ 1311.58Sapb -s "${setsdir}" "${setname}" > "${SDIR}/flist.${setname}" 1321.58Sapb if [ -n "${metalog}" ]; then 1331.58Sapb ${setfilesonly} && echo "Creating ${setlistdir}/set.${setname}" 1341.58Sapb ${AWK} -f "${rundir}/getdirs.awk" "${SDIR}/flist.${setname}" \ 1351.58Sapb | ${SORT} -u > "${SDIR}/flist.${setname}.full" 1361.23Slukem ( 1371.23Slukem echo "/set uname=root gname=wheel" 1381.58Sapb ${AWK} -f "${rundir}/join.awk" \ 1391.59Sapb "${SDIR}/flist.${setname}.full" "${metalog}" 1401.50Slukem echo "./etc/mtree/set.${setname} type=file mode=0444" 1411.58Sapb ) > "${setlistdir}/set.${setname}" 1421.59Sapb # We deliberately do not add set.${setname} to ${metalog}, 1431.59Sapb # because we depend on it as an input. 1441.58Sapb elif ! cmp -s "${SDIR}/flist.${setname}" \ 1451.58Sapb "${setlistdir}/set.${setname}" >/dev/null 2>&1; then 1461.58Sapb rm -f "${setlistdir}/set.${setname}" 1471.58Sapb cp "${SDIR}/flist.${setname}" "${setlistdir}/set.${setname}" 1481.18Slukem fi 1491.50Slukemdone 1501.58Sapbif ${setfilesonly}; then # exit after creating the set lists 1511.50Slukem exit 0 1521.50Slukemfi 1531.18Slukem 1541.50Slukem# 1551.50Slukem# now build the tarfiles 1561.50Slukem# 1571.50Slukem 1581.50SlukemGZIP=-9 # for pax -z 1591.50Slukemexport GZIP 1601.50Slukemes=0 1611.58Sapbfor setname in ${lists}; do 1621.58Sapb out="${setname}.tgz" 1631.58Sapb if [ -n "${installdir}" ]; then 1641.58Sapb echo "Copying set ${setname}" 1651.58Sapb ( cd "${dest}" ; \ 1661.58Sapb ${PAX} -O -rwpe -d -N"${etcdir}" ${metalog:+-M} \ 1671.58Sapb "${installdir}" < "${setlistdir}/set.${setname}" ) 1681.28Slukem else 1691.58Sapb if [ -n "${metalog}" -a "${tars}/${out}" -nt "${metalog}" ] 1701.58Sapb then 1711.58Sapb echo "${out} is up to date" 1721.50Slukem continue 1731.50Slukem fi 1741.58Sapb echo "Creating ${out}" 1751.58Sapb rm -f "${tars}/${out}" 1761.58Sapb ( cd "${dest}" ; \ 1771.58Sapb ${PAX} -O -w -d -z -N"${etcdir}" ${metalog:+-M} \ 1781.58Sapb < "${setlistdir}/set.${setname}" ) \ 1791.58Sapb > "${tars}/${out}.tmp" && 1801.58Sapb mv "${tars}/${out}.tmp" "${tars}/${out}" 1811.28Slukem fi 1821.58Sapb es=$((${es} + $?)) 1831.2Sgwrdone 1841.58Sapbif [ ${es} -gt 255 ] ; then 1851.38Serh es=255 1861.38Serhfi 1871.58Sapbexit ${es} 188