maketars revision 1.20 1 #!/bin/sh
2 #
3 # $NetBSD: maketars,v 1.20 2002/04/01 15:50:30 bjh21 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 : ${MAKE=make}
12 : ${PAX=pax}
13 : ${MTREE=mtree}
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=`expr ${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 ${MTREE} -D -k all -N ${DESTDIR}/etc \
114 -f ${DESTDIR}/etc/mtree/NetBSD.dist | \
115 sed -e 's,\(.*\) \(\..*\),\2 \1,' > $SDIR/metadirs
116 sed -e "s,^\.$dest,.," < $metalog > $SDIR/metafiles
117 cat $SDIR/metadirs $SDIR/metafiles | sort -u > $SDIR/metalog
118 fi
119
120 GZIP=-9 # for pax -z
121 export GZIP
122
123 es=0
124 for setname in $lists; do
125 out=$setname.tgz
126 echo "making $out"
127 sh $setd/makeflist -a $machine_arch -m $machine -s $setd $setname \
128 > $SDIR/flist.$setname
129 if [ -n "$metalog" ]; then
130 awk -f getdirs.awk $SDIR/flist.$setname | sort -u \
131 > $SDIR/flist.full
132 echo "/set uname=root gname=wheel" > $SDIR/plist.$setname
133 join $SDIR/flist.full $SDIR/metalog >> $SDIR/plist.$setname
134 else
135 mv $SDIR/flist.$setname $SDIR/plist.$setname
136 fi
137
138 ( cd $dest ; \
139 ${PAX} -w -d -z ${metalog:+-N$dest/etc} ${metalog:+-M} \
140 < ${SDIR}/plist.$setname ) > ${tars}/$out
141 es=$(($es + $?))
142 done
143 exit $es
144