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