Contents of /trunk/mage-buildserver/buildserver-compile-smage.sh
Parent Directory | Revision Log
Revision 2730 -
(show annotations)
(download)
(as text)
Sun Aug 10 19:35:40 2014 UTC (9 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 7599 byte(s)
Sun Aug 10 19:35:40 2014 UTC (9 years, 10 months ago) by niro
File MIME type: application/x-sh
File size: 7599 byte(s)
-protect buildserver essential packages from uninstallation like the compiler libc etc
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 | echo "BUILDSERVER_CONFIG_DIR=\"${BUILDSERVER_CONFIG_DIR}\"" >> ${BUILDROOT}/${arch}/.runrc |
63 | cat >> ${BUILDROOT}/${arch}/.runrc << "EOF" |
64 | env-rebuild |
65 | source /etc/profile |
66 | |
67 | if [ -f /etc/rc.d/init.d/functions ] |
68 | then |
69 | source /etc/rc.d/init.d/functions |
70 | else |
71 | die "/etc/rc.d/init.d/functions not found" |
72 | fi |
73 | if [ -f /etc/mage.rc.global ] |
74 | then |
75 | source /etc/mage.rc.global |
76 | else |
77 | die "/etc/mage.rc.global not found" |
78 | fi |
79 | if [ -f /etc/mage.rc ] |
80 | then |
81 | source /etc/mage.rc |
82 | else |
83 | die "/etc/mage.rc not found" |
84 | fi |
85 | if [ -f ${MLIBDIR}/mage4.functions.sh ] |
86 | then |
87 | source ${MLIBDIR}/mage4.functions.sh |
88 | else |
89 | die "${MLIBDIR}/mage4.functions.sh not found" |
90 | fi |
91 | if [ -f ${MLIBDIR}/smage2.functions.sh ] |
92 | then |
93 | source ${MLIBDIR}/smage2.functions.sh |
94 | else |
95 | die "${MLIBDIR}/smage2.functions.sh not found" |
96 | fi |
97 | |
98 | # override die function |
99 | die() |
100 | { |
101 | echo "ERROR: $@" |
102 | return 1 |
103 | } |
104 | |
105 | is_split_target_magefile() |
106 | { |
107 | local mage="$1" |
108 | |
109 | for target_mage in ${MY_SPLIT_TARGET_MAGEFILES} |
110 | do |
111 | if [[ ${mage} = ${target_mage} ]] |
112 | then |
113 | return 0 |
114 | fi |
115 | done |
116 | |
117 | return 1 |
118 | } |
119 | |
120 | load_mage_features |
121 | mage_setup |
122 | |
123 | if [ -f /var/cache/mage/smage/${SMAGEFILE} ] |
124 | then |
125 | smagesource /var/cache/mage/smage/${SMAGEFILE} |
126 | else |
127 | die "smagefile '/var/cache/mage/smage/${SMAGEFILE}' not found." |
128 | fi |
129 | |
130 | # save STATE, gets deleted by regen_mage_tree |
131 | BUILDSERVER_SAVED_STATE="${STATE}" |
132 | |
133 | #regen_mage_tree # do this after dep install |
134 | TARGET_MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
135 | TARGET_SRC_TARBALL="/var/cache/mage/src-packages/${PNAME}-${PVER}-${PBUILD}.${SRCPKGSUFFIX}" |
136 | |
137 | if [ ! -f ${TARGET_SRC_TARBALL} ] |
138 | then |
139 | die "${TARGET_SRC_TARBALL} is missing" |
140 | fi |
141 | |
142 | if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD} |
143 | then |
144 | echo -en "Package " |
145 | echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}" |
146 | echo -e " already installed. try a revup." |
147 | exit 3 |
148 | fi |
149 | |
150 | # get all dependencies of this package |
151 | echo |
152 | echo -n "Calculating dependencies ... " |
153 | INSTALL_DEPS="$(${MLIBDIR}/depwalker.sh \ |
154 | --method install-build-prerequisites \ |
155 | --smage /var/cache/mage/smage/${SMAGEFILE})" |
156 | |
157 | # honor split packages |
158 | if [[ -n ${SPLIT_PACKAGES} ]] |
159 | then |
160 | split_save_variables |
161 | for subpackage in ${SPLIT_PACKAGES} |
162 | do |
163 | # get the right variables for the split |
164 | export PNAME="${subpackage}" |
165 | split_info_${PNAME} |
166 | |
167 | if [[ -z ${SRC_INSTALL_DEPS} ]] |
168 | then |
169 | SRC_INSTALL_DEPS="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
170 | else |
171 | SRC_INSTALL_DEPS+=" ${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.${MAGESUFFIX}" |
172 | fi |
173 | # restore smage environment |
174 | split_restore_variables |
175 | done |
176 | # unset all saved smage variables |
177 | split_unset_variables |
178 | else |
179 | SRC_INSTALL_DEPS="${TARGET_MAGEFILE}" |
180 | fi |
181 | echo "done" |
182 | |
183 | echo |
184 | echo "---- environment -----" |
185 | echo "MROOT: ${FAKE_MROOT}" |
186 | echo "PKGDIR: ${PKGDIR}" |
187 | echo "BUILDDIR: ${BUILDDIR}" |
188 | echo "BINDIR: ${BINDIR}" |
189 | echo "$(mprintfeatures)" |
190 | echo "----------------------" |
191 | echo |
192 | echo "---- dependencies ----" |
193 | echo "INSTALL_DEPS:" |
194 | for i in ${INSTALL_DEPS} |
195 | do |
196 | echo " * ${i}" |
197 | done |
198 | echo "SRC_INSTALL_DEPS:" |
199 | for i in ${SRC_INSTALL_DEPS} |
200 | do |
201 | echo " * ${i}" |
202 | done |
203 | echo "----------------------" |
204 | |
205 | #echo "DEBUG: paused"; read |
206 | |
207 | # override packages path |
208 | SAVED_PKGDIR="${PKGDIR}" |
209 | PKGDIR="/var/cache/mage/tmp-packages" |
210 | install -d "${PKGDIR}" |
211 | |
212 | # now install the packages (no srcinstall, when the user not explcitly want this) |
213 | fetch_packages ${INSTALL_DEPS} || die "fetching packages" |
214 | md5sum_packages ${INSTALL_DEPS} || die "md5 sum packages" |
215 | unpack_packages ${INSTALL_DEPS} || die "unpacking packages" |
216 | install_packages ${INSTALL_DEPS} || die "installing packages" |
217 | cleanpkg |
218 | # restore packages path |
219 | PKGDIR="${SAVED_PKGDIR}" |
220 | |
221 | ## always run auto etc-update |
222 | echo "running etc-update" |
223 | echo "-5" | etc-update |
224 | |
225 | #### building target package from src-pkg tarball#### |
226 | if smage2 --src-tarball ${TARGET_SRC_TARBALL} |
227 | then |
228 | build_retval=0 |
229 | echo "Build successfull!" |
230 | regen_mage_tree |
231 | if install_packages ${SRC_INSTALL_DEPS} || die "installing packages" |
232 | then |
233 | install_retval=0 |
234 | echo "Install successfull!" |
235 | else |
236 | install_retval=1 |
237 | echo "Installation *not* successfull!" |
238 | fi |
239 | else |
240 | build_retval=1 |
241 | echo "Build failed" |
242 | fi |
243 | |
244 | ## always run auto etc-update |
245 | echo "running etc-update" |
246 | echo "-5" | etc-update |
247 | |
248 | #reverse dep order |
249 | unset REV_INSTALL_DEPS |
250 | for dep in ${INSTALL_DEPS} |
251 | do |
252 | if [[ -z ${REV_INSTALL_DEPS} ]] |
253 | then |
254 | REV_INSTALL_DEPS="${dep}" |
255 | else |
256 | REV_INSTALL_DEPS="${dep} ${REV_INSTALL_DEPS}" |
257 | fi |
258 | done |
259 | |
260 | # remove all previously installed packages |
261 | echo |
262 | echo "Cleaning buildroot - removing previously installed packages in reversed order:" |
263 | echo "---- dependencies ----" |
264 | echo "SRC_INSTALL_DEPS:" |
265 | for i in ${SRC_INSTALL_DEPS} |
266 | do |
267 | echo " * ${i}" |
268 | done |
269 | echo "INSTALL_DEPS:" |
270 | for i in ${REV_INSTALL_DEPS} |
271 | do |
272 | echo " * ${i}" |
273 | done |
274 | echo "----------------------" |
275 | |
276 | for pkg in ${SRC_INSTALL_DEPS} ${REV_INSTALL_DEPS} |
277 | do |
278 | uninstall_list="" |
279 | pname="$(magename2pname ${pkg})" |
280 | pcat="$(magename2pcat ${pkg})" |
281 | pver="$(magename2pver ${pkg})" |
282 | pbuild="$(magename2pbuild ${pkg})" |
283 | if [ -f ${BUILDSERVER_CONFIG_DIR}/protected/${pname} ] |
284 | then |
285 | echo "'${pcat}/${pname}-${pver}-${pbuild}' is protected - ignoring" |
286 | else |
287 | if is_installed ${pcat}/${pname}-${pver}-${pbuild} |
288 | then |
289 | if [[ -z ${uninstall_list} ]] |
290 | then |
291 | uninstall_list="${pcat}/${pname}-${pver}-${pbuild}" |
292 | else |
293 | uninstall_list="${uninstall_list} ${pcat}/${pname}-${pver}-${pbuild}" |
294 | fi |
295 | else |
296 | echo "'${pcat}/${pname}-${pver}-${pbuild}' not installed - ignoring" |
297 | fi |
298 | |
299 | if [[ -n ${uninstall_list} ]] |
300 | then |
301 | uninstall_packages "${uninstall_list}" || die "cleaning buildroot: ${pkg}" |
302 | else |
303 | echo "uninstall_list is empty for pkg '${pcat}/${pname}-${pver}-${pbuild}' - doing nothing" |
304 | fi |
305 | fi |
306 | done |
307 | |
308 | exit ${build_retval} |
309 | EOF |
310 | runarch-script ${arch} .runrc || die "${arch} package build failed" |
311 | if [ -f ${BUILDROOT}/${arch}/.runrc ] |
312 | then |
313 | rm ${BUILDROOT}/${arch}/.runrc |
314 | fi |
315 | done |
316 | |
317 | echo |
318 | echo "smage '${SMAGEFILE}' sucessfully build on all arches." |