Root/
| |
---|---|
Source at commit 2381 created 10 years 21 days ago. By ifabio, Apply patch: (Credits to Thomas Jansen aka tja) - Reading options from all devices during boot. The options for the boot menu are only read from the devices rd(0,0) or bt(0,0). Consequently, boot menu options (e.g. "Quiet Boot", "Timeout", etc.) in plists on other devices (like most users have) are ignored. This patch extends the list of paths to search for the options plist on all devices that can be found. | |
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 |