maketars revision 1.34
1#!/bin/sh 2# 3# $NetBSD: maketars,v 1.34 2002/12/25 23:44:06 lukem Exp $ 4# 5# Make release tar files for some or all lists. Usage: 6# maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir] 7# [-M metalog] [-N etcdir] [-d destdir] [-t tardir] [setname ...] 8# 9 10# set defaults 11: ${PAX=pax} 12: ${MTREE=mtree} 13make="${MAKE:-make} -j 1 -f `dirname $0`/Makefile" 14 15machine=`${make} print_machine` 16machine_arch=`${make} print_machine_arch` 17setd=`pwd` 18nlists="base comp etc games man misc text" 19xlists="xbase xcomp xcontrib xfont xserver xmisc" 20lists=$nlists 21tars=$RELEASEDIR 22dest=$DESTDIR 23metalog= 24installdir= 25etcdir= 26 27# handle args 28while : ; do 29 case $1 in 30 -b*) 31 lists="$xlists $nlists" 32 ;; 33 -x*) 34 lists=$xlists 35 ;; 36 -i*) 37 installdir=$2; shift 38 ;; 39 -a*) 40 machine_arch=$2; shift 41 ;; 42 -M*) 43 metalog=$2; shift 44 ;; 45 -m*) 46 machine=$2; shift 47 ;; 48 -N*) 49 etcdir=$2; shift 50 ;; 51 -s*) 52 setd=$2; shift 53 ;; 54 -d*) 55 dest=$2; shift 56 ;; 57 -t*) 58 tars=$2; shift 59 ;; 60 -*) 61 cat 1>&2 <<USAGE 62Usage: $0 [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir] 63 [-M metalog] [-N etcdir] [-d dest] [-t tars] [setname ...] 64 -b make netbsd + x11 lists 65 -x only make x11 lists 66 -i idir install sets to idir instead of creating tar files 67 -a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch] 68 -m machine set machine (e.g, amiga, i386, macppc) [$machine] 69 -s setsdir directory to find sets [$setd] 70 -M metalog metalog file 71 -N etcdir etc dir for metalog use [$dest/etc] 72 -d dest \$DESTDIR [$dest] 73 -t tars \$RELEASEDIR [$tars] 74 [setname ...] sets to build [$lists] 75USAGE 76 exit 1 77 ;; 78 *) 79 break 80 ;; 81 esac 82 shift 83done 84if [ -n "$installdir" ]; then # if -i, remove etc from default list 85 lists=$(echo $lists | sed -e 's/ etc / /') 86fi 87if [ -n "$*" ]; then 88 lists="$*" 89fi 90 91if [ -z "$tars" -a -z "$installdir" ]; then 92 echo \$RELEASEDIR must be set, or -i must be used 93 exit 1 94fi 95 96if [ -z "$dest" ]; then 97 echo \$DESTDIR must be set 98 exit 1 99fi 100: ${etcdir:=${dest}/etc} 101 102# Make sure we don't loop forever if mkdir will always fail. 103 104if [ ! -d /tmp ]; then 105 echo /tmp is not a directory 106 exit 1 107fi 108 109if [ ! -w /tmp ]; then 110 echo /tmp is not writeable 111 exit 1 112fi 113 114SDIR_BASE=/tmp/maketar.$$ 115SDIR_SERIAL=0 116 117while true; do 118 SDIR=${SDIR_BASE}.${SDIR_SERIAL} 119 mkdir -m 0700 ${SDIR} && break 120 SDIR_SERIAL=$((${SDIR_SERIAL} + 1)) 121done 122 123trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13 # EXIT INT QUIT PIPE 124 125if [ -n "$metalog" ]; then 126 echo "Parsing $metalog" 127 ( 128 cat ${etcdir}/mtree/NetBSD.dist 129 echo "/unset all" 130 cat $metalog 131 ) | ${MTREE} -C -k all -N ${etcdir} > $SDIR/metalog 132fi 133 134GZIP=-9 # for pax -z 135export GZIP 136 137es=0 138for setname in $lists; do 139 out=$setname.tgz 140 if [ -n "$installdir" ]; then 141 echo "Copying set $setname" 142 else 143 echo "Creating $out" 144 fi 145 sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \ 146 > $SDIR/flist.$setname 147 if [ -n "$metalog" ]; then 148 awk -f getdirs.awk $SDIR/flist.$setname | sort -u \ 149 > $SDIR/flist.$setname.full 150 ( 151 echo "/set uname=root gname=wheel" 152 awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog 153 ) > $SDIR/plist.$setname 154 else 155 mv $SDIR/flist.$setname $SDIR/plist.$setname 156 fi 157 158 if [ -n "$installdir" ]; then 159 ( cd $dest ; \ 160 ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \ 161 $installdir < ${SDIR}/plist.$setname ) 162 else 163 ( cd $dest ; \ 164 ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \ 165 < ${SDIR}/plist.$setname ) > ${tars}/$out 166 fi 167 es=$(($es + $?)) 168done 169exit $es 170