blob: 86891a9adeaabc57665b042b7bd428dfba833f96 [file] [log] [blame]
Chris Smart02651712015-11-11 11:09:00 +11001#!/bin/bash
2
3# This build script is for running the Jenkins builds using docker.
4#
5# It expects a few variables which are part of Jenkins build job matrix:
6# target = barreleye|palmetto|qemu
7# distro = fedora|ubuntu
8# WORKSPACE =
9
Joel Stanley4b8b2392016-02-12 15:44:57 +103010# Trace bash processing. Set -e so when a step fails, we fail the build
Joel Stanley38c9d142016-02-16 12:31:55 +103011set -xeo pipefail
Chris Smart02651712015-11-11 11:09:00 +110012
13# Default variables
14target=${target:-qemu}
15distro=${distro:-ubuntu}
16WORKSPACE=${WORKSPACE:-${HOME}/${RANDOM}${RANDOM}}
17http_proxy=${http_proxy:-}
Chris Smartc3522542016-02-16 11:59:36 +110018PROXY=""
Chris Smart02651712015-11-11 11:09:00 +110019
20# Timestamp for job
21echo "Build started, $(date)"
22
23# Work out what build target we should be running and set bitbake command
24case ${target} in
25 barreleye)
26 BITBAKE_CMD="TEMPLATECONF=meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/conf source oe-init-build-env"
27 ;;
28 palmetto)
29 BITBAKE_CMD="TEMPLATECONF=meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/conf source oe-init-build-env"
30 ;;
31 qemu)
32 BITBAKE_CMD="source openbmc-env"
33 ;;
34 *)
35 exit 1
36 ;;
37esac
38
39# Configure docker build
40if [[ "${distro}" == fedora ]];then
41
42 if [[ -n "${http_proxy}" ]]; then
43 PROXY="RUN echo \"proxy=${http_proxy}\" >> /etc/dnf/dnf.conf"
44 fi
45
46 Dockerfile=$(cat << EOF
47FROM fedora:latest
48
49${PROXY}
50
51RUN dnf --refresh upgrade -y
52RUN dnf install -y git subversion gcc gcc-c++ make perl-Thread-Queue perl-Data-Dumper diffstat texinfo \
53chrpath wget SDL-devel patch bzip2 tar cpio findutils socat which python-devel perl-bignum
54
Chris Smartd30c5902016-03-01 15:00:54 +110055RUN grep -q ${GROUPS} /etc/group || groupadd -g ${GROUPS} ${USER}
56RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS} ${USER}
Chris Smart02651712015-11-11 11:09:00 +110057
58USER ${USER}
59ENV HOME ${HOME}
60RUN /bin/bash
61EOF
62)
63
64elif [[ "${distro}" == ubuntu ]]; then
65 if [[ -n "${http_proxy}" ]]; then
66 PROXY="RUN echo \"Acquire::http::Proxy \\"\"${http_proxy}/\\"\";\" > /etc/apt/apt.conf.d/000apt-cacher-ng-proxy"
67 fi
68
69 Dockerfile=$(cat << EOF
70FROM ubuntu:latest
71
72${PROXY}
73
Chris Smart1a0dda42016-01-07 17:32:49 +110074#RUN echo $(date +%s) && apt-get update
75RUN apt-get update
Chris Smart72682352015-11-11 18:53:03 +110076RUN DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
Chris Smart02651712015-11-11 11:09:00 +110077RUN DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential git subversion diffstat texinfo \
78 chrpath wget libthread-queue-any-perl libdata-dumper-simple-perl python libsdl1.2-dev gawk socat debianutils
79
Chris Smartd30c5902016-03-01 15:00:54 +110080RUN grep -q ${GROUPS} /etc/group || groupadd -g ${GROUPS} ${USER}
81RUN grep -q ${UID} /etc/passwd || useradd -d ${HOME} -m -u ${UID} -g ${GROUPS} ${USER}
82
Chris Smart02651712015-11-11 11:09:00 +110083
84USER ${USER}
85ENV HOME ${HOME}
86RUN /bin/bash
87EOF
88)
89fi
90
91# Build the docker container
92docker build -t openbmc/${distro} - <<< "${Dockerfile}"
Chris Smart02651712015-11-11 11:09:00 +110093
94# Create the docker run script
95export PROXY_HOST=${http_proxy/#http*:\/\/}
96export PROXY_HOST=${PROXY_HOST/%:[0-9]*}
97export PROXY_PORT=${http_proxy/#http*:\/\/*:}
98
Chris Smart01d2b962015-11-11 18:05:30 +110099mkdir -p ${WORKSPACE}
Chris Smart02651712015-11-11 11:09:00 +1100100
Chris Smart01d2b962015-11-11 18:05:30 +1100101cat > "${WORKSPACE}"/build.sh << EOF_SCRIPT
Chris Smart02651712015-11-11 11:09:00 +1100102#!/bin/bash
103
Joel Stanley38c9d142016-02-16 12:31:55 +1030104set -xeo pipefail
Chris Smart02651712015-11-11 11:09:00 +1100105
Chris Smart01d2b962015-11-11 18:05:30 +1100106cd ${WORKSPACE}
Chris Smart02651712015-11-11 11:09:00 +1100107
108# Go into the openbmc directory (the openbmc script will put us in a build subdir)
109cd openbmc
110
111# Set up proxies
112export ftp_proxy=${http_proxy}
113export http_proxy=${http_proxy}
114export https_proxy=${http_proxy}
115
Chris Smart01d2b962015-11-11 18:05:30 +1100116mkdir -p ${WORKSPACE}/bin
Chris Smart02651712015-11-11 11:09:00 +1100117
118# Configure proxies for bitbake
119if [[ -n "${http_proxy}" ]]; then
120
Chris Smartd30c5902016-03-01 15:00:54 +1100121 cat > ${WORKSPACE}/bin/git-proxy << \EOF_GIT
Chris Smart02651712015-11-11 11:09:00 +1100122#!/bin/bash
123# \$1 = hostname, \$2 = port
124PROXY=${PROXY_HOST}
125PROXY_PORT=${PROXY_PORT}
126exec socat STDIO PROXY:\${PROXY}:\${1}:\${2},proxyport=\${PROXY_PORT}
127EOF_GIT
128
Chris Smart01d2b962015-11-11 18:05:30 +1100129 chmod a+x ${WORKSPACE}/bin/git-proxy
130 export PATH=${WORKSPACE}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH}
Chris Smart02651712015-11-11 11:09:00 +1100131 git config core.gitProxy git-proxy
132
133 mkdir -p ~/.subversion
134
135 cat > ~/.subversion/servers << EOF_SVN
136[global]
137http-proxy-host = ${PROXY_HOST}
138http-proxy-port = ${PROXY_PORT}
139EOF_SVN
140fi
141
142# Source our build env
143${BITBAKE_CMD}
144
145# Custom bitbake config settings
146cat >> conf/local.conf << EOF_CONF
Chris Smartc650c202015-11-25 15:58:53 +1100147BB_NUMBER_THREADS = "$(nproc)"
148PARALLEL_MAKE = "-j$(nproc)"
Chris Smart02651712015-11-11 11:09:00 +1100149INHERIT += "rm_work"
150BB_GENERATE_MIRROR_TARBALLS = "1"
151DL_DIR="${HOME}/bitbake_downloads"
Chris Smart02651712015-11-11 11:09:00 +1100152USER_CLASSES += "buildstats"
153EOF_CONF
154
155# Kick off a build
156bitbake obmc-phosphor-image
157
158EOF_SCRIPT
159
160chmod a+x ${WORKSPACE}/build.sh
161
162# Run the docker container, execute the build script we just built
Chris Smart01d2b962015-11-11 18:05:30 +1100163docker run --cap-add=sys_admin --net=host --rm=true -e WORKSPACE=${WORKSPACE} --user="${USER}" \
164 -w "${HOME}" -v "${HOME}":"${HOME}" -t openbmc/${distro} ${WORKSPACE}/build.sh
Chris Smart02651712015-11-11 11:09:00 +1100165
166# Create link to images for archiving
167ln -sf ${WORKSPACE}/openbmc/build/tmp/deploy/images ${WORKSPACE}/images
168
169# Timestamp for build
170echo "Build completed, $(date)"
171