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