Home | History | Annotate | Line # | Download | only in sets
maketars revision 1.36
      1 #!/bin/sh
      2 #
      3 # $NetBSD: maketars,v 1.36 2003/01/03 15:26:32 lukem Exp $
      4 #
      5 # Make release tar files for some or all lists.  Usage:
      6 # maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir]
      7 #	[-M metalog] [-N etcdir] [-d destdir] [-t tardir] [setname ...]
      8 #
      9 # The default sets are "base comp etc games man misc text"
     10 #
     11 # If '-i installdir' is given, copy the given sets to installdir
     12 # (using pax -rw ...) instead of creating tar files.
     13 # In this case, remove "etc" from the list of default sets.
     14 #
     15 
     16 # set defaults
     17 : ${PAX=pax}
     18 : ${MTREE=mtree}
     19 make="${MAKE:-make} -j 1 -f `dirname $0`/Makefile"
     20 
     21 machine=`${make} print_machine`
     22 machine_arch=`${make} print_machine_arch`
     23 setd=`pwd`
     24 nlists="base comp etc games man misc text"
     25 xlists="xbase xcomp xcontrib xfont xserver xmisc"
     26 lists=$nlists
     27 tars=$RELEASEDIR
     28 dest=$DESTDIR
     29 metalog=
     30 installdir=
     31 etcdir=
     32 
     33 # handle args
     34 while : ; do
     35 	case $1 in
     36 	-b*)
     37 		lists="$xlists $nlists"
     38 		;;
     39 	-x*)
     40 		lists=$xlists
     41 		;;
     42 	-i*)
     43 		installdir=$2; shift
     44 		;;
     45 	-a*)
     46 		machine_arch=$2; shift
     47 		;;
     48 	-M*)
     49 		metalog=$2; shift
     50 		;;
     51 	-m*)
     52 		machine=$2; shift
     53 		;;
     54 	-N*)
     55 		etcdir=$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] [-i idir] [-a arch] [-m machine] [-s setsdir]
     69 	    [-M metalog] [-N etcdir] [-d dest] [-t targetdir] [setname ...]
     70 	-b		make netbsd + x11 lists
     71 	-x		only make x11 lists
     72 	-i idir		install sets to idir instead of creating tar files
     73 	-a arch		set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch]
     74 	-m machine	set machine (e.g, amiga, i386, macppc) [$machine]
     75 	-s setsdir	directory to find sets [$setd]
     76 	-M metalog	metalog file
     77 	-N etcdir	etc dir for metalog use [$dest/etc]
     78 	-d dest		\$DESTDIR	[$dest]
     79 	-t targetdir	\$RELEASEDIR	[$tars]
     80 	[setname ...]	sets to build 	[$lists]
     81 USAGE
     82 		exit 1
     83 		;;
     84 	*)
     85 		break
     86 		;;
     87 	esac
     88 	shift
     89 done
     90 if [ -n "$installdir" ]; then		# if -i, remove etc from default list
     91 	lists=$(echo $lists | sed -e 's/ etc / /')
     92 fi
     93 if [ -n "$*" ]; then
     94 	lists="$*"
     95 fi
     96 
     97 if [ -z "$tars" -a -z "$installdir" ]; then
     98 	echo \$RELEASEDIR must be set, or -i must be used
     99 	exit 1
    100 fi
    101 
    102 if [ -z "$dest" ]; then
    103 	echo \$DESTDIR must be set
    104 	exit 1
    105 fi
    106 : ${etcdir:=${dest}/etc}
    107 
    108 # Make sure we don't loop forever if mkdir will always fail.
    109 
    110 if [ ! -d /tmp ]; then
    111 	echo /tmp is not a directory
    112 	exit 1
    113 fi
    114 
    115 if [ ! -w /tmp ]; then
    116 	echo /tmp is not writeable
    117 	exit 1
    118 fi
    119 
    120 SDIR_BASE=/tmp/maketar.$$
    121 SDIR_SERIAL=0
    122 
    123 while true; do
    124 	SDIR=${SDIR_BASE}.${SDIR_SERIAL}
    125 	mkdir -m 0700 ${SDIR} && break
    126 	SDIR_SERIAL=$((${SDIR_SERIAL} + 1))
    127 done    
    128 
    129 trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13		# EXIT INT QUIT PIPE
    130 
    131 if [ -n "$metalog" ]; then
    132 	echo "Parsing $metalog"
    133 	(
    134 		cat ${etcdir}/mtree/NetBSD.dist
    135 		echo "/unset all"
    136 		cat $metalog
    137 	) | ${MTREE} -C -k all -N ${etcdir} > $SDIR/metalog
    138 fi
    139 
    140 GZIP=-9			# for pax -z
    141 export GZIP
    142 
    143 es=0
    144 for setname in $lists; do
    145 	out=$setname.tgz
    146 	if [ -n "$installdir" ]; then
    147 		echo "Copying set $setname"
    148 	else
    149 		echo "Creating $out"
    150 	fi
    151 	sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
    152 	    > $SDIR/flist.$setname
    153 	if [ -n "$metalog" ]; then
    154 		awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
    155 		    > $SDIR/flist.$setname.full
    156 		(
    157 			echo "/set uname=root gname=wheel"
    158 			awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog
    159 		) > $SDIR/plist.$setname
    160 	else
    161 		mv $SDIR/flist.$setname $SDIR/plist.$setname
    162 	fi
    163 
    164 	if [ -n "$installdir" ]; then
    165 		( cd $dest ; \
    166 		    ${PAX} -O -rwpe -d -N${etcdir} ${metalog:+-M} \
    167 		    $installdir < ${SDIR}/plist.$setname )
    168 	else
    169 		( cd $dest ; \
    170 		    ${PAX} -O -w -d -z -N${etcdir} ${metalog:+-M} \
    171 		    < ${SDIR}/plist.$setname ) > ${tars}/$out
    172 	fi
    173 	es=$(($es + $?))
    174 done
    175 exit $es
    176