Root/
| |
---|---|
Source at commit 2605 created 9 years 4 months ago. By ifabio, Temp disabled feature introduced in commit 2562 (Added ability to auto-select last booted partition as the boot volume), cause AllocateKernelMemory error. | |
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 | ␉# The above line caused problems with svn reporting changes to all␊ |
91 | ␉# directories in the Chameleon source folder that exist before compiling␊ |
92 | ␉# svn status would show the following:␊ |
93 | ␉# ~ Chameleon.xcodeproj␊ |
94 | ␉# ~ artwork␊ |
95 | ␉# ~ i386␊ |
96 | ␉# ~ package␊ |
97 | ␉# ~ doc␊ |
98 | ␉# I've changed the code to this for now to get round the problem.␊ |
99 | ␉# Hopefully someone else can find out why it was happenening.␊ |
100 | ␉svnFilesToRemove=($( find "${SRC_FOLDER}" -type d -name '.svn'))␊ |
101 | ␉for (( i = 0 ; i < ${#svnFilesToRemove[@]} ; i++ ))␊ |
102 | ␉do␊ |
103 | ␉␉rm -rf ${svnFilesToRemove[$i]}␊ |
104 | ␉done␊ |
105 | ␊ |
106 | # =======================================␊ |
107 | # 4) Find the size of the folder contents␊ |
108 | # =======================================␊ |
109 | ␊ |
110 | ␉FOLDER_SIZE=`/usr/bin/du -s "${SRC_FOLDER}" | sed s/[^0-9].*//`␊ |
111 | ␊ |
112 | # =====================================================␊ |
113 | # 4) Allow for partition table and other overhead (10%)␊ |
114 | # =====================================================␊ |
115 | ␊ |
116 | ␉IMAGE_SIZE=$(($FOLDER_SIZE * 110/100))␊ |
117 | ␊ |
118 | # ============================================␊ |
119 | # 5) Minimum size for an HFS+ partition is 4Mb␊ |
120 | # ============================================␊ |
121 | ␊ |
122 | ␉[ $IMAGE_SIZE -lt 19960 ] && IMAGE_SIZE=19960 # [ $IMAGE_SIZE -lt 8300 ] && IMAGE_SIZE=8300␊ |
123 | ␊ |
124 | # =================================================================␊ |
125 | # 6) Make sure NEXT_ROOT is not set (if we're building with an SDK)␊ |
126 | # =================================================================␊ |
127 | ␊ |
128 | ␉unset NEXT_ROOT␊ |
129 | ␉echo "␉Source folder size = $FOLDER_SIZE"␊ |
130 | ␉echo "␉DMG image size (+10%) = $IMAGE_SIZE"␊ |
131 | ␉echo " "␊ |
132 | ␊ |
133 | # =======================================␊ |
134 | # 7) Convert the DMG template into RW-DMG␊ |
135 | # =======================================␊ |
136 | ␊ |
137 | ␉echo "␉[hdutil] Creating disk image "␊ |
138 | ␉test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"␊ |
139 | ␊ |
140 | ␉hdiutil convert $TEMPLATE_DMG -format UDRW -o "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
141 | ␉hdiutil resize -limits "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
142 | ␉hdiutil resize -size 15m "${DMG_TEMP_NAME}" >/dev/null 2>&1␊ |
143 | ␉echo " "␊ |
144 | ␊ |
145 | # ===========␊ |
146 | # 8) Mount it␊ |
147 | # ===========␊ |
148 | ␊ |
149 | ␉echo "␉[hdutil] Mounting disk image "␊ |
150 | ␉MOUNT_DIR=/Volumes/$VOLUME_NAME␊ |
151 | ␉DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}') >/dev/null 2>&1␊ |
152 | ␊ |
153 | ␉echo "␉Device name:␉$DEV_NAME"␊ |
154 | ␉echo "␉Mount directory: $MOUNT_DIR"␊ |
155 | ␉echo " "␊ |
156 | ␊ |
157 | # =====================================␊ |
158 | # 9) Make sure it's not world writeable␊ |
159 | # =====================================␊ |
160 | ␊ |
161 | ␉mv ${SRC_FOLDER}/${CHAMELEON_PACKAGE_NAME}.pkg ${MOUNT_DIR}/${VOLUME_NAME}.pkg␊ |
162 | ␉cp -R ${SRC_FOLDER}/Documentation ${MOUNT_DIR}/␊ |
163 | ␉cp -R ${SRC_FOLDER}/PrefPanel ${MOUNT_DIR}/␊ |
164 | ␉cp -R ${SRC_FOLDER}/i386 ${MOUNT_DIR}/␊ |
165 | ␉cp -R ${SRC_FOLDER}/Themes ${MOUNT_DIR}/␊ |
166 | ␊ |
167 | ␉echo "␉[chmod] Fixing permission for \"${MOUNT_DIR}\""␊ |
168 | ␉chmod -Rf go-w "${MOUNT_DIR}" || true␊ |
169 | ␉chmod -f a-w "${MOUNT_DIR}"/.DS_Store || true␊ |
170 | ␉echo "␉Done fixing permissions."␊ |
171 | ␉echo " "␊ |
172 | ␊ |
173 | # =============================================␊ |
174 | # 10) Make the top window open itself on mount:␊ |
175 | # =============================================␊ |
176 | ␊ |
177 | ␉echo "␉[openUp] Setting auto open flag"␊ |
178 | ␉if [ -x ${OPENUP_TOOL} ]; then␊ |
179 | ␉␉echo "␉Applying openUp..."␊ |
180 | ␉␉${OPENUP_TOOL} "${MOUNT_DIR}" >/dev/null 2>&1␊ |
181 | ␉fi␊ |
182 | ␉echo " "␊ |
183 | ␊ |
184 | # ===========␊ |
185 | # 11) Unmount␊ |
186 | # ===========␊ |
187 | ␊ |
188 | ␉echo "␉[hdutil] Unmounting disk image"␊ |
189 | ␉hdiutil detach "${DEV_NAME}" >/dev/null 2>&1␊ |
190 | ␉echo " "␊ |
191 | ␊ |
192 | # ==================␊ |
193 | # 12) Compress image␊ |
194 | # ==================␊ |
195 | ␊ |
196 | ␉test -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" && rm -f "${DMG_ROOT}/${VOLUME_NAME}.dmg" ␊ |
197 | ␉echo "␉[hdutil] Compressing disk image"␊ |
198 | ␉hdiutil convert ${DMG_TEMP_NAME} -format UDZO -imagekey zlib-level=9 -o ${DMG_ROOT}/${VOLUME_NAME} >/dev/null 2>&1␊ |
199 | ␉rm -f "${DMG_TEMP_NAME}"␊ |
200 | ␉echo " "␊ |
201 | ␊ |
202 | # =========================␊ |
203 | # 13) Adding EULA resources␊ |
204 | # =========================␊ |
205 | ␊ |
206 | if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then␊ |
207 | ␉echo "␉[ResMerger] Adding EULA resources"␊ |
208 | hdiutil unflatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1␊ |
209 | ResMerger -a ${EULA_RSRC} -o ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
210 | hdiutil flatten ${DMG_ROOT}/${VOLUME_NAME}.dmg >/dev/null 2>&1␊ |
211 | fi␊ |
212 | ␊ |
213 | # =======================␊ |
214 | # 14) Adding Icon to .dmg␊ |
215 | # =======================␊ |
216 | ␊ |
217 | ␉ditto -xk ${pkgroot}/Icons/dmg.zip "${pkgroot}/Icons"␊ |
218 | ␉DeRez -only icns ${pkgroot}/Icons/Icons/dmg.icns > tempicns.rsrc␊ |
219 | ␉Rez -append tempicns.rsrc -o ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
220 | ␉SetFile -a C ${DMG_ROOT}/${VOLUME_NAME}.dmg␊ |
221 | ␉rm -f tempicns.rsrc␊ |
222 | ␉rm -rf "${pkgroot}/Icons/Icons"␊ |
223 | ␉rm -R ${SRC_FOLDER} ␊ |
224 | ␊ |
225 | # ===␊ |
226 | # END␊ |
227 | # ===␊ |
228 | ␊ |
229 | ␉echo "␉===================="␊ |
230 | ␉echo "␉Finish $VOLUME_NAME.dmg"␊ |
231 | ␉echo "␉===================="␊ |
232 | ␉echo ""␊ |
233 | #-----␊ |
234 | ␊ |
235 | exit 0␊ |
236 |