1#!/bin/sh 2# 3# $NetBSD: maketars,v 1.27 2002/11/26 06:22:23 lukem Exp $ 4# 5# Make release tar files for some or all lists. Usage: 6# maketars [-b] [-x] [-a arch] [-m machine] [-s setsdir] 7# [-M metalog] [-d destdir] [-t tardir] [setname ...] 8# 9 10# set defaults 11: ${PAX=pax} 12: ${MTREE=mtree} 13make="${MAKE:-make} -j 1 -f `dirname $0`/Makefile" 14 15machine=`${make} print_machine` 16machine_arch=`${make} print_machine_arch` 17setd=`pwd` 18nlists="base comp etc games man misc text" 19xlists="xbase xcomp xcontrib xfont xserver xmisc" 20lists=$nlists 21tars=$RELEASEDIR 22dest=$DESTDIR 23metalog= 24 25# handle args 26while : ; do 27 case $1 in 28 -b*) 29 lists="$xlists $nlists" 30 ;; 31 -x*) 32 lists=$xlists 33 ;; 34 -a*) 35 machine_arch=$2; shift 36 ;; 37 -M*) 38 metalog=$2; shift 39 ;; 40 -m*) 41 machine=$2; shift 42 ;; 43 -s*) 44 setd=$2; shift 45 ;; 46 -d*) 47 dest=$2; shift 48 ;; 49 -t*) 50 tars=$2; shift 51 ;; 52 -*) 53 cat 1>&2 <<USAGE 54Usage: $0 [-b] [-x] [-a arch] [-m machine] [-s setsdir] [-M metalog] 55 [-d dest] [-t tars] [setname ...] 56 -b make netbsd + x11 lists 57 -x only make x11 lists 58 -a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch] 59 -m machine set machine (e.g, amiga, i386, macppc) [$machine] 60 -s setsdir directory to find sets [$setd] 61 -M metalog metalog file 62 -d dest \$DESTDIR [$dest] 63 -t tars \$RELEASEDIR [$tars] 64 [setname ...] sets to build [$lists] 65USAGE 66 exit 1 67 ;; 68 *) 69 break 70 ;; 71 esac 72 shift 73done 74if [ -n "$*" ]; then 75 lists="$*" 76fi 77 78if [ -z "$tars" ]; then 79 echo \$RELEASEDIR must be set 80 exit 1 81fi 82 83if [ -z "$dest" ]; then 84 echo \$DESTDIR must be set 85 exit 1 86fi 87 88# Make sure we don't loop forever if mkdir will always fail. 89 90if [ ! -d /tmp ]; then 91 echo /tmp is not a directory 92 exit 1 93fi 94 95if [ ! -w /tmp ]; then 96 echo /tmp is not writeable 97 exit 1 98fi 99 100SDIR_BASE=/tmp/maketar.$$ 101SDIR_SERIAL=0 102 103while true; do 104 SDIR=${SDIR_BASE}.${SDIR_SERIAL} 105 mkdir -m 0700 ${SDIR} && break 106 SDIR_SERIAL=$((${SDIR_SERIAL} + 1)) 107done 108 109trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13 # EXIT INT QUIT PIPE 110 111if [ -n "$metalog" ]; then 112 echo "parsing $metalog" 113 ( 114 cat ${DESTDIR}/etc/mtree/NetBSD.dist 115 echo "/unset all" 116 sed -e "s,^\.$dest,.," < $metalog 117 ) | ${MTREE} -D -k all -N ${DESTDIR}/etc | \ 118 sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metalog 119fi 120 121GZIP=-9 # for pax -z 122export GZIP 123 124es=0 125for setname in $lists; do 126 out=$setname.tgz 127 echo "making $out" 128 sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \ 129 > $SDIR/flist.$setname 130 if [ -n "$metalog" ]; then 131 awk -f getdirs.awk $SDIR/flist.$setname | sort -u \ 132 > $SDIR/flist.$setname.full 133 ( 134 echo "/set uname=root gname=wheel" 135 awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog 136 ) > $SDIR/plist.$setname 137 else 138 mv $SDIR/flist.$setname $SDIR/plist.$setname 139 fi 140 141 ( cd $dest ; \ 142 ${PAX} -w -d -z ${metalog:+-N$dest/etc} ${metalog:+-M} \ 143 < ${SDIR}/plist.$setname ) > ${tars}/$out 144 es=$(($es + $?)) 145done 146exit $es 147