Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/package/slimpkg.sh

  • Property svn:executable set to *
Source at commit 1808 created 12 years 3 months ago.
By blackosx, Revise layout of package installer 'Welcome' file so it looks cleaner. Change the copyright notice to begin from 2009 as seen in the Chameleon 2.0 r431 installer. Should this date be set earlier?
1#!/bin/bash
2
3# $1 Path to store built package
4
5packagesidentity="org.chameleon"
6
7packagename="Chameleon"
8
9pkgroot="${0%/*}"
10
11COL_BLACK="\x1b[30;01m"
12COL_RED="\x1b[31;01m"
13COL_GREEN="\x1b[32;01m"
14COL_YELLOW="\x1b[33;01m"
15COL_MAGENTA="\x1b[35;01m"
16COL_CYAN="\x1b[36;01m"
17COL_WHITE="\x1b[37;01m"
18COL_BLUE="\x1b[34;01m"
19COL_RESET="\x1b[39;49;00m"
20
21#version=$( grep I386BOOT_CHAMELEONVERSION sym/i386/vers.h | awk '{ print $3 }' | tr -d '\"' )
22version=$( cat version )
23stage=${version##*-}
24revision=$( grep I386BOOT_CHAMELEONREVISION sym/i386/vers.h | awk '{ print $3 }' | tr -d '\"' )
25builddate=$( grep I386BOOT_BUILDDATE sym/i386/vers.h | awk '{ print $3,$4 }' | tr -d '\"' )
26timestamp=$( date -j -f "%Y-%m-%d %H:%M:%S" "${builddate}" "+%s" )
27
28# =================
29
30develop=" Crazor, Dense, fassl, fxtentacle, iNDi, JrCs, Kabyl, kaitek, mackerintel, mercurysquad, munky, Slice, meklort, mozodojo, rekursor, Turbo, cparm, valv & zef "
31
32credits=" andyvand, asereBLN, Azimut, bumby, cosmo1t, dfe, Galaxy, kalyway, Krazubu, MasterChief, netkas, sckevyn, smith@@, THeKiNG, DutchHockeyPro & Andy"
33
34pkgdev=" blackosx, ErmaC , scrax"
35
36# =================
37
38distributioncount=0
39xmlindent=0
40
41indent[0]="\t"
42indent[1]="\t\t"
43indent[2]="\t\t\t"
44indent[3]="\t\t\t\t"
45
46main ()
47{
48
49# clean up the destination path
50
51rm -R -f "${1}"
52echo ""
53echo -e $COL_BLACK"---------------------"$COL_RESET
54echo -e $COL_BLACK"Building Slim Package"$COL_RESET
55echo -e $COL_BLACK"---------------------"$COL_RESET
56echo ""
57
58outline[$((outlinecount++))]="${indent[$xmlindent]}<choices-outline>"
59
60# build core package
61echo "================= Core ================="
62((xmlindent++))
63packagesidentity="org.chameleon.core"
64mkdir -p ${1}/Core/Root/usr/sbin
65mkdir -p ${1}/Core/Root/usr/local/bin
66mkdir -p ${1}/Core/Root/usr/standalone/i386
67# if [ "$(ls -A "${1%/*}/i386/modules")" ]; then
68# echo "Modules found."
69# mkdir -p ${1}/Core/Root/usr/standalone/i386/modules
70# cp -R ${1%/*}/i386/modules ${1}/Core/Root/usr/standalone/i386
71# else
72# echo "No found modules into dir module"
73# fi
74ditto --noextattr --noqtn ${1%/*}/i386/boot ${1}/Core/Root/usr/standalone/i386
75ditto --noextattr --noqtn ${1%/*}/i386/boot0 ${1}/Core/Root/usr/standalone/i386
76ditto --noextattr --noqtn ${1%/*}/i386/boot0md ${1}/Core/Root/usr/standalone/i386
77#ditto --noextattr --noqtn ${1%/*}/i386/boot0hf ${1}/Core/Root/usr/standalone/i386
78ditto --noextattr --noqtn ${1%/*}/i386/boot1f32 ${1}/Core/Root/usr/standalone/i386
79ditto --noextattr --noqtn ${1%/*}/i386/boot1h ${1}/Core/Root/usr/standalone/i386
80ditto --noextattr --noqtn ${1%/*}/i386/boot1he ${1}/Core/Root/usr/standalone/i386
81ditto --noextattr --noqtn ${1%/*}/i386/boot1hp ${1}/Core/Root/usr/standalone/i386
82ditto --noextattr --noqtn ${1%/*}/i386/cdboot ${1}/Core/Root/usr/standalone/i386
83ditto --noextattr --noqtn ${1%/*}/i386/chain0 ${1}/Core/Root/usr/standalone/i386
84# fixperms "${1}/Core/Root/"
85ditto --noextattr --noqtn ${1%/*}/i386/fdisk440 ${1}/Core/Root/usr/sbin
86ditto --noextattr --noqtn ${1%/*}/i386/bdmesg ${1}/Core/Root/usr/sbin
87local coresize=$( du -hkc "${1}/Core/Root" | tail -n1 | awk {'print $1'} )
88echo "[BUILD] i386 "
89buildpackage "${1}/Core" "/" "0" "start_visible=\"false\" start_selected=\"true\"" >/dev/null 2>&1
90
91# build Chameleon package
92echo "================= Chameleon ================="
93outline[$((outlinecount++))]="${indent[$xmlindent]}\t<line choice=\"Chameleon\">"
94choices[$((choicescount++))]="<choice\n\tid=\"Chameleon\"\n\ttitle=\"Chameleon_title\"\n\tdescription=\"Chameleon_description\"\n>\n</choice>\n"
95
96# build standard package
97mkdir -p ${1}/Standard/Root
98mkdir -p ${1}/Standard/Scripts/Tools
99cp -f ${pkgroot}/Scripts/Standard/* ${1}/Standard/Scripts
100# ditto --arch i386 `which SetFile` ${1}/Standard/Scripts/Tools/SetFile
101echo "[BUILD] Standard "
102buildpackage "${1}/Standard" "/" "${coresize}" "start_enabled=\"true\" start_selected=\"upgrade_allowed()\" selected=\"exclusive(choices['EFI']) &amp;&amp; exclusive(choices['noboot'])\"" >/dev/null 2>&1
103# End build standard package
104
105# build efi package
106mkdir -p ${1}/EFI/Root
107mkdir -p ${1}/EFI/Scripts/Tools
108cp -f ${pkgroot}/Scripts/EFI/* ${1}/EFI/Scripts
109# ditto --arch i386 `which SetFile` ${1}/EFI/Scripts/Tools/SetFile
110echo "[BUILD] EFI "
111buildpackage "${1}/EFI" "/" "${coresize}" "start_visible=\"systemHasGPT()\" start_selected=\"false\" selected=\"exclusive(choices['Standard']) &amp;&amp; exclusive(choices['noboot'])\"" >/dev/null 2>&1
112# End build efi package
113
114# build reset choice package
115mkdir -p ${1}/noboot/Root
116echo "[BUILD] Reset choice "
117buildpackage "${1}/noboot" "/tmpcham" "" "start_visible=\"true\" start_selected=\"false\" selected=\"exclusive(choices['Standard']) &amp;&amp; exclusive(choices['EFI'])\"" >/dev/null 2>&1
118# End build reset choice package
119
120# build Modules package
121 echo "================= Modules ================="
122 ###############################
123 # AMDGraphicsEnabler.dylib #
124 # ATiGraphicsEnabler.dylib #
125 # IntelGraphicsEnabler.dylib #
126 # klibc.dylib #
127 # NVIDIAGraphicsEnabler.dylib #
128 # Resolution.dylib #
129 # uClibcxx.dylib #
130 ###############################
131 if [ "$(ls -A "${1%/*}/i386/modules")" ]; then
132 {
133 outline[$((outlinecount++))]="${indent[$xmlindent]}\t<line choice=\"Module\">"
134 choices[$((choicescount++))]="<choice\n\tid=\"Module\"\n\ttitle=\"Module_title\"\n\tdescription=\"Module_description\"\n>\n</choice>\n"
135 ((xmlindent++))
136 packagesidentity="org.chameleon.module"
137# -
138 if [ -e ${1%/*}/i386/modules/AMDGraphicsEnabler.dylib ]; then
139 {
140 mkdir -p ${1}/AMDGraphicsEnabler/Root
141 ditto --noextattr --noqtn ${1%/*}/i386/modules/AMDGraphicsEnabler.dylib ${1}/AMDGraphicsEnabler/Root
142 echo "[BUILD] AMDGraphicsEnabler "
143 buildpackage "${1}/AMDGraphicsEnabler" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
144 }
145 fi
146# -
147 if [ -e ${1%/*}/i386/modules/ATiGraphicsEnabler.dylib ]; then
148 {
149 mkdir -p ${1}/ATiGraphicsEnabler/Root
150 ditto --noextattr --noqtn ${1%/*}/i386/modules/ATiGraphicsEnabler.dylib ${1}/ATiGraphicsEnabler/Root
151 echo "[BUILD] ATiGraphicsEnabler "
152 buildpackage "${1}/ATiGraphicsEnabler" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
153 }
154 fi
155# -
156 if [ -e ${1%/*}/i386/modules/IntelGraphicsEnabler.dylib ]; then
157 {
158 mkdir -p ${1}/IntelGraphicsEnabler/Root
159 ditto --noextattr --noqtn ${1%/*}/i386/modules/IntelGraphicsEnabler.dylib ${1}/IntelGraphicsEnabler/Root
160 echo "[BUILD] IntelGraphicsEnabler "
161 buildpackage "${1}/IntelGraphicsEnabler" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
162 }
163 fi
164# -
165 if [ -e ${1%/*}/i386/modules/klibc.dylib ]; then
166 {
167 mkdir -p ${1}/klibc/Root
168 ditto --noextattr --noqtn ${1%/*}/i386/modules/klibc.dylib ${1}/klibc/Root
169 echo "[BUILD] klibc "
170 buildpackage "${1}/klibc" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
171 }
172 fi
173# -
174 if [ -e ${1%/*}/i386/modules/NVIDIAGraphicsEnabler.dylib ]; then
175 {
176 mkdir -p ${1}/NVIDIAGraphicsEnabler/Root
177 ditto --noextattr --noqtn ${1%/*}/i386/modules/NVIDIAGraphicsEnabler.dylib ${1}/NVIDIAGraphicsEnabler/Root
178 echo "[BUILD] NVIDIAGraphicsEnabler "
179 buildpackage "${1}/NVIDIAGraphicsEnabler" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
180 }
181 fi
182# -
183 if [ -e ${1%/*}/i386/modules/Resolution.dylib ]; then
184 {
185 mkdir -p ${1}/AutoReso/Root
186 ditto --noextattr --noqtn ${1%/*}/i386/modules/Resolution.dylib ${1}/AutoReso/Root
187 echo "[BUILD] Resolution "
188 buildpackage "${1}/AutoReso" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
189 }
190 fi
191# -
192 if [ -e ${1%/*}/i386/modules/uClibcxx.dylib ]; then
193 {
194 mkdir -p ${1}/uClibc/Root
195 ditto --noextattr --noqtn ${1%/*}/i386/modules/uClibcxx.dylib ${1}/uClibc/Root
196 ditto --noextattr --noqtn ${1%/*}/i386/modules/klibc.dylib ${1}/uClibc/Root
197 echo "[BUILD] uClibc++ "
198 buildpackage "${1}/uClibc" "/Extra/modules" "" "start_selected=\"false\"" >/dev/null 2>&1
199 }
200 fi
201 ((xmlindent--))
202 outline[$((outlinecount++))]="${indent[$xmlindent]}\t</line>"
203 }
204 else
205 {
206 echo " -= no modules to include =-"
207 }
208 fi
209# End build Modules packages
210 ((xmlindent--))
211 outline[$((outlinecount++))]="${indent[$xmlindent]}\t</line>"
212# End build Chameleon package
213
214# build post install package
215echo "================= Post ================="
216mkdir -p ${1}/Post/Root
217mkdir -p ${1}/Post/Scripts
218cp -f ${pkgroot}/Scripts/Post/* ${1}/Post/Scripts
219echo "[BUILD] Post "
220buildpackage "${1}/Post" "/" "" "start_visible=\"false\" start_selected=\"true\"" >/dev/null 2>&1
221outline[$((outlinecount++))]="${indent[$xmlindent]}</choices-outline>"
222
223# build meta package
224
225makedistribution "${1}" "${2}" "${3}" "${4}" "${5}"
226
227# clean up
228
229rm -R -f "${1}"
230
231}
232
233fixperms ()
234{
235# $1 path
236find "${1}" -type f -exec chmod 644 {} \;
237find "${1}" -type d -exec chmod 755 {} \;
238chown -R 0:0 "${1}"
239}
240
241buildpackage ()
242{
243# $1 Path to package to build containing Root and or Scripts
244# $2 Install Location
245# $3 Size
246# $4 Options
247
248if [ -d "${1}/Root" ] && [ "${1}/Scripts" ]; then
249
250local packagename="${1##*/}"
251local identifier=$( echo ${packagesidentity}.${packagename//_/.} | tr [:upper:] [:lower:] )
252find "${1}" -name '.DS_Store' -delete
253local filecount=$( find "${1}/Root" | wc -l )
254if [ "${3}" ]; then
255local installedsize="${3}"
256else
257local installedsize=$( du -hkc "${1}/Root" | tail -n1 | awk {'print $1'} )
258fi
259local header="<?xml version=\"1.0\"?>\n<pkg-info format-version=\"2\" "
260
261#[ "${3}" == "relocatable" ] && header+="relocatable=\"true\" "
262
263header+="identifier=\"${identifier}\" "
264header+="version=\"${version}\" "
265
266[ "${2}" != "relocatable" ] && header+="install-location=\"${2}\" "
267
268header+="auth=\"root\">\n"
269header+="\t<payload installKBytes=\"${installedsize##* }\" numberOfFiles=\"${filecount##* }\"/>\n"
270rm -R -f "${1}/Temp"
271
272[ -d "${1}/Temp" ] || mkdir -m 777 "${1}/Temp"
273[ -d "${1}/Root" ] && mkbom "${1}/Root" "${1}/Temp/Bom"
274
275if [ -d "${1}/Scripts" ]; then
276header+="\t<scripts>\n"
277for script in $( find "${1}/Scripts" -type f \( -name 'pre*' -or -name 'post*' \) )
278do
279header+="\t\t<${script##*/} file=\"./${script##*/}\"/>\n"
280done
281header+="\t</scripts>\n"
282chown -R 0:0 "${1}/Scripts"
283pushd "${1}/Scripts" >/dev/null
284find . -print | cpio -o -z -H cpio > "../Temp/Scripts"
285popd >/dev/null
286fi
287
288header+="</pkg-info>"
289echo -e "${header}" > "${1}/Temp/PackageInfo"
290pushd "${1}/Root" >/dev/null
291find . -print | cpio -o -z -H cpio > "../Temp/Payload"
292popd >/dev/null
293pushd "${1}/Temp" >/dev/null
294
295xar -c -f "${1%/*}/${packagename// /}.pkg" --compression none .
296
297popd >/dev/null
298
299outline[$((outlinecount++))]="${indent[$xmlindent]}\t<line choice=\"${packagename// /}\"/>"
300
301if [ "${4}" ]; then
302local choiceoptions="${indent[$xmlindent]}${4}\n"
303fi
304choices[$((choicescount++))]="<choice\n\tid=\"${packagename// /}\"\n\ttitle=\"${packagename}_title\"\n\tdescription=\"${packagename}_description\"\n${choiceoptions}>\n\t<pkg-ref id=\"${identifier}\" installKBytes='${installedsize}' version='${version}.0.0.${timestamp}' auth='root'>#${packagename// /}.pkg</pkg-ref>\n</choice>\n"
305
306rm -R -f "${1}"
307fi
308}
309
310makedistribution ()
311{
312rm -f "${1%/*}/${packagename// /}"*.pkg
313
314find "${1}" -type f -name '*.pkg' -depth 1 | while read component
315do
316mkdir -p "${1}/${packagename}/${component##*/}"
317pushd "${1}/${packagename}/${component##*/}" >/dev/null
318xar -x -f "${1%}/${component##*/}"
319popd >/dev/null
320done
321
322ditto --noextattr --noqtn "${pkgroot}/Distribution" "${1}/${packagename}/Distribution"
323ditto --noextattr --noqtn "${pkgroot}/Resources" "${1}/${packagename}/Resources"
324
325find "${1}/${packagename}/Resources" -type d -name '.svn' -exec rm -R -f {} \; 2>/dev/null
326
327for (( i=0; i < ${#outline[*]} ; i++));
328do
329echo -e "${outline[$i]}" >> "${1}/${packagename}/Distribution"
330done
331
332for (( i=0; i < ${#choices[*]} ; i++));
333do
334echo -e "${choices[$i]}" >> "${1}/${packagename}/Distribution"
335done
336
337echo "</installer-gui-script>" >> "${1}/${packagename}/Distribution"
338
339perl -i -p -e "s/%CHAMELEONVERSION%/${version%%-*}/g" `find "${1}/${packagename}/Resources" -type f`
340perl -i -p -e "s/%CHAMELEONREVISION%/${revision}/g" `find "${1}/${packagename}/Resources" -type f`
341
342# Adding Developer and credits
343perl -i -p -e "s/%DEVELOP%/${develop}/g" `find "${1}/${packagename}/Resources" -type f`
344perl -i -p -e "s/%CREDITS%/${credits}/g" `find "${1}/${packagename}/Resources" -type f`
345perl -i -p -e "s/%PKGDEV%/${pkgdev}/g" `find "${1}/${packagename}/Resources" -type f`
346
347stage=${stage/RC/Release Candidate }
348stage=${stage/FINAL/2.0 Final}
349perl -i -p -e "s/%CHAMELEONSTAGE%/${stage}/g" `find "${1}/${packagename}/Resources" -type f`
350
351find "${1}/${packagename}" -name '.DS_Store' -delete
352pushd "${1}/${packagename}" >/dev/null
353xar -c -f "${1%/*}/$packagename.pkg" --compression none .
354popd >/dev/null
355
356# Here is the place for assign a Icon to the pkg
357ditto -xk "${pkgroot}/Icons/pkg.zip" "${pkgroot}/Icons/"
358DeRez -only icns "${pkgroot}/Icons/Icons/pkg.icns" > tempicns.rsrc
359Rez -append tempicns.rsrc -o "${1%/*}/$packagename.pkg"
360SetFile -a C "${1%/*}/$packagename.pkg"
361rm -f tempicns.rsrc
362rm -rf "${pkgroot}/Icons/Icons"
363# End
364
365}
366
367main "${1}" "${2}" "${3}" "${4}" "${5}"
368
369

Archive Download this file

Revision: 1808