2b4f1ccd0c499a1a9c9dd7a903fed85fb9a11eb3
[openafs.git] / src / packaging / MacOS / buildpkg.sh.in
1 #!/bin/sh
2 # Portions Copyright (c) 2003, 2006 Apple Computer, Inc.  All rights reserved.
3
4 if [ -z "$1" ]; then
5     echo Usage: buildpkg binary-dir
6     echo '  or'
7     echo 'Usage: buildpkg [-firstpass] binary-dir'
8     echo '            (customize pkgroot)'
9     echo '       buildpkg [-secondpass]'
10     exit 1
11 fi
12
13 firstpass=yes
14 secondpass=yes
15 if [ "$1" = "-firstpass" ]; then
16     secondpass=no
17     shift
18 elif [ "$1" = "-secondpass" ]; then
19     firstpass=no
20     shift
21 fi
22
23 BINDEST=`cd $1 && pwd`
24 CURDIR=`pwd`
25 RESSRC=`dirname $0`
26 RESSRC=`cd $RESSRC && pwd`
27 majorvers=`uname -r | sed 's/\..*//'`
28 if [ $majorvers -eq 7 ]; then
29   RELNAME="Panther"
30 fi
31 if [ $majorvers -eq 8 ]; then
32   RELNAME="Tiger"
33 fi
34 if [ $majorvers -eq 9 ]; then
35   RELNAME="Leopard"
36 fi
37 if [ $majorvers -eq 10 ]; then
38   RELNAME="Snowleopard"
39 fi
40 if [ $majorvers -eq 11 ]; then
41   RELNAME="Lion"
42 fi
43
44 PKGROOT=$CURDIR/pkgroot
45 PKGRES=$CURDIR/pkgres
46 DPKGROOT=$CURDIR/dpkgroot
47 DPKGRES=$CURDIR/dpkgres
48 if [ $majorvers -ge 7 ]; then
49     SEP=:
50     package=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
51     if [ ! -x $package ]; then
52        echo "PackageMaker does not exist. Please run this script on a MacOS X system"
53       echo "with the DeveloperTools package installed"
54       exit 1
55     fi
56 else
57     SEP=.
58     package=/usr/bin/package
59     if [ ! -f $package ]; then
60        echo "$package does not exist. Please run this script on a MacOS X system"
61       echo "with the BSD subsystem installed"
62       exit 1
63     fi
64     if grep -q 'set resDir = ""' $package ; then
65        echo $package is buggy.
66        echo remove the line \''set resDir = ""'\' from $package and try again
67        exit 1
68     fi
69 fi
70
71 if [ $firstpass = yes ]; then
72     if [ -x /usr/bin/curl ]; then
73         /usr/bin/curl -f -O http://dl.central.org/dl/cellservdb/CellServDB
74     fi
75
76     if [ ! -f CellServDB ]; then
77        echo "A CellServDB file must be placed in the working directory"
78        die=1
79     else
80        if grep -q 'GCO Public CellServDB' CellServDB ; then
81          touch CellServDB
82        else
83           echo "A proper CellServDB file must be placed in the working directory"
84           die=1
85        fi
86     fi
87     FILES="ReadMe.rtf.$majorvers License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt"
88     for f in $FILES; do
89        if [ ! -f $RESSRC/$f ]; then
90          echo "file missing: " $RESSRC/$f
91          die=1
92        fi
93     done
94     if [ "$die" ]; then
95       echo "Correct above errors; then retry"
96       exit 1
97     fi
98     if [ ! -f $BINDEST/bin/translate_et ]; then
99       die=1
100     fi
101     if [ ! -f $BINDEST/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs ]; then
102       die=1
103     fi
104     if [ "$die" ]; then
105        echo $BINDEST " is not a valid binary dir. it should be the result of"
106        echo "make dest"
107        exit 1
108     fi
109
110     rm -rf $PKGROOT
111     mkdir $PKGROOT
112
113     mkdir -p $PKGROOT/Library
114     mkdir -p $PKGROOT/Library/PreferencePanes
115     mkdir -p $PKGROOT/Library/Security/SecurityAgentPlugins
116     chown root${SEP}admin $PKGROOT
117     chmod 755 $PKGROOT $PKGROOT/Library $PKGROOT/Library/PreferencePanes $PKGROOT/Library/Security/SecurityAgentPlugins
118     (cd $BINDEST/tools && pax -rw OpenAFS.prefPane $PKGROOT/Library/PreferencePanes)
119     (cd $BINDEST/tools && pax -rw aklog.bundle $PKGROOT/Library/Security/SecurityAgentPlugins)
120     mkdir -p $PKGROOT/Library/OpenAFS/Tools
121     (cd $BINDEST && pax -rw * $PKGROOT/Library/OpenAFS/Tools)
122     cd $RESSRC
123     mkdir -p $PKGROOT/Library/LaunchDaemons
124     chmod -R o-w $PKGROOT/Library
125     chmod -R g-w $PKGROOT/Library
126     cp openafs.launchd.plist $PKGROOT/Library/LaunchDaemons/org.openafs.filesystems.afs.plist
127     chmod 644 $PKGROOT/Library/LaunchDaemons/org.openafs.filesystems.afs.plist
128     chown root${SEP}admin $PKGROOT/Library
129     chown -R root${SEP}wheel $PKGROOT/Library/LaunchDaemons
130     chown -R root${SEP}wheel $PKGROOT/Library/OpenAFS/Tools
131     chmod -R og-w $PKGROOT/Library/OpenAFS/Tools
132
133     mkdir -p $PKGROOT/private/var/db/openafs/cache
134     mkdir -p $PKGROOT/private/var/db/openafs/etc/config
135     cp openafs.launchdaemon $PKGROOT/private/var/db/openafs/etc/launchafs.sh
136     chmod 755 $PKGROOT/private/var/db/openafs/etc/launchafs.sh
137     cp $CURDIR/CellServDB $PKGROOT/private/var/db/openafs/etc/CellServDB.master
138     echo grand.central.org > $PKGROOT/private/var/db/openafs/etc/ThisCell.sample
139     if [ $majorvers -ge 7 ]; then
140         echo /afs:/var/db/openafs/cache:100000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
141         cp -RP $PKGROOT/Library/OpenAFS/Tools/etc/afssettings $PKGROOT/private/var/db/openafs/etc/config
142         cp settings.plist $PKGROOT/private/var/db/openafs/etc/config/settings.plist.orig
143     else
144         echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
145     fi
146     cp afs.conf $PKGROOT/private/var/db/openafs/etc/config/afs.conf.sample
147     cp krb5-weak.conf $PKGROOT/private/var/db/openafs/etc/krb5-weak.conf
148
149     cp decode-panic $PKGROOT/Library/OpenAFS/Tools/tools
150     chmod a+x $PKGROOT/Library/OpenAFS/Tools/tools/decode-panic
151
152     if [ $majorvers -ge 9 ]; then
153         rm -rf $DPKGROOT
154         mkdir $DPKGROOT
155         mkdir -p $DPKGROOT/Library/OpenAFS/Debug
156         mv $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext.dSYM $DPKGROOT/Library/OpenAFS/Debug
157         cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext $DPKGROOT/Library/OpenAFS/Debug
158         chown -R root${SEP}wheel $DPKGROOT/Library/OpenAFS/Debug
159         chmod -R og-w $DPKGROOT/Library/OpenAFS/Debug
160     fi
161
162     strip -X -S $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs
163
164     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext $PKGROOT/private/var/db/openafs/etc
165     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/C $PKGROOT/private/var/db/openafs/etc
166
167     chown -R root${SEP}wheel $PKGROOT/private
168     chmod -R og-w $PKGROOT/private
169     chmod  og-rx $PKGROOT/private/var/db/openafs/cache
170
171     mkdir -p $PKGROOT/usr/bin $PKGROOT/usr/sbin $PKGROOT/usr/share/man/man1 $PKGROOT/usr/share/man/man5 $PKGROOT/usr/share/man/man8
172
173     BINLIST="fs klog klog.krb pagsh pagsh.krb pts sys tokens tokens.krb unlog unlog.krb aklog"
174     ETCLIST="vos"
175     SHLIBLIST="libafsauthent.dylib libafsauthent.dylib.1 libafsauthent.dylib.1.1 libafshcrypto.dylib libafshcrypto.dylib.1 libafshcrypto.dylib.1.1 libafsrpc.dylib libafsrpc.dylib.1 libafsrpc.dylib.1.4 libkopenafs.dylib libkopenafs.dylib.1 libkopenafs.dylib.1.1 librokenafs.dylib librokenafs.dylib.1 librokenafs.dylib.1.1"
176
177 # Should these be linked into /usr too?
178     OTHER_BINLIST="bos cmdebug rxgen translate_et udebug xstat_cm_test xstat_fs_test"
179     OTHER_ETCLIST="rxdebug"
180
181     for f in $BINLIST; do
182        ln -s ../../Library/OpenAFS/Tools/bin/$f $PKGROOT/usr/bin/$f
183     done
184     for f in $ETCLIST; do
185        ln -s ../../Library/OpenAFS/Tools/etc/$f $PKGROOT/usr/sbin/$f
186     done
187     for f in $SHLIBLIST; do
188        ln -s ../../Library/OpenAFS/Tools/lib/$f $PKGROOT/usr/lib/$f
189     done
190     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man1`; do
191         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man1/$f
192         ln -s ../../../../Library/OpenAFS/Tools/man/man1/$f.gz $PKGROOT/usr/share/man/man1/$f.gz
193     done
194     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man5`; do
195         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man5/$f
196         ln -s ../../../../Library/OpenAFS/Tools/man/man5/$f.gz $PKGROOT/usr/share/man/man5/$f.gz
197     done
198     for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man8`; do
199         gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man8/$f
200         ln -s ../../../../Library/OpenAFS/Tools/man/man8/$f.gz $PKGROOT/usr/share/man/man8/$f.gz
201     done
202
203     ln -s ../../Library/OpenAFS/Tools/bin/kpasswd $PKGROOT/usr/bin/kpasswd.afs
204
205     ln -s ../../Library/OpenAFS/Tools/root.client/usr/vice/etc/afsd $PKGROOT/usr/sbin/afsd
206
207 #    mkdir -p $PKGROOT/Library/Kerberos\ Plug-Ins
208 #    ln -s ../../Library/OpenAFS/Tools/root.client/Library/Kerberos\ Plug-Ins/aklog.loginLogout $PKGROOT/Library/Kerberos\ Plug-Ins/
209
210     chown -R root${SEP}wheel $PKGROOT/usr
211     chmod -R og-w $PKGROOT/usr
212 fi
213
214 if [ $secondpass = yes ]; then
215     rm -rf $PKGRES
216     mkdir $PKGRES
217     cd $RESSRC
218     if [ $majorvers -ge 9 ]; then
219         rm -rf $DPKGRES
220         mkdir $DPKGRES
221         cp License.rtf $DPKGRES
222         cp InstallationCheck.$majorvers $DPKGRES/InstallationCheck
223         chmod a+x $DPKGRES/InstallationCheck
224         mkdir -p $DPKGRES/English.lproj
225         cp InstallationCheck.strings.$majorvers \
226                 $DPKGRES/English.lproj/InstallationCheck.strings
227         cp background.jpg $DPKGRES/background.jpg
228         chown -R root${SEP}wheel $DPKGRES
229         rm -rf $CURDIR/OpenAFS-debug-extension.pkg
230         echo $package -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
231             -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
232         $package -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
233             -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
234     fi
235
236     cd $RESSRC
237     if [ $majorvers -ge 7 ]; then
238         cp OpenAFS.post_install $PKGRES/postinstall
239         cp OpenAFS.pre_upgrade $PKGRES/preupgrade
240         cp OpenAFS.post_install $PKGRES/postupgrade
241         cp background.jpg $PKGRES/background.jpg
242         if [ $majorvers -ge 8 ]; then
243             cp InstallationCheck.$majorvers $PKGRES/InstallationCheck
244             mkdir -p $PKGRES/English.lproj
245             cp InstallationCheck.strings.$majorvers $PKGRES/English.lproj/InstallationCheck.strings
246             chmod a+x $PKGRES/InstallationCheck
247         fi
248         chmod a+x $PKGRES/postinstall $PKGRES/postupgrade $PKGRES/preupgrade
249     else
250         cp OpenAFS.post_install OpenAFS.pre_upgrade $PKGRES
251         cp OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade
252         chmod a+x $PKGRES/OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade $PKGRES/OpenAFS.pre_upgrade
253     fi
254     cp License.rtf $PKGRES
255     cp ReadMe.rtf.$majorvers $PKGRES/ReadMe.rtf
256     cp csrvdbmerge.pl $PKGRES
257     chmod a+x $PKGRES/csrvdbmerge.pl
258     cp CellServDB.list $PKGRES
259     chown -R root${SEP}wheel $PKGRES
260     rm -rf $CURDIR/OpenAFS.pkg
261     if [ $majorvers -ge 7 ]; then
262         echo $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
263             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
264         $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
265             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
266     else
267         echo $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES
268         (cd $CURDIR && $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES)
269         #old versions of package didn't handle this properly
270         if [ ! -r $CURDIR/OpenAFS.pkg/Contents ]; then
271                 mkdir -p $CURDIR/OpenAFS.pkg/Contents/Resources
272                 mv $CURDIR/OpenAFS.pkg/OpenAFS.* $CURDIR/OpenAFS.pkg/Contents/Resources
273                 mv $CURDIR/OpenAFS.pkg/*.rtf $CURDIR/OpenAFS.pkg/Contents/Resources
274                 mv $CURDIR/OpenAFS.pkg/csrvdbmerge.pl $CURDIR/OpenAFS.pkg/Contents/Resources
275                 mv $CURDIR/OpenAFS.pkg/CellServDB* $CURDIR/OpenAFS.pkg/Contents/Resources
276         fi
277     fi
278
279     rm -rf $PKGROOT $PKGRES
280     rm -rf $DPKGROOT $DPKGRES
281     # here we want to build installer plugin and install
282     # for Tiger and later only
283     if [ $majorvers -ge 8 ]; then
284         AFSCELLBUNDLE=$BINDEST/installer/afscell.bundle
285         cd $CURDIR
286         if [ -d $AFSCELLBUNDLE -a -f $BINDEST/installer/InstallerSections.plist ]; then
287             mkdir -p $CURDIR/OpenAFS.pkg/Contents/Plugins
288             cp -R $AFSCELLBUNDLE $CURDIR/OpenAFS.pkg/Contents/Plugins
289             cp $BINDEST/installer/InstallerSections.plist $CURDIR/OpenAFS.pkg/Contents/Plugins
290         else
291             echo "afscell.bundle not built successfully"
292             echo "... or InstallerSections.plist file not found"
293             exit 1
294         fi
295     fi
296
297     mkdir $CURDIR/dmg
298     mv $CURDIR/OpenAFS.pkg $CURDIR/dmg
299     if [ $majorvers -ge 8 ]; then
300         mv $CURDIR/OpenAFS-debug-extension.pkg $CURDIR/dmg
301     fi
302     rm -rf $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg
303     cp $RESSRC/Uninstall $CURDIR/dmg/Uninstall.command
304     cp $RESSRC/DS_Store $CURDIR/dmg/.DS_Store
305     mkdir $CURDIR/dmg/.background
306     cp $RESSRC/afslogo.jpg $CURDIR/dmg/.background
307 #    hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg
308     hdiutil makehybrid -hfs -hfs-volume-name OpenAFS -hfs-openfolder $CURDIR/dmg $CURDIR/dmg -o $CURDIR/TMP.dmg
309     hdiutil convert -format UDZO $CURDIR/TMP.dmg -o $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg
310     rm $CURDIR/TMP.dmg
311     rm -rf $CURDIR/dmg
312     # Unfortunately, sudo sets $USER to root, so I can't chown the 
313     #.pkg dir back to myself
314     #chown -R $USER $CURDIR/OpenAFS.pkg
315 else
316     echo "First pass completed.  Customize pkgroot and then run:"
317     echo "    $0 -secondpass"
318 fi