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