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