1 | #!/bin/bash␊ |
2 | ␊ |
3 | # $1 Path to store built dmg␊ |
4 | ␊ |
5 | pkgroot="${0%/*}"␊ |
6 | SYM_ROOT="${1%/*}"␊ |
7 | DMG_ROOT=$SYM_ROOT␊ |
8 | ␊ |
9 | OPENUP_TOOL=${1%/*}/i386/openUp␊ |
10 | ␊ |
11 | SRC_FOLDER=${1%/*}/source␊ |
12 | VOLUME_NAME="Chameleon"␊ |
13 | TEMP_NAME="rw.dmg"␊ |
14 | DMG_TEMP_NAME=${DMG_ROOT}/${TEMP_NAME}␊ |
15 | TEMPLATE_DMG=${pkgroot}/dmg/ro.dmg␊ |
16 | EULA_RSRC=${pkgroot}/dmg/SLAResources␊ |
17 | ␊ |
18 | ␊ |
19 | # =============================␊ |
20 | # Setting color for text output ␊ |
21 | # =============================␊ |
22 | ␊ |
23 | COL_BLACK="\x1b[30;01m"␊ |
24 | COL_RED="\x1b[31;01m"␊ |
25 | COL_GREEN="\x1b[32;01m"␊ |
26 | COL_YELLOW="\x1b[33;01m"␊ |
27 | COL_MAGENTA="\x1b[35;01m"␊ |
28 | COL_CYAN="\x1b[36;01m"␊ |
29 | COL_WHITE="\x1b[37;01m"␊ |
30 | COL_BLUE="\x1b[34;01m"␊ |
31 | COL_RESET="\x1b[39;49;00m"␊ |
32 | ␊ |
33 | # ======================␊ |
34 | # Setting Chameleon info␊ |
35 | # ======================␊ |
36 | ␊ |
37 | version=$( cat version )␊ |
38 | stage=${version##*-}␊ |
39 | revision=$( grep I386BOOT_CHAMELEONREVISION vers.h | awk '{ print $3 }' | tr -d '\"' )␊ |
40 | builddate=$( grep I386BOOT_BUILDDATE vers.h | awk '{ print $3,$4 }' | tr -d '\"' )␊ |
41 | timestamp=$( date -j -f "%Y-%m-%d %H:%M:%S" "${builddate}" "+%s" )␊ |
42 | CHAMELEON_PACKAGE_NAME=${VOLUME_NAME}-${version}-r${revision}␊ |
43 | ␊ |
44 | # =========================␊ |
45 | # Start of building process␊ |
46 | # =========================␊ |
47 | ␊ |
48 | echo ""␉␊ |
49 | echo -e $COL_BLACK"␉----------------------"$COL_RESET␊ |
50 | echo -e $COL_BLACK"␉Building $VOLUME_NAME DMG"$COL_RESET␊ |
51 | echo -e $COL_BLACK"␉----------------------"$COL_RESET␊ |
52 | echo ""␊ |
53 | ␊ |
54 | # =================================␊ |
55 | # 1) Clean previous builded contents␊ |
56 | # =================================␊ |
57 | ␊ |
58 | ␉if [ -x ${SRC_FOLDER} ]; then␊ |
59 | ␉␉echo "␉Deleting previous existing source folder/content "␊ |
60 | ␉␉rm -R ${SRC_FOLDER} ␊ |
61 | ␉␉rm -f ${DMG_TEMP_NAME}␊ |
62 | ␉fi␊ |
63 | ␊ |
64 | # ===========================␊ |
65 | # 2) Create the source folder␊ |
66 | # ===========================␊ |
67 | ␊ |
68 | ␉echo "␉[mkdir] Creating source folder "␊ |
69 | ␉mkdir "${SRC_FOLDER}"␊ |
70 | ␊ |
71 | # ==================================␊ |
72 | # 3) Copy content into source folder␊ |
73 | # ==================================␊ |
74 | ␊ |
75 | ␉ditto -xk "${pkgroot}/Icons/i386.zip" "${SRC_FOLDER}/"␊ |
76 | ␉ditto -xk "${pkgroot}/Icons/doc.zip" "${SRC_FOLDER}/"␊ |
77 | ␉ditto -xk "${pkgroot}/Icons/pan.zip" "${SRC_FOLDER}/"␊ |
78 | ␉ditto -xk "${pkgroot}/Icons/tm.zip" "${SRC_FOLDER}/"␊ |
79 | ␉␊ |
80 | ␉#mv ${SYM_ROOT}/${VOLUME_NAME}.pkg ${SRC_FOLDER}/${VOLUME_NAME}.pkg␊ |
81 | ␉cp -r ${SYM_ROOT}/${CHAMELEON_PACKAGE_NAME}.pkg ${SRC_FOLDER}/${CHAMELEON_PACKAGE_NAME}.pkg␊ |
82 | ␉#cp -r ${pkgroot}/doc/* ${SRC_FOLDER}/Documentation/␊ |
83 | ␉cp -r ${SYM_ROOT%/*}/doc/BootHelp.txt ${SRC_FOLDER}/Documentation/␊ |
84 | ␉cp -r ${SYM_ROOT%/*}/doc/Users_Guide0.5.pdf ${SRC_FOLDER}/Documentation/␊ |
85 | ␉cp -r ${pkgroot}/Configuration/PrefPanel/* ${SRC_FOLDER}/PrefPanel/␊ |
86 | ␉cp -r ${SYM_ROOT}/i386/* ${SRC_FOLDER}/i386/␊ |
87 | ␉cp -r ${SYM_ROOT%/*}/artwork/themes/* ${SRC_FOLDER}/Themes/␊ |
88 | ␉rm -rf ${SRC_FOLDER}`find . -type d -name .svn`␊ |
89 | ␊ |
90 | # =======================================␊ |
91 | # 4) Find the size of the folder contents␊ |
92 | # =======================================␊ |
93 | ␊ |
94 | ␉FOLDER_SIZE=`/usr/bin/du -s "${SRC_FOLDER}" | sed s/[^0-9].*//`␊ |
95 | ␊ |
96 | # =====================================================␊ |
97 | # 4) Allow for partition table and other overhead (10%)␊ |
98 | # =====================================================␊ |
99 | ␊ |
100 | ␉IMAGE_SIZE=$(($FOLDER_SIZE * 110/100))␊ |
101 | ␊ |
102 | # ============================================␊ |
103 | # 5) Minimum size for an HFS+ partition is 4Mb␊ |
104 | # ============================================␊ |
105 | ␊ |
106 | ␉[ $IMAGE_SIZE -lt 19960 ] && IMAGE_SIZE=19960 # [ $IMAGE_SIZE -lt 8300 ] && IMAGE_SIZE=8300␊ |
107 | ␊ |
108 | # =================================================================␊ |
109 | # 6) Make sure NEXT_ROOT is not set (if we're building with an SDK)␊ |
110 | # =================================================================␊ |
111 | ␊ |
112 | ␉unset NEXT_ROOT␊ |
113 | ␉echo "␉Source folder size = $FOLDER_SIZE"␊ |
114 | ␉echo "␉DMG image size (+10%) = $IMAGE_SIZE"␊ |
115 | ␉echo " "␊ |
116 | ␊ |
117 | # =======================================␊ |
118 | # 7) Convert the DMG template into RW-DMG␊ |
119 | # =======================================␊ |
120 | ␊ |
121 | ␉echo "␉[hdutil] Creating disk image "␊ |
122 | ␉test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"␊ |
123 | ␊ |
124 | ␉hdiutil convert $TEMPLATE_DMG -format UDRW -o "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
125 | ␉hdiutil resize -limits "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
126 | ␉hdiutil resize -size 15m "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
127 | ␉echo " "␊ |
128 | ␊ |
129 | # ===========␊ |
130 | # 8) Mount it␊ |
131 | # ===========␊ |
132 | ␊ |
133 | ␉echo "␉[hdutil] Mounting disk image "␊ |
134 | ␉MOUNT_DIR=/Volumes/$VOLUME_NAME␊ |
135 | ␉DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}') >/dev/null 2>&1␊ |
136 | ␊ |
137 | ␉echo "␉Device name:␉$DEV_NAME"␊ |
138 | ␉echo "␉Mount directory: $MOUNT_DIR"␊ |
139 | ␉echo " "␊ |
140 | ␊ |
141 | # =====================================␊ |
142 | # 9) Make sure it's not world writeable␊ |
143 | # =====================================␊ |
144 | ␊ |
145 | ␉mv ${SRC_FOLDER}/${CHAMELEON_PACKAGE_NAME}.pkg ${MOUNT_DIR}/${VOLUME_NAME}.pkg␊ |
146 | ␉cp -R ${SRC_FOLDER}/Documentation ${MOUNT_DIR}/␊ |
147 | ␉cp -R ${SRC_FOLDER}/PrefPanel ${MOUNT_DIR}/␊ |
148 | ␉cp -R ${SRC_FOLDER}/i386 ${MOUNT_DIR}/␊ |
149 | ␉cp -R ${SRC_FOLDER}/Themes ${MOUNT_DIR}/␊ |
150 | ␊ |
151 | ␉echo "␉[chmod] Fixing permission for \"${MOUNT_DIR}\""␊ |
152 | ␉chmod -Rf go-w "${MOUNT_DIR}" || true␊ |
153 | ␉chmod -f a-w "${MOUNT_DIR}"/.DS_Store || true␊ |
154 | ␉echo "␉Done fixing permissions."␊ |
155 | ␉echo " "␊ |
156 | ␊ |
157 | # =============================================␊ |
158 | # 10) Make the top window open itself on mount:␊ |
159 | # =============================================␊ |
160 | ␊ |
161 | ␉echo "␉[openUp] Setting auto open flag"␊ |
162 | ␉if [ -x ${OPENUP_TOOL} ]; then␊ |
163 | ␉␉echo "␉Applying openUp..."␊ |
164 | ␉␉${OPENUP_TOOL} "${MOUNT_DIR}" >/dev/null 2>&1␊ |
165 | ␉fi␊ |
166 | ␉echo " "␊ |
167 | ␊ |
168 | # ===========␊ |
169 | # 11) Unmount␊ |
170 | # ===========␊ |
171 | ␊ |
172 | ␉echo "␉[hdutil] Unmounting disk image"␊ |
173 | ␉hdiutil detach "${DEV_NAME}" >/dev/null 2>&1␊ |
174 | ␉echo " "␊ |
175 | ␊ |
176 | # ==================␊ |
177 | # 12) Compress image␊ |
178 | # ==================␊ |
179 | ␊ |
180 | ␉test -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" && rm -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" ␊ |
181 | ␉echo "␉[hdutil] Compressing disk image"␊ |
182 | ␉hdiutil convert ${DMG_TEMP_NAME} -format UDZO -imagekey zlib-level=9 -o ${DMG_ROOT}/${VOLUME_NAME} >/dev/null 2>&1␊ |
183 | ␉rm -f "${DMG_TEMP_NAME}"␊ |
184 | ␉echo " "␊ |
185 | ␊ |
186 | # =========================␊ |
187 | # 13) Adding EULA resources␊ |
188 | # =========================␊ |
189 | ␊ |
190 | if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then␊ |
191 | ␉echo "␉[ResMerger] Adding EULA resources"␊ |
192 | hdiutil unflatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1␊ |
193 | ResMerger -a ${EULA_RSRC} -o ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
194 | hdiutil flatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1␊ |
195 | fi␊ |
196 | ␊ |
197 | # =======================␊ |
198 | # 14) Adding Icon to .dmg␊ |
199 | # =======================␊ |
200 | ␊ |
201 | ␉ditto -xk ${pkgroot}/Icons/dmg.zip "${pkgroot}/Icons"␊ |
202 | ␉DeRez -only icns ${pkgroot}/Icons/Icons/dmg.icns > tempicns.rsrc␊ |
203 | ␉Rez -append tempicns.rsrc -o ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
204 | ␉SetFile -a C ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
205 | ␉rm -f tempicns.rsrc␊ |
206 | ␉rm -rf "${pkgroot}/Icons/Icons"␊ |
207 | ␉rm -R ${SRC_FOLDER} ␊ |
208 | ␊ |
209 | # ===␊ |
210 | # END␊ |
211 | # ===␊ |
212 | ␊ |
213 | ␉echo "␉===================="␊ |
214 | ␉echo "␉Finish $VOLUME_NAME.dmg"␊ |
215 | ␉echo "␉===================="␊ |
216 | ␉echo ""␊ |
217 | #-----␊ |
218 | exit 0␊ |
219 | |