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