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