Home | History | Annotate | Line # | Download | only in sets
maketars revision 1.26
      1 #!/bin/sh
      2 #
      3 # $NetBSD: maketars,v 1.26 2002/11/25 23:29:54 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}
     13 MAKE="${MAKE:-make} -j 1 -f `dirname $0`/Makefile"
     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=$((${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 	(
    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
    119 fi
    120 
    121 GZIP=-9			# for pax -z
    122 export GZIP
    123 
    124 es=0
    125 for 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 + $?))
    145 done
    146 exit $es
    147