Contents of /trunk/mage-buildserver/buildserver-functions.sh
Parent Directory | Revision Log
Revision 3126 -
(show annotations)
(download)
(as text)
Tue May 12 14:44:22 2020 UTC (3 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 3427 byte(s)
Tue May 12 14:44:22 2020 UTC (3 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 3427 byte(s)
-only install python if not already installed
1 | die() |
2 | { |
3 | echo "ERROR: $@" |
4 | exit 1 |
5 | } |
6 | |
7 | os-arch() |
8 | { |
9 | local arch="$1" |
10 | local os_arch |
11 | |
12 | case ${arch} in |
13 | i*86|x86_64) os_arch="${arch}" ;; |
14 | src|playground*) os_arch="$(source ${BUILDSERVER_CONFIG_DIR}/profiles/${BUILDROOT_PROFILE}/${arch}/mage.rc; echo ${ARCH})";; |
15 | esac |
16 | |
17 | echo "${os_arch}" |
18 | } |
19 | |
20 | runarch-script() |
21 | { |
22 | local arch="$1" |
23 | local script="$2" |
24 | local buildroot |
25 | local os_arch |
26 | |
27 | # only allow the right arches |
28 | case ${arch} in |
29 | i*86|x86_64|src|playground*) buildroot="${BUILDROOT}/${arch}"; os_arch="$(os-arch ${arch})" ;; |
30 | *) die "unknown architecture '${arch}'" ;; |
31 | esac |
32 | |
33 | [ -f ${buildroot}/${script} ] || die "'${buildroot}/${script}' does not exist." |
34 | |
35 | setarch "${os_arch}" systemd-nspawn \ |
36 | --directory="${buildroot}" \ |
37 | --bind=${BUILDROOT}/mage-tree/${arch}:/usr/mage \ |
38 | --bind=${BUILDROOT}/svn/mage/include:/usr/mage/include \ |
39 | --bind=${BUILDROOT}/svn/mage/profiles:/usr/mage/profiles \ |
40 | --bind=${BUILDROOT}/svn/smage:/var/cache/mage/smage \ |
41 | --bind=${BUILDROOT}/packages/${arch}:/var/cache/mage/packages \ |
42 | --bind=${BUILDROOT}/packages/src:/var/cache/mage/src-packages \ |
43 | --bind=${BUILDROOT}/meta/${arch}:/var/cache/mage/meta \ |
44 | --bind=/usr/lib/mage-buildserver/helper:/usr/lib/mage-buildserver \ |
45 | --bind=${BUILDROOT}/build-info/${arch}:/var/cache/mage-buildserver \ |
46 | --bind=${BUILDROOT}/ssh:/root/.ssh \ |
47 | --bind=${BUILDROOT}/log/smage/${arch}:/var/log/smage \ |
48 | bash --login "${script}" \ |
49 | || die "runarch-script '${script}' for '${arch}' failed." |
50 | |
51 | # wait for container to exit |
52 | sleep 1 |
53 | } |
54 | |
55 | runarch() |
56 | { |
57 | local arch="$1" |
58 | shift |
59 | local cmd="$@" |
60 | local buildroot |
61 | local runrc |
62 | |
63 | # only allow the right arches |
64 | case ${arch} in |
65 | i*86|x86_64|src|playground*) buildroot="${BUILDROOT}/${arch}"; runrc="${buildroot}/.runrc" ;; |
66 | *) die "unknown architecture '${arch}'" ;; |
67 | esac |
68 | |
69 | # create runrc |
70 | echo "${cmd}" > "${runrc}" |
71 | runarch-script "${arch}" .runrc || die "runarch script execution of '${runrc}' failed." |
72 | |
73 | if [ -f "${runrc}" ] |
74 | then |
75 | rm "${runrc}" |
76 | fi |
77 | } |
78 | |
79 | runarch-pkg-install() |
80 | { |
81 | local arch="$1" |
82 | local pkg="$2" |
83 | |
84 | if [ ! -f ${BUILDROOT}/.stamps/"${arch}"_"${pkg}"-ok ] |
85 | then |
86 | if [[ -z $(MROOT="${BUILDROOT}/${arch}" magequery -n "${pkg}") ]] |
87 | then |
88 | runarch "${arch}" mage install "${pkg}" || die "${arch} install 'python'" |
89 | else |
90 | echo "Warning: not running mage install '${pkg}' for arch '${arch}': package already installed." |
91 | fi |
92 | touch ${BUILDROOT}/.stamps/"${arch}"_"${pkg}"-ok |
93 | else |
94 | echo "Warning: '${pkg}' already installed for arch '${arch}'" |
95 | fi |
96 | |
97 | # never fail |
98 | return 0 |
99 | } |
100 | |
101 | enum-build-arch-types() |
102 | { |
103 | echo "${BUILD_ARCH[*]}" |
104 | } |
105 | |
106 | enum-playground-arch-types() |
107 | { |
108 | local arch |
109 | local build_arch_types |
110 | |
111 | if [[ ${BUILD_PLAYGROUND} -eq 1 ]] |
112 | then |
113 | for arch in ${BUILD_ARCH[*]} |
114 | do |
115 | if [ ! -e ${BUILDSERVER_CONFIG_DIR}/profiles/${BUILDROOT_PROFILE}/playground-${arch}/mage.rc ] |
116 | then |
117 | echo "Warning: mage.rc of 'playground-${arch}' not found. Arch 'playground-${arch}' ignored." >&2 |
118 | else |
119 | build_arch_types+=( "playground-${arch}" ) |
120 | fi |
121 | done |
122 | fi |
123 | |
124 | echo "${build_arch_types[*]}" |
125 | } |
126 | |
127 | enum-all-arch-types() |
128 | { |
129 | local arch |
130 | local build_arch_types |
131 | |
132 | for arch in src $(enum-build-arch-types) $(enum-playground-arch-types) |
133 | do |
134 | if [ ! -e ${BUILDSERVER_CONFIG_DIR}/profiles/${BUILDROOT_PROFILE}/${arch}/mage.rc ] |
135 | then |
136 | echo "Warning: mage.rc of '${arch}' not found. Arch '${arch}' ignored." >&2 |
137 | else |
138 | build_arch_types+=( "${arch}" ) |
139 | fi |
140 | done |
141 | |
142 | echo "${build_arch_types[*]}" |
143 | } |