Home | History | Annotate | Line # | Download | only in sets
maketars revision 1.20
      1 #!/bin/sh
      2 #
      3 # $NetBSD: maketars,v 1.20 2002/04/01 15:50:30 bjh21 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 : ${MAKE=make}
     12 : ${PAX=pax}
     13 : ${MTREE=mtree}
     14 
     15 machine=`${MAKE} print_machine`
     16 machine_arch=`${MAKE} print_machine_arch`
     17 setd=`pwd`
     18 nlists="base comp etc games man misc text"
     19 xlists="xbase xcomp xcontrib xfont xserver xmisc"
     20 lists=$nlists
     21 tars=$RELEASEDIR
     22 dest=$DESTDIR
     23 metalog=
     24 
     25 # handle args
     26 while : ; 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
     54 Usage: $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]
     65 USAGE
     66 		exit 1
     67 		;;
     68 	*)
     69 		break
     70 		;;
     71 	esac
     72 	shift
     73 done
     74 if [ -n "$*" ]; then
     75 	lists="$*"
     76 fi
     77 
     78 if [ -z "$tars" ]; then
     79 	echo \$RELEASEDIR must be set
     80 	exit 1
     81 fi
     82 
     83 if [ -z "$dest" ]; then
     84 	echo \$DESTDIR must be set
     85 	exit 1
     86 fi
     87 
     88 # Make sure we don't loop forever if mkdir will always fail.
     89 
     90 if [ ! -d /tmp ]; then
     91 	echo /tmp is not a directory
     92 	exit 1
     93 fi
     94 
     95 if [ ! -w /tmp ]; then
     96 	echo /tmp is not writeable
     97 	exit 1
     98 fi
     99 
    100 SDIR_BASE=/tmp/maketar.$$
    101 SDIR_SERIAL=0
    102 
    103 while true; do
    104     SDIR=${SDIR_BASE}.${SDIR_SERIAL}
    105     mkdir -m 0700 ${SDIR} && break
    106     SDIR_SERIAL=`expr ${SDIR_SERIAL} + 1`
    107 done    
    108 
    109 trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13		# EXIT INT QUIT PIPE
    110 
    111 if [ -n "$metalog" ]; then
    112 	echo "parsing $metalog"
    113 	${MTREE} -D -k all -N ${DESTDIR}/etc \
    114 	    -f ${DESTDIR}/etc/mtree/NetBSD.dist | \
    115 	    sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metadirs
    116 	sed -e "s,^\.$dest,.," < $metalog > $SDIR/metafiles
    117 	cat $SDIR/metadirs $SDIR/metafiles | sort -u > $SDIR/metalog
    118 fi
    119 
    120 GZIP=-9			# for pax -z
    121 export GZIP
    122 
    123 es=0
    124 for setname in $lists; do
    125 	out=$setname.tgz
    126 	echo "making $out"
    127 	sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
    128 	    > $SDIR/flist.$setname
    129 	if [ -n "$metalog" ]; then
    130 		awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
    131 		    > $SDIR/flist.full
    132 		echo "/set uname=root gname=wheel" > $SDIR/plist.$setname
    133 		join $SDIR/flist.full $SDIR/metalog >> $SDIR/plist.$setname
    134 	else
    135 		mv $SDIR/flist.$setname $SDIR/plist.$setname
    136 	fi
    137 
    138 	( cd $dest ; \
    139 	    ${PAX} -w -d -z ${metalog:+-N$dest/etc} ${metalog:+-M} \
    140 	    < ${SDIR}/plist.$setname ) > ${tars}/$out
    141 	es=$(($es + $?))
    142 done
    143 exit $es
    144