darwin-x86-and-leopard-20060309
[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://www.central.org/dl/cellservdb/CellServDB
57         /usr/bin/curl -f -O http://dl.central.org/dl/cellservdb/CellServDB
58     fi
59
60     if [ ! -f CellServDB ]; then
61        echo "A CellServDB file must be placed in the working directory"
62        die=1
63     fi
64     FILES="ReadMe.rtf License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt"
65     for f in $FILES; do
66        if [ ! -f $RESSRC/$f ]; then
67          echo "file missing: " $RESSRC/$f
68          die=1
69        fi
70     done
71     if [ "$die" ]; then
72       echo "Correct above errors; then retry"
73       exit 1
74     fi
75     if [ ! -f $BINDEST/bin/translate_et ]; then
76       die=1
77     fi
78     if [ ! -f $BINDEST/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs ]; then
79       die=1
80     fi
81     if [ "$die" ]; then
82        echo $BINDEST " is not a valid binary dir. it should be the result of"
83        echo "make dest"
84        exit 1
85     fi
86
87     rm -rf $PKGROOT
88     mkdir $PKGROOT
89
90     mkdir -p $PKGROOT/Library
91     chown root${SEP}admin $PKGROOT
92     chmod 775 $PKGROOT $PKGROOT/Library
93     mkdir -p $PKGROOT/Library/OpenAFS/Tools
94     (cd $BINDEST && pax -rw * $PKGROOT/Library/OpenAFS/Tools)
95     cd $RESSRC
96     mkdir -p $PKGROOT/Library/StartupItems/OpenAFS
97     cp $BINDEST/root.client/usr/vice/etc/afs.rc  $PKGROOT/Library/StartupItems/OpenAFS/OpenAFS
98     chmod a+x $PKGROOT/Library/StartupItems/OpenAFS/OpenAFS
99     cp $BINDEST/root.client/usr/vice/etc/StartupParameters.plist  $PKGROOT/Library/StartupItems/OpenAFS/StartupParameters.plist
100     chown -R root${SEP}admin $PKGROOT/Library
101     chmod -R o-w $PKGROOT/Library
102     chmod -R g+w $PKGROOT/Library
103     chown -R root${SEP}wheel $PKGROOT/Library/StartupItems
104     chmod -R og-w $PKGROOT/Library/StartupItems
105     chown -R root${SEP}wheel $PKGROOT/Library/OpenAFS/Tools
106     chmod -R og-w $PKGROOT/Library/OpenAFS/Tools
107
108     mkdir -p $PKGROOT/private/var/db/openafs/cache
109     mkdir -p $PKGROOT/private/var/db/openafs/etc/config
110     cp $CURDIR/CellServDB $PKGROOT/private/var/db/openafs/etc/CellServDB.master
111     echo openafs.org > $PKGROOT/private/var/db/openafs/etc/ThisCell.sample
112     if [ $majorvers -ge 7 ]; then
113         echo /afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
114         (cd $CURDIR && \
115         make -f $RESSRC/Makefile AFSINCLUDE="-I$BINDEST/include" && \
116         cp afssettings $PKGROOT/private/var/db/openafs/etc/config && \
117         make -f $RESSRC/Makefile clean)
118         cp settings.plist $PKGROOT/private/var/db/openafs/etc/config/settings.plist.orig
119     else
120         echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample
121     fi
122     echo '-afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' > $PKGROOT/private/var/db/openafs/etc/config/afsd.options.sample
123
124     strip -X -S $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs
125
126     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext $PKGROOT/private/var/db/openafs/etc
127     cp -RP $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/C $PKGROOT/private/var/db/openafs/etc
128
129     chown -R root${SEP}wheel $PKGROOT/private
130     chmod -R og-w $PKGROOT/private
131     chmod  og-rx $PKGROOT/private/var/db/openafs/cache
132
133     mkdir -p $PKGROOT/usr/bin $PKGROOT/usr/sbin
134
135     BINLIST="fs klog klog.krb pagsh pagsh.krb pts sys tokens tokens.krb unlog unlog.krb aklog"
136
137 # Should these be linked into /usr too?
138     OTHER_BINLIST="bos cmdebug rxgen translate_et udebug xstat_cm_test xstat_fs_test"
139     OTHER_ETCLIST="vos rxdebug"
140
141     for f in $BINLIST; do
142        ln -s ../../Library/OpenAFS/Tools/bin/$f $PKGROOT/usr/bin/$f
143     done
144     ln -s ../../Library/OpenAFS/Tools/bin/kpasswd $PKGROOT/usr/bin/kpasswd.afs
145
146     ln -s ../../Library/OpenAFS/Tools/root.client/usr/vice/etc/afsd $PKGROOT/usr/sbin/afsd
147
148     chown -R root${SEP}wheel $PKGROOT/usr
149     chmod -R og-w $PKGROOT/usr
150 fi
151
152 if [ $secondpass = yes ]; then
153     rm -rf $PKGRES
154     mkdir $PKGRES
155
156     cd $RESSRC
157     if [ $majorvers -ge 7 ]; then
158         cp OpenAFS.post_install $PKGRES/postinstall
159         cp OpenAFS.pre_upgrade $PKGRES/preupgrade
160         cp OpenAFS.post_install $PKGRES/postupgrade
161         if [ $majorvers -ge 8 ]; then
162             cp InstallationCheck $PKGRES
163             mkdir -p $PKGRES/English.lproj
164             cp InstallationCheck $PKGRES/English.lproj
165             chmod a+x $PKGRES/InstallationCheck
166         fi
167         chmod a+x $PKGRES/postinstall $PKGRES/postupgrade $PKGRES/preupgrade
168     else
169         cp OpenAFS.post_install OpenAFS.pre_upgrade $PKGRES
170         cp OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade
171         chmod a+x $PKGRES/OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade $PKGRES/OpenAFS.pre_upgrade
172     fi
173     cp License.rtf ReadMe.rtf $PKGRES
174     cp csrvdbmerge.pl $PKGRES
175     chmod a+x $PKGRES/csrvdbmerge.pl
176     cp CellServDB.list $PKGRES
177     chown -R root${SEP}wheel $PKGRES
178     rm -rf $CURDIR/OpenAFS.pkg
179     if [ $majorvers -ge 7 ]; then
180         echo $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
181             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
182         $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
183             -i OpenAFS.Info.plist -d OpenAFS.Description.plist
184     else
185         echo $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES
186         (cd $CURDIR && $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES)
187         #old versions of package didn't handle this properly
188         if [ ! -r $CURDIR/OpenAFS.pkg/Contents ]; then
189                 mkdir -p $CURDIR/OpenAFS.pkg/Contents/Resources
190                 mv $CURDIR/OpenAFS.pkg/OpenAFS.* $CURDIR/OpenAFS.pkg/Contents/Resources
191                 mv $CURDIR/OpenAFS.pkg/*.rtf $CURDIR/OpenAFS.pkg/Contents/Resources
192                 mv $CURDIR/OpenAFS.pkg/csrvdbmerge.pl $CURDIR/OpenAFS.pkg/Contents/Resources
193                 mv $CURDIR/OpenAFS.pkg/CellServDB* $CURDIR/OpenAFS.pkg/Contents/Resources
194         fi
195     fi
196
197     rm -rf $PKGROOT $PKGRES
198     mkdir $CURDIR/dmg
199     mv $CURDIR/OpenAFS.pkg $CURDIR/dmg
200     rm -rf $CURDIR/OpenAFS.dmg
201     hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg
202     rm -rf $CURDIR/dmg
203     # Unfortunately, sudo sets $USER to root, so I can't chown the 
204     #.pkg dir back to myself
205     #chown -R $USER $CURDIR/OpenAFS.pkg
206 else
207     echo "First pass completed.  Customize pkgroot and then run:"
208     echo "    $0 -secondpass"
209 fi