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