]> err.no Git - sope/blob - maintenance/make-osxdmg.sh
started dmg builder
[sope] / maintenance / make-osxdmg.sh
1 #!/bin/sh
2 #
3 # make-osxdmg.sh
4 #
5 # Create a MacOSX dmg (disk image) for a given directory.
6 #
7
8 DMG_NAME="$1"
9 BIN_DIR="$2"
10 VOLUME_NAME="$3"
11
12 ORG_DIR="$PWD"
13
14 EXTRA_SIZE=4096
15
16
17 # ****************************** usage ********************************
18
19 function usage() {
20   cat <<_ACEOF
21 make-osxdmg.sh <dmgname> [dirname] [volumename]
22 _ACEOF
23 }
24
25
26 # ****************************** validate cmdline args ****************
27
28 function defaultArgs() {
29   if test "x${BIN_DIR}" = "x"; then
30     BIN_DIR="$PWD"
31   fi
32   if test "x${VOLUME_NAME}" = "x"; then
33     VOLUME_NAME="$DMG_NAME"
34   fi
35 }
36
37 function validateArgs() {
38   if test "x$DMG_NAME" = "x"; then
39     usage;
40     exit 1
41   fi
42 }
43
44
45 # ****************************** sizing *******************************
46
47 function calcSize() {
48   SIZE_KB=`du -sk ${BIN_DIR} | awk '{print $1}'`
49   SIZE_KB=`expr $SIZE_KB + ${EXTRA_SIZE}`
50 }
51
52
53 # ****************************** setup disk ***************************
54
55 function setupDisk() {
56   DST_IMG="$1"
57   
58   if test -e "${DST_IMG}"; then
59     echo "  deleting old dmg ..."
60     rm "${DST_IMG}"
61   fi
62   hdiutil create -size ${SIZE_KB}k ${DST_IMG} -layout NONE
63   
64   DISK=`hdid -nomount ${DST_IMG} | awk '{print $1}'`
65   echo "  disk (no mount): $DISK"
66   
67   newfs_hfs -v "${VOLUME_NAME}" "${DISK}"
68   ejectDisk;
69   
70   DISK=`hdid ${DST_IMG} | awk '{print $1}'`
71   echo "  disk: $DISK"
72 }
73
74 function ejectDisk() {
75   hdiutil eject "${DISK}"
76 }
77
78 function convertToReadOnlyCompressedImage() {
79   SRC_DMG="$1"
80   DST_DMG="$2"
81   # convert .dmg into read-only zlib (-9) compressed release version
82   hdiutil convert -format UDZO ${SRC_DMG} -o ${DST_DMG} -imagekey zlib-level=9
83 }
84
85 function internetEnableDiskImage() {
86   # internet-enable the release .dmg. for details see
87   # http://developer.apple.com/ue/files/iedi.html
88   hdiutil internet-enable -yes "$1"
89 }
90
91
92 # ****************************** running ******************************
93
94 defaultArgs;
95 validateArgs;
96
97 echo "Building MacOSX DMG ${DMG_NAME}.dmg for $BIN_DIR .."
98
99 calcSize;
100 echo "  size: ${SIZE_KB}K"
101
102 setupDisk "${DMG_NAME}.dmg"
103
104 echo -n "  coping content to disk .."
105 cd $BIN_DIR
106 gnutar cf - . | ( cd "/Volumes/${VOLUME_NAME}" ; gnutar xf - )
107 cd $ORG_DIR
108 echo ".. done."
109
110 # once again eject, to synchronize
111 ejectDisk;
112
113 REL_DMG="${DMG_NAME}-release.dmg"
114 convertToReadOnlyCompressedImage "${DMG_NAME}.dmg" "${REL_DMG}"
115 internetEnableDiskImage "${REL_DMG}"