Contents of /trunk/mage-buildserver/buildserver-compile-smage.sh
Parent Directory | Revision Log
Revision 2588 -
(show annotations)
(download)
(as text)
Thu Feb 6 13:07:22 2014 UTC (10 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 7346 byte(s)
Thu Feb 6 13:07:22 2014 UTC (10 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 7346 byte(s)
-initial version
1 | #!/bin/bash |
2 | |
3 | # get configuration |
4 | BUILDSERVER_CONFIG_DIR="/etc/mage-buildserver" |
5 | source ${BUILDSERVER_CONFIG_DIR}/buildserver.conf |
6 | |
7 | source ${BUILDSERVER_LIB_DIR}/buildserver-functions.sh |
8 | |
9 | # override |
10 | #BUILDROOT="/mnt/test-buildroot" |
11 | #BUILD_ARCH=( x86_64 i686 ) |
12 | #BUILDROOT_PROFILE="R11" |
13 | #SMAGE_SVN_REPO="svn://cvs.magellan-linux.de/smage/trunk" |
14 | #MAGE_SVN_REPO="svn://cvs.magellan-linux.de/mage/trunk" |
15 | |
16 | SMAGEFILE="$1" |
17 | |
18 | if [[ -z ${SMAGEFILE} ]] |
19 | then |
20 | die "no smage file given. call '$(basename $0) with/relative/path/from/buildroot/svn/smage/to/smagefile'" |
21 | fi |
22 | |
23 | if [[ ! -f ${BUILDROOT}/svn/smage/${SMAGEFILE} ]] |
24 | then |
25 | die "given smage file does not exist" |
26 | fi |
27 | |
28 | if [ ! -f ${BUILDROOT}/.stamps/mage_svn-checkout-ok ] |
29 | then |
30 | die "svn checkout of mage required. run buildserver-svn first." |
31 | fi |
32 | if [ ! -f ${BUILDROOT}/.stamps/smage_svn-checkout-ok ] |
33 | then |
34 | die "svn checkout of smage required. run buildserver-svn first." |
35 | fi |
36 | for arch in ${BUILD_ARCH[*]} src |
37 | do |
38 | if [ ! -f ${BUILDROOT}/.stamps/${arch}_bootstrap-ok ] |
39 | then |
40 | die "bootstrap of buildsystem required for arch '${arch}'. run buildserver-prepare first." |
41 | fi |
42 | if [ ! -f ${BUILDROOT}/.stamps/${arch}_initial-mage-tree-ok ] |
43 | then |
44 | die "initial regen of mage-tree required for '${arch}'. run buildserver-setup-mage-tree first." |
45 | fi |
46 | done |
47 | for arch in ${BUILD_ARCH[*]} |
48 | do |
49 | if [ ! -f ${BUILDROOT}/.stamps/${arch}_common-devutils-ok ] |
50 | then |
51 | die "common-devutils package for '${arch}' not installed. run buildserver-prepare first." |
52 | fi |
53 | done |
54 | |
55 | |
56 | # create src package tarball |
57 | runarch src smage2 --create-src-tarball /var/cache/mage/smage/${SMAGEFILE} || die "src creating src-tarball" |
58 | |
59 | for arch in ${BUILD_ARCH[*]} |
60 | do |
61 | echo "SMAGEFILE=\"${SMAGEFILE}\"" > ${BUILDROOT}/${arch}/.runrc |
62 | cat >> ${BUILDROOT}/${arch}/.runrc << "EOF" |
63 | env-rebuild |
64 | source /etc/profile |
65 | |
66 | if [ -f /etc/rc.d/init.d/functions ] |
67 | then |
68 | source /etc/rc.d/init.d/functions |
69 | else |
70 | die "/etc/rc.d/init.d/functions not found" |
71 | fi |
72 | if [ -f /etc/mage.rc.global ] |
73 | then |
74 | source /etc/mage.rc.global |
75 | else |
76 | die "/etc/mage.rc.global not found" |
77 | fi |
78 | if [ -f /etc/mage.rc ] |
79 | then |
80 | source /etc/mage.rc |
81 | else |
82 | die "/etc/mage.rc not found" |
83 | fi |
84 | if [ -f ${MLIBDIR}/mage4.functions.sh ] |
85 | then |
86 | source ${MLIBDIR}/mage4.functions.sh |
87 | else |
88 | die "${MLIBDIR}/mage4.functions.sh not found" |
89 | fi |
90 | if [ -f ${MLIBDIR}/smage2.functions.sh ] |
91 | then |
92 | source ${MLIBDIR}/smage2.functions.sh |
93 | else |
94 | die "${MLIBDIR}/smage2.functions.sh not found" |
95 | fi |
96 | |
97 | # override die function |
98 | die() |
99 | { |
100 | echo "ERROR: $@" |
101 | return 1 |
102 | } |
103 | |
104 | is_split_target_magefile() |
105 | { |
106 | local mage="$1" |
107 | |
108 | for target_mage in ${MY_SPLIT_TARGET_MAGEFILES} |
109 | do |
110 | if [[ ${mage} = ${target_mage} ]] |
111 | then |
112 | return 0 |
113 | fi |
114 | done |
115 | |
116 | return 1 |
117 | } |
118 | |
119 | load_mage_features |
120 | mage_setup |
121 | |
122 | if [ -f /var/cache/mage/smage/${SMAGEFILE} ] |
123 | then |
124 | smagesource /var/cache/mage/smage/${SMAGEFILE} |
125 | else |
126 | die "smagefile '/var/cache/mage/smage/${SMAGEFILE}' not found." |
127 | fi |
128 | |
129 | # save STATE, gets deleted by regen_mage_tree |
130 | BUILDSERVER_SAVED_STATE="${STATE}" |
131 | |
132 | #regen_mage_tree # do this after dep install |
133 | TARGET_MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
134 | TARGET_SRC_TARBALL="/var/cache/mage/src-packages/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}" |
135 | |
136 | if [ ! -f ${TARGET_SRC_TARBALL} ] |
137 | then |
138 | die "${TARGET_SRC_TARBALL} is missing" |
139 | fi |
140 | |
141 | if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD} |
142 | then |
143 | echo -en "Package " |
144 | echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" |
145 | echo -e " already installed. try a revup." |
146 | exit 3 |
147 | fi |
148 | |
149 | # get all dependencies of this package |
150 | echo |
151 | echo -n "Calculating dependencies ... " |
152 | INSTALL_DEPS="$(${MLIBDIR}/depwalker.sh \ |
153 | --method install-build-prerequisites \ |
154 | --smage /var/cache/mage/smage/${SMAGEFILE})" |
155 | |
156 | # honor split packages |
157 | if [[ -n ${SPLIT_PACKAGES} ]] |
158 | then |
159 | split_save_variables |
160 | for subpackage in ${SPLIT_PACKAGES} |
161 | do |
162 | # get the right variables for the split |
163 | export PNAME="${subpackage}" |
164 | split_info_${PNAME} |
165 | |
166 | if [[ -z ${SRC_INSTALL_DEPS} ]] |
167 | then |
168 | SRC_INSTALL_DEPS="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
169 | else |
170 | SRC_INSTALL_DEPS+=" ${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
171 | fi |
172 | # restore smage environment |
173 | split_restore_variables |
174 | done |
175 | # unset all saved smage variables |
176 | split_unset_variables |
177 | else |
178 | SRC_INSTALL_DEPS="${TARGET_MAGEFILE}" |
179 | fi |
180 | echo "done" |
181 | |
182 | echo |
183 | echo "---- environment -----" |
184 | echo "MROOT: ${FAKE_MROOT}" |
185 | echo "PKGDIR: ${PKGDIR}" |
186 | echo "BUILDDIR: ${BUILDDIR}" |
187 | echo "BINDIR: ${BINDIR}" |
188 | echo "$(mprintfeatures)" |
189 | echo "----------------------" |
190 | echo |
191 | echo "---- dependencies ----" |
192 | echo "INSTALL_DEPS:" |
193 | for i in ${INSTALL_DEPS} |
194 | do |
195 | echo " * ${i}" |
196 | done |
197 | echo "SRC_INSTALL_DEPS:" |
198 | for i in ${SRC_INSTALL_DEPS} |
199 | do |
200 | echo " * ${i}" |
201 | done |
202 | echo "----------------------" |
203 | |
204 | echo "DEBUG: paused"; read |
205 | |
206 | # override packages path |
207 | SAVED_PKGDIR="${PKGDIR}" |
208 | PKGDIR="/var/cache/mage/tmp-packages" |
209 | install -d "${PKGDIR}" |
210 | |
211 | # now install the packages (no srcinstall, when the user not explcitly want this) |
212 | fetch_packages ${INSTALL_DEPS} || die "fetching packages" |
213 | md5sum_packages ${INSTALL_DEPS} || die "md5 sum packages" |
214 | unpack_packages ${INSTALL_DEPS} || die "unpacking packages" |
215 | install_packages ${INSTALL_DEPS} || die "installing packages" |
216 | cleanpkg |
217 | # restore packages path |
218 | PKGDIR="${SAVED_PKGDIR}" |
219 | |
220 | ## always run auto etc-update |
221 | echo "running etc-update" |
222 | echo "-5" | etc-update |
223 | |
224 | #### building target package from src-pkg tarball#### |
225 | if smage2 --src-tarball ${TARGET_SRC_TARBALL} |
226 | then |
227 | build_retval=0 |
228 | echo "Build successfull!" |
229 | regen_mage_tree |
230 | if install_packages ${SRC_INSTALL_DEPS} || die "installing packages" |
231 | then |
232 | install_retval=0 |
233 | echo "Install successfull!" |
234 | else |
235 | install_retval=1 |
236 | echo "Installation *not* successfull!" |
237 | fi |
238 | else |
239 | build_retval=1 |
240 | echo "Build failed" |
241 | fi |
242 | |
243 | ## always run auto etc-update |
244 | echo "running etc-update" |
245 | echo "-5" | etc-update |
246 | |
247 | #reverse dep order |
248 | unset REV_INSTALL_DEPS |
249 | for dep in ${INSTALL_DEPS} |
250 | do |
251 | if [[ -z ${REV_INSTALL_DEPS} ]] |
252 | then |
253 | REV_INSTALL_DEPS="${dep}" |
254 | else |
255 | REV_INSTALL_DEPS="${dep} ${REV_INSTALL_DEPS}" |
256 | fi |
257 | done |
258 | |
259 | # remove all previously installed packages |
260 | echo |
261 | echo "Cleaning buildroot - removing previously installed packages in reversed order:" |
262 | echo "---- dependencies ----" |
263 | echo "SRC_INSTALL_DEPS:" |
264 | for i in ${SRC_INSTALL_DEPS} |
265 | do |
266 | echo " * ${i}" |
267 | done |
268 | echo "INSTALL_DEPS:" |
269 | for i in ${REV_INSTALL_DEPS} |
270 | do |
271 | echo " * ${i}" |
272 | done |
273 | echo "----------------------" |
274 | |
275 | for pkg in ${SRC_INSTALL_DEPS} ${REV_INSTALL_DEPS} |
276 | do |
277 | uninstall_list="" |
278 | pname="$(magename2pname ${pkg})" |
279 | pcat="$(magename2pcat ${pkg})" |
280 | pver="$(magename2pver ${pkg})" |
281 | pbuild="$(magename2pbuild ${pkg})" |
282 | if is_installed ${pcat}/${pname}-${pver}-${pbuild} |
283 | then |
284 | if [[ -z ${uninstall_list} ]] |
285 | then |
286 | uninstall_list="${pcat}/${pname}-${pver}-${pbuild}" |
287 | else |
288 | uninstall_list="${uninstall_list} ${pcat}/${pname}-${pver}-${pbuild}" |
289 | fi |
290 | else |
291 | echo "'${pcat}/${pname}-${pver}-${pbuild}' not installed - ignoring" |
292 | fi |
293 | if [[ -n ${uninstall_list} ]] |
294 | then |
295 | uninstall_packages "${uninstall_list}" || die "cleaning buildroot: ${pkg}" |
296 | else |
297 | echo "uninstall_list is empty for pkg '${pcat}/${pname}-${pver}-${pbuild}' - doing nothing" |
298 | fi |
299 | done |
300 | |
301 | exit ${build_retval} |
302 | EOF |
303 | runarch-script ${arch} .runrc || die "${arch} package build failed" |
304 | if [ -f ${BUILDROOT}/${arch}/.runrc ] |
305 | then |
306 | rm ${BUILDROOT}/${arch}/.runrc |
307 | fi |
308 | done |
309 | |
310 | echo |
311 | echo "smage '${SMAGEFILE}' sucessfully build on all arches." |