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