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