blob: b67747f57e277ea513062cca7a538077f7f84372 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Dockerfile for installing the necessary dependencies for building Avro.
# See BUILD.md.
FROM ubuntu:20.04
WORKDIR /root
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=isolemnlysweariamuptonogood \
DEBIAN_FRONTEND=noninteractive
# Install dependencies from vanilla system packages
RUN apt-get -qqy update \
&& apt-get -qqy install --no-install-recommends ant \
apt-transport-https \
apt-utils \
asciidoc \
bison \
build-essential \
bzip2 \
cmake \
cppcheck \
curl \
doxygen \
flex \
g++ \
gcc \
git \
gnupg2 \
libboost-all-dev \
libfontconfig1-dev \
libfreetype6-dev \
libglib2.0-dev \
libjansson-dev \
libreadline-dev \
libsnappy-dev \
libsnappy1v5 \
libssl-dev \
make \
mypy \
openjdk-17-jdk \
openjdk-11-jdk \
openjdk-8-jdk \
perl \
python3 \
python3-pip \
python3-setuptools \
python3-snappy \
python3-venv \
python3-wheel \
source-highlight \
subversion \
valgrind \
vim \
wget \
python3.6 \
python3.7 \
python3.8 \
python3.9 \
python3.10 \
&& apt-get -qqy clean
# Install PHP
RUN apt-get -qqy install --no-install-recommends libzstd-dev \
libbz2-dev \
php \
php-bz2 \
php-gmp \
php-xml \
php-mbstring \
php-dev
# Install a maven release -------------------------------------------
# Inspired from https://github.com/apache/accumulo-docker/blob/master/Dockerfile#L53
ENV MAVEN_VERSION 3.8.6
ENV APACHE_DIST_URLS \
https://www.apache.org/dyn/closer.cgi?action=download&filename= \
# if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/
https://www-us.apache.org/dist/ \
https://www.apache.org/dist/ \
https://archive.apache.org/dist/
RUN set -eux; \
download() { \
local f="$1"; shift; \
local distFile="$1"; shift; \
local success=; \
local distUrl=; \
for distUrl in $APACHE_DIST_URLS; do \
if wget -nv -O "$f" "$distUrl$distFile"; then \
success=1; \
break; \
fi; \
done; \
[ -n "$success" ]; \
}; \
download "maven.tar.gz" "maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz"; \
tar xzf "maven.tar.gz" -C /tmp/; \
mv /tmp/apache-maven-$MAVEN_VERSION /opt/maven; \
rm "maven.tar.gz"
ENV PATH="/opt/maven/bin:${PATH}"
# Install nodejs
RUN curl -sSL https://deb.nodesource.com/setup_14.x \
| bash - \
&& apt-get -qqy install nodejs \
&& apt-get -qqy clean \
&& npm install -g grunt-cli \
&& npm install -g browserify \
&& npm cache clean --force
# Install PHP-snappy and PHP-zstd
ENV PHP7_VERSION=7.4
RUN mkdir tmp && cd tmp \
&& git clone --recursive --depth=1 https://github.com/kjdev/php-ext-zstd.git \
&& cd php-ext-zstd \
&& phpize \
&& ./configure \
&& make \
&& make install \
&& echo "extension=zstd.so" > /etc/php/${PHP7_VERSION}/cli/conf.d/10-zstd.ini \
&& cd .. && rm -rf php-ext-zstd \
&& git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git \
&& cd php-ext-snappy \
&& phpize \
&& ./configure \
&& make \
&& make install \
&& echo "extension=snappy.so" > /etc/php/${PHP7_VERSION}/cli/conf.d/10-snappy.ini \
&& cd .. && rm -rf php-ext-snappy \
&& php -m \
&& apt-get -qqy clean
RUN curl -sS https://getcomposer.org/installer | php -- --version=2.2.5 --install-dir=/usr/local/bin --filename=composer
# Install Perl modules
RUN apt-get -qqy install --no-install-recommends libcompress-raw-zlib-perl \
libcpan-uploader-perl \
libencode-perl \
libio-string-perl \
libjson-xs-perl \
libmodule-install-perl \
libmodule-install-readmefrompod-perl \
libobject-tiny-perl \
libperl-critic-perl \
libregexp-common-perl \
libtest-exception-perl \
libtest-pod-perl \
libtry-tiny-perl \
&& apt-get -qqy clean
RUN curl -sSL https://cpanmin.us \
| perl - --self-upgrade \
&& cpanm --mirror https://www.cpan.org/ install Compress::Zstd \
Module::Install::Repository \
&& rm -rf .cpanm
# Install Python packages
ENV PIP_NO_CACHE_DIR=off
# Install Python3 packages
RUN python3 -m pip install --upgrade pip setuptools wheel \
&& python3 -m pip install tox zstandard
# Install Ruby
RUN apt-get -qqy install ruby-full \
&& apt-get -qqy clean
RUN mkdir -p /tmp/lang/ruby/lib/avro && mkdir -p /tmp/share
COPY lang/ruby/* /tmp/lang/ruby/
COPY share/VERSION.txt /tmp/share/
RUN gem install bundler --no-document && \
apt-get install -qqy libyaml-dev && \
cd /tmp/lang/ruby && bundle install
# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.60.0
# Note: This "ubertool" container has two JDK versions:
# - OpenJDK 8
# - OpenJDK 11
# - OpenJDK 17
# - The root build.sh script switches between the versions according to
# the JAVA environment variable.
# Install .NET SDK
RUN cd /opt ; \
wget https://dot.net/v1/dotnet-install.sh ; \
bash ./dotnet-install.sh --channel "3.1" --install-dir "/opt/dotnet" ; \
bash ./dotnet-install.sh --channel "5.0" --install-dir "/opt/dotnet" ; \
bash ./dotnet-install.sh --channel "6.0" --install-dir "/opt/dotnet" ; \
bash ./dotnet-install.sh --channel "7.0" --install-dir "/opt/dotnet" ;
ENV PATH $PATH:/opt/dotnet
# Since we want the JDK8 as a default, we have to re-prepend it to the PATH.
RUN update-java-alternatives -s "java-1.8.0*"
CMD ["/bin/bash", "-i"]