maketars revision 1.44
1#!/bin/sh 2# 3# $NetBSD: maketars,v 1.44 2003/10/16 14:20:20 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=${0##*/} 17 18# set defaults 19: ${PAX=pax} 20: ${MKTEMP=mktemp} 21: ${MTREE=mtree} 22make="${MAKE:-make} -j 1 -f $(dirname $0)/Makefile" 23 24machine=$(${make} print_machine) 25machine_arch=$(${make} print_machine_arch) 26setd=$(pwd) 27nlists="base comp etc games man misc text" 28xlists="xbase xcomp xcontrib xfont xserver xmisc" 29lists=$nlists 30tars=$RELEASEDIR 31dest=$DESTDIR 32metalog= 33installdir= 34etcdir= 35 36# handle args 37while : ; do 38 case $1 in 39 -b*) 40 lists="$xlists $nlists" 41 ;; 42 -x*) 43 lists=$xlists 44 ;; 45 -i*) 46 installdir=$2; shift 47 ;; 48 -a*) 49 machine_arch=$2; shift 50 ;; 51 -M*) 52 metalog=$2; shift 53 ;; 54 -m*) 55 machine=$2; shift 56 ;; 57 -N*) 58 etcdir=$2; shift 59 ;; 60 -s*) 61 setd=$2; shift 62 ;; 63 -d*) 64 dest=$2; shift 65 ;; 66 -t*) 67 tars=$2; shift 68 ;; 69 -*) 70 cat 1>&2 <<USAGE 71Usage: ${prog} [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir] 72 [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...] 73 -b make netbsd + x11 lists 74 -x only make x11 lists 75 -i idir install sets to idir instead of creating tar files 76 -a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch] 77 -m machine set machine (e.g, amiga, i386, macppc) [$machine] 78 -s setsdir directory to find sets [$setd] 79 -M metalog metalog file 80 -N etcdir etc dir for metalog use [$dest/etc] 81 -d dest \$DESTDIR [$dest] 82 -t targetdir \$RELEASEDIR [$tars] 83 [setname ...] sets to build [$lists] 84USAGE 85 exit 1 86 ;; 87 *) 88 break 89 ;; 90 esac 91 shift 92done 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 sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \ 151 > $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