summaryrefslogtreecommitdiffstats
path: root/testing/docker/centos6-build
diff options
context:
space:
mode:
Diffstat (limited to 'testing/docker/centos6-build')
-rw-r--r--testing/docker/centos6-build/Dockerfile32
-rw-r--r--testing/docker/centos6-build/REGISTRY1
-rw-r--r--testing/docker/centos6-build/VERSION1
-rw-r--r--testing/docker/centos6-build/hgrc2
-rw-r--r--testing/docker/centos6-build/system-setup.sh477
5 files changed, 513 insertions, 0 deletions
diff --git a/testing/docker/centos6-build/Dockerfile b/testing/docker/centos6-build/Dockerfile
new file mode 100644
index 000000000..9e7ce405d
--- /dev/null
+++ b/testing/docker/centos6-build/Dockerfile
@@ -0,0 +1,32 @@
+FROM centos:6
+MAINTAINER Dustin J. Mitchell <dustin@mozilla.com>
+
+### add worker user and setup its workspace
+RUN useradd -d /home/worker -s /bin/bash -m worker
+# Declare default working folder
+WORKDIR /home/worker
+
+# This will create a host mounted filesystem when the cache is stripped
+# on Try. This cancels out some of the performance losses of aufs. See
+# bug 1291940.
+VOLUME /home/worker/workspace
+VOLUME /home/worker/tooltool-cache
+
+# install non-build specific dependencies in a single layer
+ADD system-setup.sh /tmp/system-setup.sh
+RUN bash /tmp/system-setup.sh
+
+# Builds need the share module enabled
+ADD hgrc /home/worker/.hgrc
+RUN chown -R worker:worker /home/worker/.hgrc
+
+# Set variable normally configured at login, by the shells parent process, these
+# are taken from GNU su manual
+ENV HOME /home/worker
+ENV SHELL /bin/bash
+ENV USER worker
+ENV LOGNAME worker
+ENV HOSTNAME taskcluster-worker
+
+# Set a default command useful for debugging
+CMD ["/bin/bash", "--login"]
diff --git a/testing/docker/centos6-build/REGISTRY b/testing/docker/centos6-build/REGISTRY
new file mode 100644
index 000000000..cb1e1bb48
--- /dev/null
+++ b/testing/docker/centos6-build/REGISTRY
@@ -0,0 +1 @@
+taskcluster
diff --git a/testing/docker/centos6-build/VERSION b/testing/docker/centos6-build/VERSION
new file mode 100644
index 000000000..c946ee616
--- /dev/null
+++ b/testing/docker/centos6-build/VERSION
@@ -0,0 +1 @@
+0.1.6
diff --git a/testing/docker/centos6-build/hgrc b/testing/docker/centos6-build/hgrc
new file mode 100644
index 000000000..9a0681fbf
--- /dev/null
+++ b/testing/docker/centos6-build/hgrc
@@ -0,0 +1,2 @@
+[extensions]
+share =
diff --git a/testing/docker/centos6-build/system-setup.sh b/testing/docker/centos6-build/system-setup.sh
new file mode 100644
index 000000000..ddb529eed
--- /dev/null
+++ b/testing/docker/centos6-build/system-setup.sh
@@ -0,0 +1,477 @@
+#!/usr/bin/env bash
+
+set -ve
+
+test `whoami` == 'root'
+
+# lots of goodies in EPEL
+yum install -y epel-release
+
+# this sometimes fails, so we repeat it
+yum makecache || yum makecache
+
+yum shell -y <<'EOF'
+# This covers a bunch of requirements
+groupinstall Base
+
+install findutils
+install gawk
+install ppl
+install cpp
+install grep
+install gzip
+install sed
+install tar
+install util-linux
+install autoconf213
+install perl-Test-Simple
+install perl-Config-General
+
+# fonts required for PGO
+install xorg-x11-font*
+
+# lots of required packages that we build against. We need the i686 and x86_64
+# versions of each, along with -devel packages, and yum does a poor job of
+# figuring out the interdependencies so we list all four.
+
+install alsa-lib-devel.i686
+install alsa-lib-devel.x86_64
+install alsa-lib.i686
+install alsa-lib.x86_64
+install atk-devel.i686
+install atk-devel.x86_64
+install atk.i686
+install atk.x86_64
+install cairo-devel.i686
+install cairo-devel.x86_64
+install cairo.i686
+install cairo.x86_64
+install check-devel.i686
+install check-devel.x86_64
+install check.i686
+install check.x86_64
+install dbus-glib-devel.i686
+install dbus-glib-devel.x86_64
+install dbus-glib.i686
+install dbus-glib.x86_64
+install fontconfig-devel.i686
+install fontconfig-devel.x86_64
+install fontconfig.i686
+install fontconfig.x86_64
+install freetype-devel.i686
+install freetype-devel.x86_64
+install freetype.i686
+install freetype.x86_64
+install GConf2-devel.i686
+install GConf2-devel.x86_64
+install GConf2.i686
+install GConf2.x86_64
+install gdk-pixbuf2-devel.i686
+install gdk-pixbuf2-devel.x86_64
+install glib2-devel.i686
+install glib2-devel.x86_64
+install glib2.i686
+install glib2.x86_64
+install glibc-devel.i686
+install glibc-devel.x86_64
+install glibc.i686
+install glibc.x86_64
+install gnome-vfs2-devel.i686
+install gnome-vfs2-devel.x86_64
+install gnome-vfs2.i686
+install gnome-vfs2.x86_64
+install gstreamer-devel.i686
+install gstreamer-devel.x86_64
+install gstreamer.i686
+install gstreamer-plugins-base-devel.i686
+install gstreamer-plugins-base-devel.x86_64
+install gstreamer-plugins-base.i686
+install gstreamer-plugins-base.x86_64
+install gstreamer.x86_64
+install gtk2-devel.i686
+install gtk2-devel.x86_64
+install gtk2.i686
+install gtk2.x86_64
+install libcurl-devel.i686
+install libcurl-devel.x86_64
+install libcurl.i686
+install libcurl.x86_64
+install libdrm-devel.i686
+install libdrm-devel.x86_64
+install libdrm.i686
+install libdrm.x86_64
+install libICE-devel.i686
+install libICE-devel.x86_64
+install libICE.i686
+install libICE.x86_64
+install libIDL-devel.i686
+install libIDL-devel.x86_64
+install libIDL.i686
+install libIDL.x86_64
+install libidn-devel.i686
+install libidn-devel.x86_64
+install libidn.i686
+install libidn.x86_64
+install libnotify-devel.i686
+install libnotify-devel.x86_64
+install libnotify.i686
+install libnotify.x86_64
+install libpng-devel.i686
+install libpng-devel.x86_64
+install libpng.i686
+install libpng.x86_64
+install libSM-devel.i686
+install libSM-devel.x86_64
+install libSM.i686
+install libSM.x86_64
+install libstdc++-devel.i686
+install libstdc++-devel.x86_64
+install libstdc++.i686
+install libstdc++.x86_64
+install libX11-devel.i686
+install libX11-devel.x86_64
+install libX11.i686
+install libX11.x86_64
+install libXau-devel.i686
+install libXau-devel.x86_64
+install libXau.i686
+install libXau.x86_64
+install libxcb-devel.i686
+install libxcb-devel.x86_64
+install libxcb.i686
+install libxcb.x86_64
+install libXcomposite-devel.i686
+install libXcomposite-devel.x86_64
+install libXcomposite.i686
+install libXcomposite.x86_64
+install libXcursor-devel.i686
+install libXcursor-devel.x86_64
+install libXcursor.i686
+install libXcursor.x86_64
+install libXdamage-devel.i686
+install libXdamage-devel.x86_64
+install libXdamage.i686
+install libXdamage.x86_64
+install libXdmcp-devel.i686
+install libXdmcp-devel.x86_64
+install libXdmcp.i686
+install libXdmcp.x86_64
+install libXext-devel.i686
+install libXext-devel.x86_64
+install libXext.i686
+install libXext.x86_64
+install libXfixes-devel.i686
+install libXfixes-devel.x86_64
+install libXfixes.i686
+install libXfixes.x86_64
+install libXft-devel.i686
+install libXft-devel.x86_64
+install libXft.i686
+install libXft.x86_64
+install libXi-devel.i686
+install libXi-devel.x86_64
+install libXi.i686
+install libXinerama-devel.i686
+install libXinerama-devel.x86_64
+install libXinerama.i686
+install libXinerama.x86_64
+install libXi.x86_64
+install libxml2-devel.i686
+install libxml2-devel.x86_64
+install libxml2.i686
+install libxml2.x86_64
+install libXrandr-devel.i686
+install libXrandr-devel.x86_64
+install libXrandr.i686
+install libXrandr.x86_64
+install libXrender-devel.i686
+install libXrender-devel.x86_64
+install libXrender.i686
+install libXrender.x86_64
+install libXt-devel.i686
+install libXt-devel.x86_64
+install libXt.i686
+install libXt.x86_64
+install libXxf86vm-devel.i686
+install libXxf86vm-devel.x86_64
+install libXxf86vm.i686
+install libXxf86vm.x86_64
+install mesa-libGL-devel.i686
+install mesa-libGL-devel.x86_64
+install mesa-libGL.i686
+install mesa-libGL.x86_64
+install ORBit2-devel.i686
+install ORBit2-devel.x86_64
+install ORBit2.i686
+install ORBit2.x86_64
+install pango-devel.i686
+install pango-devel.x86_64
+install pango.i686
+install pango.x86_64
+install pixman-devel.i686
+install pixman-devel.x86_64
+install pixman.i686
+install pixman.x86_64
+install pulseaudio-libs-devel.i686
+install pulseaudio-libs-devel.x86_64
+install pulseaudio-libs.i686
+install pulseaudio-libs.x86_64
+install wireless-tools-devel.i686
+install wireless-tools-devel.x86_64
+install wireless-tools.i686
+install wireless-tools.x86_64
+install zlib-devel.i686
+install zlib-devel.x86_64
+install zlib.i686
+install zlib.x86_64
+
+# x86_64 only packages
+install hal-devel.x86_64
+install hal.x86_64
+install perl-devel.x86_64
+install perl.x86_64
+install dbus-x11.x86_64
+
+# glibc-static has no -devel
+install glibc-static.i686
+install glibc-static.x86_64
+
+# dbus-devel comes in two architectures, although dbus does not
+install dbus-devel.i686
+install dbus-devel.x86_64
+install dbus.x86_64
+
+# required for the Python build, below
+install bzip2-devel
+install openssl-devel
+install xz-libs
+install sqlite-devel
+
+# required for the git build, below
+install autoconf
+install perl-devel
+install perl-ExtUtils-MakeMaker
+install gettext-devel
+
+# build utilities
+install ccache
+
+# a basic node environment so that we can run TaskCluster tools
+install nodejs
+install npm
+
+# enough X to run `make check` and do a PGO build
+install Xvfb
+install xvinfo
+
+# required for building OS X tools
+install patch
+install libuuid-devel
+install openssl-static
+install cmake
+install subversion
+run
+EOF
+
+BUILD=/root/build
+mkdir $BUILD
+
+# for the builds below, there's no sense using ccache
+export CCACHE_DISABLE=1
+
+cd $BUILD
+curl https://raw.githubusercontent.com/mozilla/build-tooltool/master/tooltool.py > tooltool.py
+
+tooltool_fetch() {
+ cat >manifest.tt
+ python $BUILD/tooltool.py fetch
+ rm manifest.tt
+}
+
+# For a few packges, we want to run the very latest, which is hard to find for
+# stable old CentOS 6. Custom yum repostiories are cumbersome and can cause
+# unhappy failures when they contain multiple versions of the same package. So
+# we either build from source or install an RPM from tooltool (the former being
+# the preferred solution for transparency). Each of these source files was
+# downloaded directly from the upstream project site, although the RPMs are of
+# unknown origin.
+
+cd $BUILD
+tooltool_fetch <<'EOF'
+[
+{
+ "size": 17051332,
+ "digest": "57c816a6df9731aa5f34678abb59ea560bbdb5abd01df3f3a001dc94a3695d3190b1121caba483f8d8c4a405f4e53fde63a628527aca73f05652efeaec9621c4",
+ "algorithm": "sha512",
+ "filename": "valgrind-3.10.0-1.x86_64.rpm"
+},
+{
+ "size": 830601,
+ "digest": "c04dadf29a3ac676e93cb684b619f753584f8414167135eb766602671d08c85d7bc564511310564bdf2651d72da911b017f0969b9a26d84df724aebf8733f268",
+ "algorithm": "sha512",
+ "filename": "yasm-1.1.0-1.x86_64.rpm"
+}
+]
+EOF
+yum install -y valgrind-*.rpm
+yum install -y yasm-*.rpm
+
+# The source RPM for valgrind; not used here, but included for reference
+: <<'EOF'
+[
+{
+ "size": 10767445,
+ "digest": "d435897b602f7bdf77fabf1c80bbd06ba4f7288ad0ef31d19a863546d4651172421b45f2f090bad3c3355c9fa2a00352066f18d99bf994838579b768b90553d3",
+ "algorithm": "sha512",
+ "filename": "valgrind-3.10.0-1.src.rpm"
+}
+]
+EOF
+
+# Git
+cd $BUILD
+# NOTE: rc builds are in https://www.kernel.org/pub/software/scm/git/testing/
+tooltool_fetch <<'EOF'
+[
+{
+ "size": 3938976,
+ "visibility": "public",
+ "digest": "f31cedb6d7c813d5cc9f40daa54ec6b34b046b8ec1b7a09a37598637f747449147a22736e95e4388d1a29fd01d7974b82342114b91d63b9d5df163ea3659fe72",
+ "algorithm": "sha512",
+ "filename": "git-2.8.0.rc3.tar.xz",
+ "unpack": true
+}
+]
+EOF
+cd git-2.8.0.rc3
+make configure
+./configure --prefix=/usr --without-tcltk
+make all install
+git config --global user.email "nobody@mozilla.com"
+git config --global user.name "mozilla"
+
+# Python
+cd $BUILD
+tooltool_fetch <<'EOF'
+[
+{
+ "size": 12250696,
+ "digest": "67615a6defbcda062f15a09f9dd3b9441afd01a8cc3255e5bc45b925378a0ddc38d468b7701176f6cc153ec52a4f21671b433780d9bde343aa9b9c1b2ae29feb",
+ "algorithm": "sha512",
+ "filename": "Python-2.7.10.tar.xz",
+ "unpack": true
+}
+]
+EOF
+cd Python-2.7.10
+./configure --prefix=/usr
+make
+# `altinstall` means that /usr/bin/python still points to CentOS's Python 2.6 install.
+# If you want Python 2.7, use `python2.7`
+make altinstall
+
+# Enough python utilities to get "peep" working
+cd $BUILD
+tooltool_fetch <<'EOF'
+[
+{
+ "size": 630700,
+ "digest": "1367f3a10c1fef2f8061e430585f1927f6bd7c416e764d65cea1f4255824d549efa77beef8ff784bbd62c307b4b1123502e7b3fd01a243c0cc5b433a841cc8b5",
+ "algorithm": "sha512",
+ "filename": "setuptools-18.1.tar.gz",
+ "unpack": true
+},
+{
+ "size": 1051205,
+ "digest": "e7d2e003ec60fce5a75a6a23711d7f9b155e898faebcf55f3abdd912ef513f4e0cf43daca8f9da7179a7a4efe6e4a625a532d051349818847df1364eb5b326de",
+ "algorithm": "sha512",
+ "filename": "pip-6.1.1.tar.gz",
+ "unpack": true
+},
+{
+ "size": 26912,
+ "digest": "9d730ed7852d4d217aaddda959cd5f871ef1b26dd6c513a3780bbb04a5a93a49d6b78e95c2274451a1311c10cc0a72755b269dc9af62640474e6e73a1abec370",
+ "algorithm": "sha512",
+ "filename": "peep-2.4.1.tar.gz",
+ "unpack": false
+}
+]
+EOF
+
+cd $BUILD
+cd setuptools-18.1
+python2.7 setup.py install
+# NOTE: latest peep is not compatible with pip>=7.0
+# https://github.com/erikrose/peep/pull/94
+
+cd $BUILD
+cd pip-6.1.1
+python2.7 setup.py install
+
+cd $BUILD
+pip2.7 install peep-2.4.1.tar.gz
+
+# Peep (latest)
+cd $BUILD
+pip2.7 install peep
+
+# remaining Python utilities are installed with `peep` from upstream
+# repositories; peep verifies file integrity for us
+cat >requirements.txt <<'EOF'
+# sha256: 90pZQ6kAXB6Je8-H9-ivfgDAb6l3e5rWkfafn6VKh9g
+virtualenv==13.1.2
+
+# sha256: wJnELXTi1SC2HdNyzZlrD6dgXAZheDT9exPHm5qaWzA
+mercurial==3.7.3
+EOF
+peep install -r requirements.txt
+
+# TC-VCS
+npm install -g taskcluster-vcs@2.3.18
+
+# Ninja
+cd $BUILD
+tooltool_fetch <<'EOF'
+[
+{
+ "size": 174501,
+ "digest": "551a9e14b95c2d2ddad6bee0f939a45614cce86719748dc580192dd122f3671e3d95fd6a6fb3facb2d314ba100d61a004af4df77f59df119b1b95c6fe8c38875",
+ "algorithm": "sha512",
+ "filename": "ninja-1.6.0.tar.gz",
+ "unpack": true
+}
+]
+EOF
+cd ninja-1.6.0
+./configure.py --bootstrap
+cp ninja /usr/local/bin/ninja
+# Old versions of Cmake can only find ninja in this location!
+ln -s /usr/local/bin/ninja /usr/local/bin/ninja-build
+
+# note that TC will replace workspace with a cache mount; there's no sense
+# creating anything inside there
+mkdir -p /home/worker/workspace
+chown worker:worker /home/worker/workspace
+
+# /builds is *not* replaced with a mount in the docker container. The worker
+# user writes to lots of subdirectories, though, so it's owned by that user
+mkdir -p /builds
+chown worker:worker /builds
+
+# remove packages installed for the builds above
+yum shell -y <<'EOF'
+remove bzip2-devel
+remove openssl-devel
+remove xz-libs
+remove autoconf
+remove perl-ExtUtils-MakeMaker
+remove gettext-devel
+remove sqlite-devel
+remove perl-devel
+EOF
+
+# clean up caches from all that downloading and building
+cd /
+rm -rf $BUILD ~/.ccache ~/.cache ~/.npm
+yum clean all
+rm $0