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