2 # Portions Copyright (c) 2003, 2006 Apple Computer, Inc. All rights reserved.
3 echo '**BUILDPKG**' "$@"
8 echo 'Usage: pkgbuild.sh [-x] [--app-key <appkey>] [--inst-key <instkey>]'
9 echo ' [--pass N] [--csdb <CellServDB>] <binary-dir>'
11 echo '--app-key and --inst-key are for signing. -x prints all comamnds as '
14 echo 'By default, all passes are run. Available passes:'
15 echo ' --pass 1: prepare pkgroot'
16 echo ' --pass 2: create packages/installer from pkgroot'
17 echo 'If you want to alter the pkgroot, run pass 1, then alter what you'
18 echo 'want, and then run pass 2 to create the resulting packages.'
19 echo 'The --pass argument may be given multiple times.'
23 if [ x
"$#" = x0
]; then
36 while [ x
"$#" != x0
] ; do
65 echo "Unknown pass $pass_arg" >&2
74 if [ x
"$DEST_DIR" = x
] ; then
77 echo "Error: Unknown arg $key" >&2
84 if [ x
"$anypass" = x0
] ; then
89 if [ x
"$DEST_DIR" = x
] ; then
90 echo "Error: binary 'dest' dir not given"
96 if [ x
"$DO_X" = x1
] ; then
100 BINDEST
=`cd "$DEST_DIR" && pwd`
102 RESSRC
=`dirname "$0"`
103 RESSRC
=`cd "$RESSRC" && pwd`
104 majorvers
=`uname -r | cut -d. -f1`
106 if [ x
"$majorvers" = x10
]; then
107 RELNAME
="Snowleopard"
110 elif [ x
"$majorvers" = x11
]; then
114 elif [ x
"$majorvers" = x12
]; then
115 RELNAME
="MountainLion"
118 elif [ x
"$majorvers" = x13
]; then
122 elif [ x
"$majorvers" = x14
]; then
126 elif [ x
"$majorvers" = x15
]; then
130 elif [ x
"$majorvers" = x16
]; then
134 elif [ x
"$majorvers" = x17
]; then
138 elif [ x
"$majorvers" = x18
]; then
142 elif [ x
"$majorvers" = x
] ; then
143 echo "Error running uname" >&2
147 echo "Unknown major version $majorvers" >&2
153 PKGROOT
="$CURDIR"/pkgroot
154 PKGRES
="$CURDIR"/pkgres
155 DPKGROOT
="$CURDIR"/dpkgroot
156 PLUGINS
="$CURDIR"/plugins
157 if test -e /usr
/bin
/pkgbuild
; then
160 echo pkgbuild not found
>&2
163 if test -e /usr
/bin
/productbuild
; then
166 echo productbuild not found
>&2
170 if [ x
"$PASS1" = x1
]; then
171 if [ -x /usr
/bin
/curl
] && [ x
"$CSDB" = x
]; then
172 echo "No CellServDB provided; downloading one from central.org"
173 /usr
/bin
/curl
-f -O https
://www.central.org
/dl
/cellservdb
/CellServDB
174 if [ -f "$CURDIR"/CellServDB
] ; then
175 CSDB
="$CURDIR"/CellServDB
179 if [ x
"$CSDB" = x
]; then
180 echo "A CellServDB file must be provided with --csdb" >&2
183 # Turn CSDB into an absolute path
192 if grep -q 'GCO Public CellServDB' "$CSDB" ; then
195 echo "A proper CellServDB file must be provided" >&2
200 for f
in ReadMe.rtf.
"$majorvers" \
204 OpenAFS.post_install \
205 OpenAFS.pre_upgrade \
209 if [ ! -f "$RESSRC/$f" ]; then
210 echo "file missing: $RESSRC/$f" >&2
214 if [ x
"$die" = x1
]; then
215 echo "Correct above errors; then retry" >&2
219 for f
in "$BINDEST"/bin
/translate_et \
220 "$BINDEST/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs"
222 if [ ! -f "$f" ] ; then
223 echo "dest file missing: $f" >&2
227 if [ x
"$die" = x1
]; then
228 echo $BINDEST " is not a valid binary dir. it should be the result of" >&2
233 rm -rf "$PKGROOT" "$PLUGINS"
237 mkdir
-p "$PKGROOT"/Library
238 mkdir
-p "$PKGROOT"/Library
/PreferencePanes
239 mkdir
-p "$PKGROOT"/Library
/Security
/SecurityAgentPlugins
241 chown
-R root
${SEP}admin
"$PKGROOT"
242 chmod -R 755 "$PKGROOT"
244 (cd "$BINDEST"/tools
&& pax
-rw OpenAFS.prefPane
"$PKGROOT"/Library
/PreferencePanes
/)
245 (cd "$BINDEST"/tools
&& pax
-rw aklog.bundle \
246 "$PKGROOT"/Library
/Security
/SecurityAgentPlugins
/)
248 mkdir
-p "$PKGROOT"/Library
/OpenAFS
/Tools
249 (cd "$BINDEST" && pax
-rw * "$PKGROOT"/Library
/OpenAFS
/Tools
)
252 mv "$PKGROOT"/Library
/OpenAFS
/Tools
/installer
/* "$PLUGINS"/
254 mkdir
-p "$PKGROOT"/Library
/LaunchDaemons
255 chmod -R o-w
"$PKGROOT"/Library
256 chmod -R g-w
"$PKGROOT"/Library
258 cp openafs.launchd.plist
"$PKGROOT"/Library
/LaunchDaemons
/org.openafs.filesystems.afs.plist
259 chmod 644 "$PKGROOT"/Library
/LaunchDaemons
/org.openafs.filesystems.afs.plist
261 chown root
${SEP}admin
"$PKGROOT"/Library
262 chown
-R root
${SEP}wheel
"$PKGROOT"/Library
/LaunchDaemons
263 chown
-R root
${SEP}wheel
"$PKGROOT"/Library
/OpenAFS
/Tools
264 chmod -R og-w
"$PKGROOT"/Library
/OpenAFS
/Tools
266 mkdir
-p "$PKGROOT"/private
/var
/db
/openafs
/cache
267 mkdir
-p "$PKGROOT"/private
/var
/db
/openafs
/etc
/config
269 cp openafs.launchdaemon
"$PKGROOT"/private
/var
/db
/openafs
/etc
/launchafs.sh
270 chmod 755 "$PKGROOT"/private
/var
/db
/openafs
/etc
/launchafs.sh
272 cp "$CSDB" "$PKGROOT"/private
/var
/db
/openafs
/etc
/CellServDB.master
273 echo grand.central.org
> "$PKGROOT"/private
/var
/db
/openafs
/etc
/ThisCell.sample
274 echo /afs
:/var
/db
/openafs
/cache
:100000 > \
275 "$PKGROOT"/private
/var
/db
/openafs
/etc
/cacheinfo.sample
277 cp -RP "$PKGROOT"/Library
/OpenAFS
/Tools
/etc
/afssettings \
278 "$PKGROOT"/private
/var
/db
/openafs
/etc
/config
279 cp settings.plist
"$PKGROOT"/private
/var
/db
/openafs
/etc
/config
/settings.plist.orig
280 cp afs.conf
"$PKGROOT"/private
/var
/db
/openafs
/etc
/config
/afs.conf.sample
281 cp krb5-weak.conf
"$PKGROOT"/private
/var
/db
/openafs
/etc
/krb5-weak.conf
283 cp decode-panic
"$PKGROOT"/Library
/OpenAFS
/Tools
/tools
284 chmod a
+x
"$PKGROOT"/Library
/OpenAFS
/Tools
/tools
/decode-panic
288 mkdir
-p "$DPKGROOT"/Library
/OpenAFS
/Debug
290 mv "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext.dSYM \
291 "$DPKGROOT"/Library
/OpenAFS
/Debug
/
292 cp -RP "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext \
293 "$DPKGROOT"/Library
/OpenAFS
/Debug
/
294 chown
-R root
${SEP}wheel
"$DPKGROOT"/Library
/OpenAFS
/Debug
295 chmod -R og-w
"$DPKGROOT"/Library
/OpenAFS
/Debug
298 "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext
/Contents
/MacOS
/afs
300 mkdir
-p "$PKGROOT"/private
/var
/db
/openafs
302 cp -RP "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext \
303 "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/C \
304 "$PKGROOT"/private
/var
/db
/openafs
/etc
306 chown
-R root
${SEP}wheel
"$PKGROOT"/private
307 chmod -R og-w
"$PKGROOT"/private
309 chown
-R root
${SEP}wheel
"$PKGROOT"/private
310 chmod -R og-w
"$PKGROOT"/private
311 chmod og-rx
"$PKGROOT"/private
/var
/db
/openafs
/cache
313 if [ x
"$APP_KEY" != x
] ; then
314 # Sign each 'thing' that we have (commands, kexts, etc)
315 for obj
in "$DPKGROOT"/Library
/OpenAFS
/Debug
/afs.kext \
316 "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext \
317 "$PKGROOT"/private
/var
/db
/openafs
/etc
/afs.kext \
318 "$PKGROOT"/Library
/PreferencePanes
/OpenAFS.prefPane
/Contents
/Resources
/AFSBackgrounder.app \
319 "$PKGROOT"/Library
/PreferencePanes
/OpenAFS.prefPane \
320 "$PKGROOT"/Library
/Security
/SecurityAgentPlugins
/aklog.bundle \
321 "$PKGROOT"/Library
/OpenAFS
/Tools
/tools
/growlagent-openafs.app \
322 "$PKGROOT"/Library
/OpenAFS
/Tools
/tools
/aklog.bundle \
323 "$PLUGINS"/afscell.bundle
325 codesign
--verbose --force --timestamp --sign "$APP_KEY" "$obj"
328 # Check if our signatures for our kexts are valid. 'kextutil' will exit
329 # with an error and print out a message if something is wrong with the
330 # signature. Note that a code signing cert must have the
331 # 1.2.840.113635.100.6.1.18 extension present to be used for kexts
332 # (most code signing certs cannot be used for kexts).
333 for kext
in "$DPKGROOT"/Library
/OpenAFS
/Debug
/afs.kext \
334 "$PKGROOT"/Library
/OpenAFS
/Tools
/root.client
/usr
/vice
/etc
/afs.kext \
335 "$PKGROOT"/private
/var
/db
/openafs
/etc
/afs.kext
337 kextutil
-no-load -print-diagnostics "$kext"
341 if [ $majorvers -ge 15 ]; then
342 # El Capitan and further prevent us from touching /usr/bin directly
344 USRBIN
=/opt
/openafs
/bin
345 USRBIN2TOOLS
=..
/..
/..
/Library
/OpenAFS
/Tools
347 USRSBIN
=/opt
/openafs
/sbin
348 USRSBIN2TOOLS
=..
/..
/..
/Library
/OpenAFS
/Tools
350 MANDIR
=/opt
/openafs
/share
/man
351 MANDIR2TOOLS
=..
/..
/..
/..
/Library
/OpenAFS
/Tools
353 # Add our bin, sbin, and man directories to the default search path
354 mkdir
-p "$PKGROOT"/etc
/paths.d
"$PKGROOT"/etc
/manpaths.d
355 echo "$USRBIN" > "$PKGROOT"/etc
/paths.d
/40-openafs
356 echo "$USRSBIN" >> "$PKGROOT"/etc
/paths.d
/40-openafs
357 echo "$MANDIR" > "$PKGROOT"/etc
/manpaths.d
/40-openafs
361 USRBIN2TOOLS
=..
/..
/Library
/OpenAFS
/Tools
364 USRSBIN2TOOLS
="$USRBIN2TOOLS"
366 MANDIR
=/usr
/share
/man
367 MANDIR2TOOLS
=..
/..
/..
/Library
/OpenAFS
/Tools
370 mkdir
-p "$PKGROOT$USRBIN" \
372 "$PKGROOT$MANDIR"/man1 \
373 "$PKGROOT$MANDIR"/man5 \
374 "$PKGROOT$MANDIR"/man8
376 BINLIST
="fs klog klog.krb pagsh pagsh.krb pts sys tokens tokens.krb unlog unlog.krb aklog"
379 if [ x
"$DO_X" = x1
] ; then
380 # Don't print out every single 'ln -s'... that's kinda useless
381 : 'Symlinking commands and manpages into place...'
385 for f
in $BINLIST; do
386 ln -s "$USRBIN2TOOLS"/bin
/"$f" "$PKGROOT$USRBIN/$f"
388 for f
in $ETCLIST; do
389 ln -s "$USRSBIN2TOOLS"/etc
/"$f" "$PKGROOT$USRSBIN/$f"
392 for section
in man1 man5 man8
; do
393 for f
in $
(ls $PKGROOT/Library
/OpenAFS
/Tools
/man
/$section); do
395 if [ -L "$PKGROOT/Library/OpenAFS/Tools/man/$section/$f" ] ; then
396 # If this manpage is a symlink, just change where it's pointing,
397 # and rename the link; don't actually 'gzip' it.
398 link
=$
(readlink
"$PKGROOT/Library/OpenAFS/Tools/man/$section/$f")
399 rm -f "$PKGROOT/Library/OpenAFS/Tools/man/$section/$f"
400 ln -s "$link".gz
"$PKGROOT/Library/OpenAFS/Tools/man/$section/$f".gz
403 gzip -9 "$PKGROOT/Library/OpenAFS/Tools/man/$section/$f"
405 ln -s ..
/"$MANDIR2TOOLS"/man
/"$section/$f".gz \
406 "$PKGROOT$MANDIR/$section/$f".gz
410 if [ x
"$DO_X" = x1
] ; then
414 ln -s "$USRBIN2TOOLS"/bin
/kpasswd
"$PKGROOT$USRBIN"/kpasswd.afs
416 ln -s "$USRSBIN2TOOLS"/root.client
/usr
/vice
/etc
/afsd
"$PKGROOT$USRSBIN"/afsd
418 chown
-R root
${SEP}wheel
"$PKGROOT$PREFIX"
419 chmod -R og-w
"$PKGROOT$PREFIX"
422 if [ x
"$PASS2" = x1
]; then
427 rm -rf "$CURDIR"/OpenAFS-debug-extension.pkg
428 /usr
/bin
/pkgbuild
--root "$DPKGROOT" --id org.openafs.OpenAFS-debug.pkg \
429 --version '@PACKAGE_VERSION@' \
430 "$CURDIR"/OpenAFS-debug-extension.pkg
433 cp OpenAFS.post_install
"$PKGRES"/postinstall
434 cp OpenAFS.pre_upgrade
"$PKGRES"/preupgrade
435 cp OpenAFS.post_install
"$PKGRES"/postupgrade
436 cp csrvdbmerge.pl
"$PKGRES"
438 chmod a
+x
"$PKGRES"/csrvdbmerge.pl \
439 "$PKGRES"/postinstall \
440 "$PKGRES"/postupgrade \
443 cp CellServDB.list
"$PKGRES"
444 chown
-R root
${SEP}wheel
"$PKGRES"
446 rm -rf "$CURDIR"/OpenAFS-dist.pkg
447 /usr
/bin
/pkgbuild
--root "$PKGROOT" --id org.openafs.OpenAFS.pkg \
448 --version '@PACKAGE_VERSION@' \
449 --scripts "$PKGRES" "$CURDIR"/OpenAFS-dist.pkg
453 cp background.jpg
"$PKGRES"/background.jpg
454 cp License.rtf
"$PKGRES"
455 cp ReadMe.rtf.
"$majorvers" "$PKGRES"/ReadMe.rtf
456 chown
-R root
${SEP}wheel
"$PKGRES"
458 if [ $majorvers -ge 15 ] ; then
459 # For El Capitan and further, we have some extra information to tell
460 # the user at the end of the installation process.
461 cp conclusion.txt
"$PKGRES"/conclusion.txt
462 PRES_EXTRA
="<conclusion file=\"conclusion.txt\"/>"
465 # generate Distribution.xml from Distribution.xml.in -- nonstandard substs
466 sed -e "s/%%OSX_MAJOR_CUR%%/$THISREL/g" \
467 -e "s/%%OSX_MAJOR_NEXT%%/$(( $THISREL + 1 ))/g" \
468 -e "s,%%PRES_EXTRA%%,$PRES_EXTRA,g" \
469 -e "s/%%OPENAFS_VERSION%%/@PACKAGE_VERSION@/g" \
470 < Distribution.xml.
in > Distribution.xml
472 rm -rf "$CURDIR/prod"
474 mv "$CURDIR"/OpenAFS-dist.pkg
"$CURDIR"/OpenAFS-debug-extension.pkg
"$CURDIR"/prod
475 /usr
/bin
/productbuild
--distribution Distribution.xml
--resources "$PKGRES" \
476 --plugins "$PLUGINS" --package-path "$CURDIR"/prod
"$CURDIR"/OpenAFS.pkg
478 if [ x
"$INST_KEY" != x
] ; then
479 mv "$CURDIR"/OpenAFS.pkg
"$CURDIR"/OpenAFS-unsigned.pkg
480 productsign
--timestamp --sign "$INST_KEY" "$CURDIR"/OpenAFS-unsigned.pkg \
481 "$CURDIR"/OpenAFS.pkg
482 rm -f "$CURDIR"/OpenAFS-unsigned.pkg
486 rm -f "$CURDIR/TMP.dmg"
487 rm -rf "$CURDIR/OpenAFS-@PACKAGE_VERSION@-$RELNAME.dmg"
490 mv "$CURDIR"/OpenAFS.pkg
"$CURDIR"/dmg
491 cp "$RESSRC"/Uninstall
.14.15 "$CURDIR"/dmg
/Uninstall.
command
492 cp "$RESSRC"/DS_Store
"$CURDIR"/dmg
/.DS_Store
493 mkdir
"$CURDIR"/dmg
/.background
494 cp "$RESSRC"/afslogo.jpg
"$CURDIR"/dmg
/.background
496 if [ x
"$APP_KEY" != x
] ; then
497 codesign
--verbose --force --timestamp --sign "$APP_KEY" "$CURDIR"/dmg
/Uninstall.
command
500 hdiutil create
-srcfolder "$CURDIR"/dmg
-volname OpenAFS \
502 hdiutil convert
-format UDZO
"$CURDIR"/TMP.dmg \
503 -o "$CURDIR/OpenAFS-@PACKAGE_VERSION@-$RELNAME".dmg
506 echo "Created $CURDIR/OpenAFS-@PACKAGE_VERSION@-$RELNAME".dmg