• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This Dockerfile specifies the recipe for creating an image for the tests
2# to run in.
3#
4# We install as many test dependencies here as we can, because these setup
5# steps can be cached.  They do *not* run every time we run the build.
6# The Docker image is only rebuilt when the Dockerfile (ie. this file)
7# changes.
8
9# Base Dockerfile for gRPC dev images
10FROM debian:latest
11
12# Apt source for old Python versions.
13RUN echo 'deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu trusty main' > /etc/apt/sources.list.d/deadsnakes.list && \
14  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DB82666C
15
16# Apt source for Oracle Java.
17run echo 'deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main' > /etc/apt/sources.list.d/webupd8team-java-trusty.list && \
18  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 && \
19  echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
20
21# Apt source for Mono
22run echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list && \
23  echo "deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list && \
24  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
25
26# Install dependencies.  We start with the basic ones require to build protoc
27# and the C++ build
28RUN apt-get update && apt-get install -y \
29  autoconf \
30  autotools-dev \
31  build-essential \
32  bzip2 \
33  ccache \
34  curl \
35  gcc \
36  git \
37  libc6 \
38  libc6-dbg \
39  libc6-dev \
40  libgtest-dev \
41  libtool \
42  make \
43  parallel \
44  time \
45  wget \
46  # -- For csharp --
47  mono-devel \
48  referenceassemblies-pcl \
49  nunit \
50  # -- For all Java builds -- \
51  maven \
52  # -- For java_jdk6 -- \
53  #   oops! not in jessie. too old? openjdk-6-jdk \
54  # -- For java_jdk7 -- \
55  openjdk-7-jdk \
56  # -- For java_oracle7 -- \
57  oracle-java7-installer \
58  # -- For python / python_cpp -- \
59  python-setuptools \
60  python-pip \
61  python-dev \
62  python2.6-dev \
63  python3.3-dev \
64  python3.4-dev \
65  # -- For Ruby --
66  ruby \
67  && apt-get clean
68
69##################
70# C# dependencies
71
72RUN wget www.nuget.org/NuGet.exe -O /usr/local/bin/nuget.exe
73
74##################
75# Python dependencies
76
77# These packages exist in apt-get, but their versions are too old, so we have
78# to get updates from pip.
79
80RUN pip install pip --upgrade
81RUN pip install virtualenv tox yattag
82
83
84##################
85# Ruby dependencies
86
87# Install rvm
88RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
89RUN \curl -sSL https://get.rvm.io | bash -s stable
90
91# Install Ruby 2.1
92RUN /bin/bash -l -c "rvm install ruby-2.1"
93RUN /bin/bash -l -c "rvm use --default ruby-2.1"
94RUN /bin/bash -l -c "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
95RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc"
96RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc"
97RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"
98
99##################
100# Java dependencies
101
102# This step requires compiling protoc. :(
103
104ENV MAVEN_REPO /var/maven_local_repository
105ENV MVN mvn --batch-mode
106
107RUN cd /tmp && \
108  git clone https://github.com/google/protobuf.git && \
109  cd protobuf && \
110  ./autogen.sh && \
111  ./configure && \
112  make -j6 && \
113  cd java && \
114  $MVN install dependency:go-offline -Dmaven.repo.local=$MAVEN_REPO -P lite && \
115  $MVN install dependency:go-offline -Dmaven.repo.local=$MAVEN_REPO && \
116  cd ../javanano && \
117  $MVN install dependency:go-offline -Dmaven.repo.local=$MAVEN_REPO
118
119##################
120# Prepare ccache
121
122RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
123RUN ln -s /usr/bin/ccache /usr/local/bin/g++
124RUN ln -s /usr/bin/ccache /usr/local/bin/cc
125RUN ln -s /usr/bin/ccache /usr/local/bin/c++
126RUN ln -s /usr/bin/ccache /usr/local/bin/clang
127RUN ln -s /usr/bin/ccache /usr/local/bin/clang++
128
129# Define the default command.
130CMD ["bash"]
131