NetBSD/distrib/sets/maketars
lukem 828711201d - clean up SDIR (temporary directory) creation
- improve munging of NetBSD.dist and METALOG into metalog, using mtree to
  "cleanup" / "merge" entries, and don't sort the result.
  relies upon mtree to not change the order (see below)
- use (newly added) join.awk to output lines in metalog that are listed
  in flist.${set}.  join.awk doesn't require either file to be sorted
  (unlike join(1)), which is required because we want to retain the
  order of the metalog, because certain entries in the metalog (such
  as hard links) make assumptions about the permissions of earlier entries.
  this should fix [toolchain/16207]
2002-04-13 12:47:10 +00:00

147 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: maketars,v 1.23 2002/04/13 12:47:10 lukem Exp $
#
# Make release tar files for some or all lists. Usage:
# maketars [-b] [-x] [-a arch] [-m machine] [-s setsdir]
# [-M metalog] [-d destdir] [-t tardir] [setname ...]
#
# set defaults
: ${MAKE=make}
: ${PAX=pax}
: ${MTREE=mtree}
machine=`${MAKE} print_machine`
machine_arch=`${MAKE} print_machine_arch`
setd=`pwd`
nlists="base comp etc games man misc text"
xlists="xbase xcomp xcontrib xfont xserver xmisc"
lists=$nlists
tars=$RELEASEDIR
dest=$DESTDIR
metalog=
# handle args
while : ; do
case $1 in
-b*)
lists="$xlists $nlists"
;;
-x*)
lists=$xlists
;;
-a*)
machine_arch=$2; shift
;;
-M*)
metalog=$2; shift
;;
-m*)
machine=$2; shift
;;
-s*)
setd=$2; shift
;;
-d*)
dest=$2; shift
;;
-t*)
tars=$2; shift
;;
-*)
cat 1>&2 <<USAGE
Usage: $0 [-b] [-x] [-a arch] [-m machine] [-s setsdir] [-M metalog]
[-d dest] [-t tars] [setname ...]
-b make netbsd + x11 lists
-x only make x11 lists
-a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch]
-m machine set machine (e.g, amiga, i386, macppc) [$machine]
-s setsdir directory to find sets [$setd]
-M metalog metalog file
-d dest \$DESTDIR [$dest]
-t tars \$RELEASEDIR [$tars]
[setname ...] sets to build [$lists]
USAGE
exit 1
;;
*)
break
;;
esac
shift
done
if [ -n "$*" ]; then
lists="$*"
fi
if [ -z "$tars" ]; then
echo \$RELEASEDIR must be set
exit 1
fi
if [ -z "$dest" ]; then
echo \$DESTDIR must be set
exit 1
fi
# Make sure we don't loop forever if mkdir will always fail.
if [ ! -d /tmp ]; then
echo /tmp is not a directory
exit 1
fi
if [ ! -w /tmp ]; then
echo /tmp is not writeable
exit 1
fi
SDIR_BASE=/tmp/maketar.$$
SDIR_SERIAL=0
while true; do
SDIR=${SDIR_BASE}.${SDIR_SERIAL}
mkdir -m 0700 ${SDIR} && break
SDIR_SERIAL=$((${SDIR_SERIAL} + 1))
done
trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13 # EXIT INT QUIT PIPE
if [ -n "$metalog" ]; then
echo "parsing $metalog"
(
cat ${DESTDIR}/etc/mtree/NetBSD.dist
echo "/unset all"
sed -e "s,^\.$dest,.," < $metalog
) | ${MTREE} -D -k all -N ${DESTDIR}/etc | \
sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metalog
fi
GZIP=-9 # for pax -z
export GZIP
es=0
for setname in $lists; do
out=$setname.tgz
echo "making $out"
sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
> $SDIR/flist.$setname
if [ -n "$metalog" ]; then
awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
> $SDIR/flist.full
(
echo "/set uname=root gname=wheel"
awk -f join.awk $SDIR/flist.full $SDIR/metalog
) > $SDIR/plist.$setname
else
mv $SDIR/flist.$setname $SDIR/plist.$setname
fi
( cd $dest ; \
${PAX} -w -d -z ${metalog:+-N$dest/etc} ${metalog:+-M} \
< ${SDIR}/plist.$setname ) > ${tars}/$out
es=$(($es + $?))
done
exit $es