maketars revision 1.44
11.2Sgwr#!/bin/sh 21.2Sgwr# 31.44Sdsl# $NetBSD: maketars,v 1.44 2003/10/16 14:20:20 dsl 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.35Slukem# 111.35Slukem# If '-i installdir' is given, copy the given sets to installdir 121.35Slukem# (using pax -rw ...) instead of creating tar files. 131.35Slukem# In this case, remove "etc" from the list of default sets. 141.2Sgwr# 151.2Sgwr 161.43Slukemprog=${0##*/} 171.41Slukem 181.2Sgwr# set defaults 191.18Slukem: ${PAX=pax} 201.43Slukem: ${MKTEMP=mktemp} 211.18Slukem: ${MTREE=mtree} 221.43Slukemmake="${MAKE:-make} -j 1 -f $(dirname $0)/Makefile" 231.18Slukem 241.43Slukemmachine=$(${make} print_machine) 251.43Slukemmachine_arch=$(${make} print_machine_arch) 261.43Slukemsetd=$(pwd) 271.9Slukemnlists="base comp etc games man misc text" 281.22Stronxlists="xbase xcomp xcontrib xfont xserver xmisc" 291.9Slukemlists=$nlists 301.2Sgwrtars=$RELEASEDIR 311.2Sgwrdest=$DESTDIR 321.18Slukemmetalog= 331.28Slukeminstalldir= 341.30Slukemetcdir= 351.2Sgwr 361.2Sgwr# handle args 371.9Slukemwhile : ; do 381.2Sgwr case $1 in 391.9Slukem -b*) 401.9Slukem lists="$xlists $nlists" 411.9Slukem ;; 421.18Slukem -x*) 431.9Slukem lists=$xlists 441.9Slukem ;; 451.28Slukem -i*) 461.28Slukem installdir=$2; shift 471.28Slukem ;; 481.9Slukem -a*) 491.16Sthorpej machine_arch=$2; shift 501.9Slukem ;; 511.18Slukem -M*) 521.18Slukem metalog=$2; shift 531.18Slukem ;; 541.9Slukem -m*) 551.9Slukem machine=$2; shift 561.9Slukem ;; 571.30Slukem -N*) 581.30Slukem etcdir=$2; shift 591.30Slukem ;; 601.9Slukem -s*) 611.9Slukem setd=$2; shift 621.9Slukem ;; 631.9Slukem -d*) 641.9Slukem dest=$2; shift 651.9Slukem ;; 661.18Slukem -t*) 671.9Slukem tars=$2; shift 681.9Slukem ;; 691.9Slukem -*) 701.9Slukem cat 1>&2 <<USAGE 711.41SlukemUsage: ${prog} [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir] 721.36Slukem [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...] 731.9Slukem -b make netbsd + x11 lists 741.9Slukem -x only make x11 lists 751.30Slukem -i idir install sets to idir instead of creating tar files 761.16Sthorpej -a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch] 771.16Sthorpej -m machine set machine (e.g, amiga, i386, macppc) [$machine] 781.16Sthorpej -s setsdir directory to find sets [$setd] 791.18Slukem -M metalog metalog file 801.30Slukem -N etcdir etc dir for metalog use [$dest/etc] 811.9Slukem -d dest \$DESTDIR [$dest] 821.36Slukem -t targetdir \$RELEASEDIR [$tars] 831.9Slukem [setname ...] sets to build [$lists] 841.9SlukemUSAGE 851.9Slukem exit 1 861.9Slukem ;; 871.9Slukem *) 881.9Slukem break 891.9Slukem ;; 901.2Sgwr esac 911.2Sgwr shift 921.2Sgwrdone 931.28Slukemif [ -n "$installdir" ]; then # if -i, remove etc from default list 941.28Slukem lists=$(echo $lists | sed -e 's/ etc / /') 951.28Slukemfi 961.10Srossif [ -n "$*" ]; then 971.10Sross lists="$*" 981.9Slukemfi 991.1Scgd 1001.28Slukemif [ -z "$tars" -a -z "$installdir" ]; then 1011.28Slukem echo \$RELEASEDIR must be set, or -i must be used 1021.1Scgd exit 1 1031.9Slukemfi 1041.1Scgd 1051.9Slukemif [ -z "$dest" ]; then 1061.9Slukem echo \$DESTDIR must be set 1071.1Scgd exit 1 1081.9Slukemfi 1091.30Slukem: ${etcdir:=${dest}/etc} 1101.1Scgd 1111.43SlukemSDIR=$(${MKTEMP} -d /tmp/${prog}.XXXXXX) 1121.20Sbjh21 1131.38Serhes=0 1141.38Serhcleanup() 1151.38Serh{ 1161.44Sdsl es=$? 1171.38Serh /bin/rm -rf $SDIR 1181.38Serh exit $es 1191.38Serh} 1201.38Serhtrap cleanup 0 2 3 13 # EXIT INT QUIT PIPE 1211.18Slukem 1221.18Slukemif [ -n "$metalog" ]; then 1231.28Slukem echo "Parsing $metalog" 1241.23Slukem ( 1251.30Slukem cat ${etcdir}/mtree/NetBSD.dist 1261.23Slukem echo "/unset all" 1271.44Sdsl cat $metalog 2>/dev/null 1281.33Slukem ) | ${MTREE} -C -k all -N ${etcdir} > $SDIR/metalog 1291.41Slukem rv=$? 1301.41Slukem if [ $rv -ne 0 ]; then 1311.41Slukem echo "${prog}: mtree failed, exiting" 1321.41Slukem exit $rv 1331.41Slukem fi 1341.18Slukemfi 1351.18Slukem 1361.18SlukemGZIP=-9 # for pax -z 1371.18Slukemexport GZIP 1381.18Slukem 1391.9Slukemfor setname in $lists; do 1401.12Sfrueauf out=$setname.tgz 1411.28Slukem if [ -n "$installdir" ]; then 1421.28Slukem echo "Copying set $setname" 1431.28Slukem else 1441.43Slukem if [ -n "$metalog" -a $tars/$out -nt "$metalog" ]; then 1451.42Sdsl echo "$out is up to date" 1461.42Sdsl continue 1471.43Slukem fi 1481.28Slukem echo "Creating $out" 1491.28Slukem fi 1501.18Slukem sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \ 1511.18Slukem > $SDIR/flist.$setname 1521.18Slukem if [ -n "$metalog" ]; then 1531.18Slukem awk -f getdirs.awk $SDIR/flist.$setname | sort -u \ 1541.24Slukem > $SDIR/flist.$setname.full 1551.23Slukem ( 1561.23Slukem echo "/set uname=root gname=wheel" 1571.24Slukem awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog 1581.23Slukem ) > $SDIR/plist.$setname 1591.18Slukem else 1601.18Slukem mv $SDIR/flist.$setname $SDIR/plist.$setname 1611.18Slukem fi 1621.18Slukem 1631.28Slukem if [ -n "$installdir" ]; then 1641.28Slukem ( cd $dest ; \ 1651.40Sperry ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \ 1661.28Slukem $installdir < ${SDIR}/plist.$setname ) 1671.28Slukem else 1681.28Slukem ( cd $dest ; \ 1691.32Slukem ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \ 1701.28Slukem < ${SDIR}/plist.$setname ) > ${tars}/$out 1711.28Slukem fi 1721.18Slukem es=$(($es + $?)) 1731.2Sgwrdone 1741.38Serhif [ $es -gt 255 ] ; then 1751.38Serh es=255 1761.38Serhfi 1771.17Sheexit $es 178