maketars revision 1.72
11.2Sgwr#!/bin/sh 21.2Sgwr# 31.72Scegger# $NetBSD: maketars,v 1.72 2009/12/05 15:56:25 cegger 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.62Sjmmv# The default sets are "base comp etc games man misc tests text" 101.50Slukem# The X sets are "xbase xcomp xetc xfont xserver" 111.70Suebayasi# The extsrc sets are "extbase extcomp extetc" 121.35Slukem# 131.35Slukem# If '-i installdir' is given, copy the given sets to installdir 141.35Slukem# (using pax -rw ...) instead of creating tar files. 151.70Suebayasi# In this case, remove "etc", "xetc", and "extetc" from the list of default sets. 161.2Sgwr# 171.2Sgwr 181.58Sapbprog="${0##*/}" 191.56Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 201.56Sapb. "${rundir}/sets.subr" 211.41Slukem 221.2Sgwr# set defaults 231.72Sceggerlists= 241.58Sapbtars="${RELEASEDIR}" 251.58Sapbdest="${DESTDIR}" 261.18Slukemmetalog= 271.28Slukeminstalldir= 281.30Slukemetcdir= 291.50Slukemsetfilesonly=false 301.64Slukemquiet=false 311.2Sgwr 321.47Slukemusage() 331.47Slukem{ 341.47Slukem cat 1>&2 <<USAGE 351.70SuebayasiUsage: ${prog} [-L base,x,ext] [-b] [-x] [-y] [-i idir] [-a arch] [-m machine] [-s setsdir] [-S] 361.36Slukem [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...] 371.70Suebayasi -L base,x,ext Make specified lists 381.50Slukem -b Make both netbsd and x11 lists 391.50Slukem -x Only make x11 lists 401.50Slukem [Default: make netbsd lists] 411.70Suebayasi -y Only make extsrc lists 421.70Suebayasi [Default: make netbsd lists] 431.50Slukem -i idir Install sets to idir instead of creating tar files 441.58Sapb -a arch Set arch (e.g, m68k, mipseb, mipsel, powerpc) [${MACHINE_ARCH}] 451.58Sapb -m machine Set machine (e.g, amiga, i386, macppc) [${MACHINE}] 461.64Slukem -q Quiet operation 471.58Sapb -s setsdir Directory to find sets [${setsdir}] 481.58Sapb -S Exit after creating set files ${dest}/etc/mtree/set.* 491.18Slukem -M metalog metalog file 501.58Sapb -N etcdir etc dir for metalog use [${dest}/etc] 511.58Sapb -d dest \${DESTDIR} [${dest}] 521.58Sapb -t targetdir \${RELEASEDIR} [${tars}] 531.58Sapb [setname ...] Sets to build [${lists}] 541.9SlukemUSAGE 551.47Slukem exit 1 561.47Slukem} 571.47Slukem 581.64Slukemmsg() 591.64Slukem{ 601.64Slukem $quiet || echo $* 611.64Slukem} 621.64Slukem 631.47Slukem# handle args 641.70Suebayasiwhile getopts L:bxyi:a:m:qs:SM:N:d:t: ch; do 651.47Slukem case ${ch} in 661.70Suebayasi L) 671.72Scegger save_IFS="${IFS}" 681.72Scegger IFS=, 691.72Scegger for _list in ${OPTARG}; do 701.72Scegger case $_list in 711.72Scegger base) lists="${lists} ${nlists}" ;; 721.72Scegger x) lists="${lists} ${xlists}" ;; 731.72Scegger ext) lists="${lists} ${extlists}" ;; 741.72Scegger esac 751.72Scegger done 761.72Scegger IFS="${save_IFS}" 771.70Suebayasi ;; 781.70Suebayasi # backward compat 791.47Slukem b) 801.58Sapb lists="${nlists} ${xlists}" 811.47Slukem ;; 821.47Slukem x) 831.58Sapb lists="${xlists}" 841.47Slukem ;; 851.70Suebayasi y) 861.70Suebayasi lists="${extlists}" 871.70Suebayasi ;; 881.47Slukem i) 891.58Sapb installdir="${OPTARG}" 901.47Slukem ;; 911.47Slukem a) 921.58Sapb MACHINE_ARCH="${OPTARG}" 931.58Sapb MACHINE_CPU="$(arch_to_cpu "${OPTARG}")" 941.47Slukem ;; 951.47Slukem m) 961.58Sapb MACHINE="${OPTARG}" 971.47Slukem ;; 981.64Slukem q) 991.64Slukem quiet=true 1001.64Slukem ;; 1011.47Slukem s) 1021.58Sapb setsdir="${OPTARG}" 1031.47Slukem ;; 1041.50Slukem S) 1051.50Slukem setfilesonly=true 1061.50Slukem ;; 1071.47Slukem M) 1081.58Sapb metalog="${OPTARG}" 1091.47Slukem ;; 1101.47Slukem N) 1111.58Sapb etcdir="${OPTARG}" 1121.47Slukem ;; 1131.47Slukem d) 1141.58Sapb dest="${OPTARG}" 1151.47Slukem ;; 1161.47Slukem t) 1171.58Sapb tars="${OPTARG}" 1181.9Slukem ;; 1191.9Slukem *) 1201.47Slukem usage 1211.9Slukem ;; 1221.2Sgwr esac 1231.2Sgwrdone 1241.47Slukemshift $((${OPTIND} - 1)) 1251.70Suebayasiif [ -n "${installdir}" ]; then # if -i, remove etc + xetc + extetc from the default list 1261.70Suebayasi lists="$(echo ${lists} | ${SED} -e 's/ etc / /;s/ xetc / /;s/ extetc / /')" 1271.28Slukemfi 1281.10Srossif [ -n "$*" ]; then 1291.10Sross lists="$*" 1301.9Slukemfi 1311.1Scgd 1321.58Sapbif [ -z "${tars}" -a -z "${installdir}" ]; then 1331.60Sapb echo >&2 "${prog}: \${RELEASEDIR} must be set, or -i must be used" 1341.1Scgd exit 1 1351.9Slukemfi 1361.1Scgd 1371.58Sapbif [ -z "${dest}" ]; then 1381.60Sapb echo >&2 "${prog}: \${DESTDIR} must be set" 1391.1Scgd exit 1 1401.9Slukemfi 1411.58Sapb: ${etcdir:="${dest}/etc"} 1421.1Scgd 1431.58SapbSDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")" 1441.63SlukemTMPFILES= 1451.20Sbjh21 1461.58Sapbsetlistdir="${dest}/etc/mtree" 1471.50Slukem 1481.38Serhcleanup() 1491.38Serh{ 1501.44Sdsl es=$? 1511.63Slukem /bin/rm -rf "${SDIR}" ${TMPFILES} 1521.63Slukem trap - 0 1531.58Sapb exit ${es} 1541.38Serh} 1551.38Serhtrap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 1561.18Slukem 1571.50Slukem# 1581.50Slukem# build the setfiles 1591.50Slukem# 1601.50Slukem 1611.58Sapbfor setname in ${lists}; do 1621.58Sapb ${HOST_SH} "${setsdir}/makeflist" -a "${MACHINE_ARCH}" -m "${MACHINE}" \ 1631.69Sapb -s "${setsdir}" "${setname}" > "${SDIR}/flist.${setname}" \ 1641.69Sapb || exit 1 1651.71Sapb if ! [ -s "${SDIR}/flist.${setname}" ]; then 1661.71Sapb echo >&2 "makeflist output is empty for ${setname}" 1671.71Sapb exit 1 1681.71Sapb fi 1691.58Sapb if [ -n "${metalog}" ]; then 1701.64Slukem ${setfilesonly} && msg "Creating ${setlistdir}/set.${setname}" 1711.58Sapb ${AWK} -f "${rundir}/getdirs.awk" "${SDIR}/flist.${setname}" \ 1721.69Sapb > "${SDIR}/flist.${setname}.full" \ 1731.69Sapb || exit 1 1741.23Slukem ( 1751.23Slukem echo "/set uname=root gname=wheel" 1761.58Sapb ${AWK} -f "${rundir}/join.awk" \ 1771.68Sapb "${SDIR}/flist.${setname}.full" "${metalog}" 1781.50Slukem echo "./etc/mtree/set.${setname} type=file mode=0444" 1791.68Sapb ) | ${MTREE} -CS -k all -R time -N "${etcdir}" \ 1801.69Sapb > "${setlistdir}/set.${setname}" \ 1811.69Sapb || exit 1 1821.59Sapb # We deliberately do not add set.${setname} to ${metalog}, 1831.59Sapb # because we depend on it as an input. 1841.58Sapb elif ! cmp -s "${SDIR}/flist.${setname}" \ 1851.58Sapb "${setlistdir}/set.${setname}" >/dev/null 2>&1; then 1861.58Sapb rm -f "${setlistdir}/set.${setname}" 1871.69Sapb cp "${SDIR}/flist.${setname}" "${setlistdir}/set.${setname}" \ 1881.69Sapb || exit 1 1891.18Slukem fi 1901.50Slukemdone 1911.58Sapbif ${setfilesonly}; then # exit after creating the set lists 1921.50Slukem exit 0 1931.50Slukemfi 1941.18Slukem 1951.50Slukem# 1961.50Slukem# now build the tarfiles 1971.50Slukem# 1981.50Slukem 1991.67SperryGZIP=-9n # for pax -z 2001.50Slukemexport GZIP 2011.50Slukemes=0 2021.72Sceggerfor setname in ${lists:-${nlists}}; do 2031.58Sapb out="${setname}.tgz" 2041.58Sapb if [ -n "${installdir}" ]; then 2051.64Slukem msg "Copying set ${setname}" 2061.61Sapb ( cd "${dest}"; \ 2071.58Sapb ${PAX} -O -rwpe -d -N"${etcdir}" ${metalog:+-M} \ 2081.58Sapb "${installdir}" < "${setlistdir}/set.${setname}" ) 2091.28Slukem else 2101.58Sapb if [ -n "${metalog}" -a "${tars}/${out}" -nt "${metalog}" ] 2111.58Sapb then 2121.64Slukem msg "${out} is up to date" 2131.50Slukem continue 2141.50Slukem fi 2151.64Slukem msg "Creating ${out}" 2161.58Sapb rm -f "${tars}/${out}" 2171.63Slukem TMPFILES="${TMPFILES} ${tars}/${out}.tmp" 2181.61Sapb ( cd "${dest}"; \ 2191.58Sapb ${PAX} -O -w -d -z -N"${etcdir}" ${metalog:+-M} \ 2201.58Sapb < "${setlistdir}/set.${setname}" ) \ 2211.58Sapb > "${tars}/${out}.tmp" && 2221.58Sapb mv "${tars}/${out}.tmp" "${tars}/${out}" 2231.28Slukem fi 2241.58Sapb es=$((${es} + $?)) 2251.2Sgwrdone 2261.61Sapbif [ ${es} -gt 255 ]; then 2271.38Serh es=255 2281.38Serhfi 2291.58Sapbexit ${es} 230