Home | History | Annotate | Line # | Download | only in sets
maketars revision 1.48
      1   1.2      gwr #!/bin/sh
      2   1.2      gwr #
      3  1.48    lukem # $NetBSD: maketars,v 1.48 2004/01/03 02:38:58 lukem Exp $
      4   1.2      gwr #
      5   1.2      gwr # Make release tar files for some or all lists.  Usage:
      6  1.34    lukem # maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir]
      7  1.34    lukem #	[-M metalog] [-N etcdir] [-d destdir] [-t tardir] [setname ...]
      8  1.35    lukem #
      9  1.35    lukem # The default sets are "base comp etc games man misc text"
     10  1.35    lukem #
     11  1.35    lukem # If '-i installdir' is given, copy the given sets to installdir
     12  1.35    lukem # (using pax -rw ...) instead of creating tar files.
     13  1.35    lukem # In this case, remove "etc" from the list of default sets.
     14   1.2      gwr #
     15   1.2      gwr 
     16  1.43    lukem prog=${0##*/}
     17  1.41    lukem 
     18   1.2      gwr # set defaults
     19  1.47    lukem : ${HOST_SH=sh}
     20  1.43    lukem : ${MKTEMP=mktemp}
     21  1.18    lukem : ${MTREE=mtree}
     22  1.47    lukem : ${PAX=pax}
     23  1.18    lukem 
     24  1.47    lukem . $(dirname $0)/sets.subr
     25  1.47    lukem lists=$nlists
     26  1.45   dyoung 
     27   1.2      gwr tars=$RELEASEDIR
     28   1.2      gwr dest=$DESTDIR
     29  1.18    lukem metalog=
     30  1.28    lukem installdir=
     31  1.30    lukem etcdir=
     32   1.2      gwr 
     33  1.47    lukem usage()
     34  1.47    lukem {
     35  1.47    lukem 	cat 1>&2 <<USAGE
     36  1.41    lukem Usage: ${prog} [-b] [-x] [-i idir] [-a arch] [-m machine] [-s setsdir]
     37  1.36    lukem 	    [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...]
     38   1.9    lukem 	-b		make netbsd + x11 lists
     39   1.9    lukem 	-x		only make x11 lists
     40  1.30    lukem 	-i idir		install sets to idir instead of creating tar files
     41  1.48    lukem 	-a arch		set arch (e.g, m68k, mipseb, mipsel, powerpc) [$MACHINE_ARCH]
     42  1.48    lukem 	-m machine	set machine (e.g, amiga, i386, macppc) [$MACHINE]
     43  1.47    lukem 	-s setsdir	directory to find sets [$setsdir]
     44  1.18    lukem 	-M metalog	metalog file
     45  1.30    lukem 	-N etcdir	etc dir for metalog use [$dest/etc]
     46   1.9    lukem 	-d dest		\$DESTDIR	[$dest]
     47  1.36    lukem 	-t targetdir	\$RELEASEDIR	[$tars]
     48   1.9    lukem 	[setname ...]	sets to build 	[$lists]
     49   1.9    lukem USAGE
     50  1.47    lukem 	exit 1
     51  1.47    lukem }
     52  1.47    lukem 
     53  1.47    lukem # handle args
     54  1.47    lukem while getopts bxi:a:m:s:M:N:d:t: ch; do
     55  1.47    lukem 	case ${ch} in
     56  1.47    lukem 	b)
     57  1.47    lukem 		lists="$xlists $nlists"
     58  1.47    lukem 		;;
     59  1.47    lukem 	x)
     60  1.47    lukem 		lists="$xlists"
     61  1.47    lukem 		;;
     62  1.47    lukem 	i)
     63  1.47    lukem 		installdir=${OPTARG}
     64  1.47    lukem 		;;
     65  1.47    lukem 	a)
     66  1.48    lukem 		MACHINE_ARCH=${OPTARG}
     67  1.48    lukem 		MACHINE_CPU=$(arch_to_cpu ${OPTARG})
     68  1.47    lukem 		;;
     69  1.47    lukem 	m)
     70  1.48    lukem 		MACHINE=${OPTARG}
     71  1.47    lukem 		;;
     72  1.47    lukem 	s)
     73  1.47    lukem 		setsdir=${OPTARG}
     74  1.47    lukem 		;;
     75  1.47    lukem 	M)
     76  1.47    lukem 		metalog=${OPTARG}
     77  1.47    lukem 		;;
     78  1.47    lukem 	N)
     79  1.47    lukem 		etcdir=${OPTARG}
     80  1.47    lukem 		;;
     81  1.47    lukem 	d)
     82  1.47    lukem 		dest=${OPTARG}
     83  1.47    lukem 		;;
     84  1.47    lukem 	t)
     85  1.47    lukem 		tars=${OPTARG}
     86   1.9    lukem 		;;
     87   1.9    lukem 	*)
     88  1.47    lukem 		usage
     89   1.9    lukem 		;;
     90   1.2      gwr 	esac
     91   1.2      gwr done
     92  1.47    lukem shift $((${OPTIND} - 1))
     93  1.28    lukem if [ -n "$installdir" ]; then		# if -i, remove etc from default list
     94  1.28    lukem 	lists=$(echo $lists | sed -e 's/ etc / /')
     95  1.28    lukem fi
     96  1.10     ross if [ -n "$*" ]; then
     97  1.10     ross 	lists="$*"
     98   1.9    lukem fi
     99   1.1      cgd 
    100  1.28    lukem if [ -z "$tars" -a -z "$installdir" ]; then
    101  1.28    lukem 	echo \$RELEASEDIR must be set, or -i must be used
    102   1.1      cgd 	exit 1
    103   1.9    lukem fi
    104   1.1      cgd 
    105   1.9    lukem if [ -z "$dest" ]; then
    106   1.9    lukem 	echo \$DESTDIR must be set
    107   1.1      cgd 	exit 1
    108   1.9    lukem fi
    109  1.30    lukem : ${etcdir:=${dest}/etc}
    110   1.1      cgd 
    111  1.43    lukem SDIR=$(${MKTEMP} -d /tmp/${prog}.XXXXXX)
    112  1.20    bjh21 
    113  1.38      erh es=0
    114  1.38      erh cleanup()
    115  1.38      erh {
    116  1.44      dsl 	es=$?
    117  1.38      erh 	/bin/rm -rf $SDIR
    118  1.38      erh 	exit $es
    119  1.38      erh }
    120  1.38      erh trap cleanup 0 2 3 13		# EXIT INT QUIT PIPE
    121  1.18    lukem 
    122  1.18    lukem if [ -n "$metalog" ]; then
    123  1.28    lukem 	echo "Parsing $metalog"
    124  1.23    lukem 	(
    125  1.30    lukem 		cat ${etcdir}/mtree/NetBSD.dist
    126  1.23    lukem 		echo "/unset all"
    127  1.44      dsl 		cat $metalog 2>/dev/null
    128  1.33    lukem 	) | ${MTREE} -C -k all -N ${etcdir} > $SDIR/metalog
    129  1.41    lukem 	rv=$?
    130  1.41    lukem 	if [ $rv -ne 0 ]; then
    131  1.41    lukem 		echo "${prog}: mtree failed, exiting"
    132  1.41    lukem 		exit $rv
    133  1.41    lukem 	fi
    134  1.18    lukem fi
    135  1.18    lukem 
    136  1.18    lukem GZIP=-9			# for pax -z
    137  1.18    lukem export GZIP
    138  1.18    lukem 
    139   1.9    lukem for setname in $lists; do
    140  1.12  frueauf 	out=$setname.tgz
    141  1.28    lukem 	if [ -n "$installdir" ]; then
    142  1.28    lukem 		echo "Copying set $setname"
    143  1.28    lukem 	else
    144  1.43    lukem 		if [ -n "$metalog" -a $tars/$out -nt "$metalog" ]; then
    145  1.42      dsl 			echo "$out is up to date"
    146  1.42      dsl 			continue
    147  1.43    lukem 		fi
    148  1.28    lukem 		echo "Creating $out"
    149  1.28    lukem 	fi
    150  1.48    lukem 	${HOST_SH} $setsdir/makeflist -a $MACHINE_ARCH -m $MACHINE \
    151  1.47    lukem 	    -s $setsdir $setname > $SDIR/flist.$setname
    152  1.18    lukem 	if [ -n "$metalog" ]; then
    153  1.18    lukem 		awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
    154  1.24    lukem 		    > $SDIR/flist.$setname.full
    155  1.23    lukem 		(
    156  1.23    lukem 			echo "/set uname=root gname=wheel"
    157  1.24    lukem 			awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog
    158  1.23    lukem 		) > $SDIR/plist.$setname
    159  1.18    lukem 	else
    160  1.18    lukem 		mv $SDIR/flist.$setname $SDIR/plist.$setname
    161  1.18    lukem 	fi
    162  1.18    lukem 
    163  1.28    lukem 	if [ -n "$installdir" ]; then
    164  1.28    lukem 		( cd $dest ; \
    165  1.40    perry 		    ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \
    166  1.28    lukem 		    $installdir < ${SDIR}/plist.$setname )
    167  1.28    lukem 	else
    168  1.28    lukem 		( cd $dest ; \
    169  1.32    lukem 		    ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \
    170  1.28    lukem 		    < ${SDIR}/plist.$setname ) > ${tars}/$out
    171  1.28    lukem 	fi
    172  1.18    lukem 	es=$(($es + $?))
    173   1.2      gwr done
    174  1.38      erh if [ $es -gt 255 ] ; then
    175  1.38      erh 	es=255
    176  1.38      erh fi
    177  1.17       he exit $es
    178