828711201d
- 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]
147 lines
2.8 KiB
Bash
Executable File
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
|