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