maketars revision 1.26 1 #!/bin/sh
2 #
3 # $NetBSD: maketars,v 1.26 2002/11/25 23:29:54 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] [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
25 # handle args
26 while : ; do
27 case $1 in
28 -b*)
29 lists="$xlists $nlists"
30 ;;
31 -x*)
32 lists=$xlists
33 ;;
34 -a*)
35 machine_arch=$2; shift
36 ;;
37 -M*)
38 metalog=$2; shift
39 ;;
40 -m*)
41 machine=$2; shift
42 ;;
43 -s*)
44 setd=$2; shift
45 ;;
46 -d*)
47 dest=$2; shift
48 ;;
49 -t*)
50 tars=$2; shift
51 ;;
52 -*)
53 cat 1>&2 <<USAGE
54 Usage: $0 [-b] [-x] [-a arch] [-m machine] [-s setsdir] [-M metalog]
55 [-d dest] [-t tars] [setname ...]
56 -b make netbsd + x11 lists
57 -x only make x11 lists
58 -a arch set arch (e.g, m68k, mipseb, mipsel, powerpc) [$machine_arch]
59 -m machine set machine (e.g, amiga, i386, macppc) [$machine]
60 -s setsdir directory to find sets [$setd]
61 -M metalog metalog file
62 -d dest \$DESTDIR [$dest]
63 -t tars \$RELEASEDIR [$tars]
64 [setname ...] sets to build [$lists]
65 USAGE
66 exit 1
67 ;;
68 *)
69 break
70 ;;
71 esac
72 shift
73 done
74 if [ -n "$*" ]; then
75 lists="$*"
76 fi
77
78 if [ -z "$tars" ]; then
79 echo \$RELEASEDIR must be set
80 exit 1
81 fi
82
83 if [ -z "$dest" ]; then
84 echo \$DESTDIR must be set
85 exit 1
86 fi
87
88 # Make sure we don't loop forever if mkdir will always fail.
89
90 if [ ! -d /tmp ]; then
91 echo /tmp is not a directory
92 exit 1
93 fi
94
95 if [ ! -w /tmp ]; then
96 echo /tmp is not writeable
97 exit 1
98 fi
99
100 SDIR_BASE=/tmp/maketar.$$
101 SDIR_SERIAL=0
102
103 while true; do
104 SDIR=${SDIR_BASE}.${SDIR_SERIAL}
105 mkdir -m 0700 ${SDIR} && break
106 SDIR_SERIAL=$((${SDIR_SERIAL} + 1))
107 done
108
109 trap "/bin/rm -rf $SDIR ; exit 0" 0 2 3 13 # EXIT INT QUIT PIPE
110
111 if [ -n "$metalog" ]; then
112 echo "parsing $metalog"
113 (
114 cat ${DESTDIR}/etc/mtree/NetBSD.dist
115 echo "/unset all"
116 sed -e "s,^\.$dest,.," < $metalog
117 ) | ${MTREE} -D -k all -N ${DESTDIR}/etc | \
118 sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metalog
119 fi
120
121 GZIP=-9 # for pax -z
122 export GZIP
123
124 es=0
125 for setname in $lists; do
126 out=$setname.tgz
127 echo "making $out"
128 sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
129 > $SDIR/flist.$setname
130 if [ -n "$metalog" ]; then
131 awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
132 > $SDIR/flist.$setname.full
133 (
134 echo "/set uname=root gname=wheel"
135 awk -f join.awk $SDIR/flist.$setname.full $SDIR/metalog
136 ) > $SDIR/plist.$setname
137 else
138 mv $SDIR/flist.$setname $SDIR/plist.$setname
139 fi
140
141 ( cd $dest ; \
142 ${PAX} -w -d -z ${metalog:+-N$dest/etc} ${metalog:+-M} \
143 < ${SDIR}/plist.$setname ) > ${tars}/$out
144 es=$(($es + $?))
145 done
146 exit $es
147