Home | History | Annotate | Line # | Download | only in sets
maketars revision 1.32
      1 #!/bin/sh
      2 #
      3 # $NetBSD: maketars,v 1.32 2002/12/21 15:54: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 etcdir=
     26 
     27 # handle args
     28 while : ; do
     29 	case $1 in
     30 	-b*)
     31 		lists="$xlists $nlists"
     32 		;;
     33 	-x*)
     34 		lists=$xlists
     35 		;;
     36 	-i*)
     37 		installdir=$2; shift
     38 		;;
     39 	-a*)
     40 		machine_arch=$2; shift
     41 		;;
     42 	-M*)
     43 		metalog=$2; shift
     44 		;;
     45 	-m*)
     46 		machine=$2; shift
     47 		;;
     48 	-N*)
     49 		etcdir=$2; shift
     50 		;;
     51 	-s*)
     52 		setd=$2; shift
     53 		;;
     54 	-d*)
     55 		dest=$2; shift
     56 		;;
     57 	-t*)
     58 		tars=$2; shift
     59 		;;
     60 	-*)
     61 		cat 1>&2 <<USAGE
     62 Usage: $0 [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir]
     63 	    [-M metalog] [-N etcdir] [-d dest] [-t tars] [setname ...]
     64 	-b		make netbsd + x11 lists
     65 	-x		only make x11 lists
     66 	-i idir		install sets to idir instead of creating tar files
     67 	-a arch		set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch]
     68 	-m machine	set machine (e.g, amiga, i386, macppc) [$machine]
     69 	-s setsdir	directory to find sets [$setd]
     70 	-M metalog	metalog file
     71 	-N etcdir	etc dir for metalog use [$dest/etc]
     72 	-d dest		\$DESTDIR	[$dest]
     73 	-t tars		\$RELEASEDIR	[$tars]
     74 	[setname ...]	sets to build 	[$lists]
     75 USAGE
     76 		exit 1
     77 		;;
     78 	*)
     79 		break
     80 		;;
     81 	esac
     82 	shift
     83 done
     84 if [ -n "$installdir" ]; then		# if -i, remove etc from default list
     85 	lists=$(echo $lists | sed -e 's/ etc / /')
     86 fi
     87 if [ -n "$*" ]; then
     88 	lists="$*"
     89 fi
     90 
     91 if [ -z "$tars" -a -z "$installdir" ]; then
     92 	echo \$RELEASEDIR must be set, or -i must be used
     93 	exit 1
     94 fi
     95 
     96 if [ -z "$dest" ]; then
     97 	echo \$DESTDIR must be set
     98 	exit 1
     99 fi
    100 : ${etcdir:=${dest}/etc}
    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=$((${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 	(
    128 		cat ${etcdir}/mtree/NetBSD.dist
    129 		echo "/unset all"
    130 		sed -e "s,^\.$dest,.," < $metalog
    131 	) | ${MTREE} -D -k all -N ${etcdir} | \
    132 	    sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metalog
    133 fi
    134 
    135 GZIP=-9			# for pax -z
    136 export GZIP
    137 
    138 es=0
    139 for setname in $lists; do
    140 	out=$setname.tgz
    141 	if [ -n "$installdir" ]; then
    142 		echo "Copying set $setname"
    143 	else
    144 		echo "Creating $out"
    145 	fi
    146 	sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
    147 	    > $SDIR/flist.$setname
    148 	if [ -n "$metalog" ]; then
    149 		awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
    150 		    > $SDIR/flist.$setname.full
    151 		(
    152 			echo "/set uname=root gname=wheel"
    153 			awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog
    154 		) > $SDIR/plist.$setname
    155 	else
    156 		mv $SDIR/flist.$setname $SDIR/plist.$setname
    157 	fi
    158 
    159 	if [ -n "$installdir" ]; then
    160 		( cd $dest ; \
    161 		    ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \
    162 		    $installdir < ${SDIR}/plist.$setname )
    163 	else
    164 		( cd $dest ; \
    165 		    ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \
    166 		    < ${SDIR}/plist.$setname ) > ${tars}/$out
    167 	fi
    168 	es=$(($es + $?))
    169 done
    170 exit $es
    171