1# Licensed under the Apache License, Version 2.0 (the "License"); 2# you may not use this file except in compliance with the License. 3# You may obtain a copy of the License at 4# 5# http://www.apache.org/licenses/LICENSE-2.0 6# 7# Unless required by applicable law or agreed to in writing, software 8# distributed under the License is distributed on an "AS IS" BASIS, 9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10# See the License for the specific language governing permissions and 11# limitations under the License. 12 13# 14# Apache Thrift Docker build environment for Ubuntu Disco 15# with some updated packages. 16# 17 18FROM buildpack-deps:disco-scm 19MAINTAINER Apache Thrift <dev@thrift.apache.org> 20ENV DEBIAN_FRONTEND noninteractive 21 22### Add apt repos 23 24RUN apt-get update && \ 25 apt-get dist-upgrade -y && \ 26 apt-get install -y --no-install-recommends \ 27 apt \ 28 apt-transport-https \ 29 apt-utils \ 30 curl \ 31 dirmngr \ 32 software-properties-common \ 33 wget 34 35# Dart 36RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ 37 curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > \ 38 /etc/apt/sources.list.d/dart_stable.list 39 40# dotnet (netcore) 41RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg && \ 42 wget -q -O /etc/apt/sources.list.d/microsoft-prod.list https://packages.microsoft.com/config/ubuntu/18.04/prod.list && \ 43 chown root:root /etc/apt/trusted.gpg.d/microsoft.gpg && \ 44 chown root:root /etc/apt/sources.list.d/microsoft-prod.list 45 46# erlang 47RUN wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | apt-key add - && \ 48 echo "deb https://packages.erlang-solutions.com/ubuntu disco contrib" | tee /etc/apt/sources.list.d/erlang.list 49 50# node.js 51RUN curl -sL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \ 52 echo "deb https://deb.nodesource.com/node_10.x disco main" | tee /etc/apt/sources.list.d/nodesource.list 53 54### install general dependencies 55RUN apt-get update && apt-get install -y --no-install-recommends \ 56`# General dependencies` \ 57 bash-completion \ 58 bison \ 59 build-essential \ 60 clang \ 61 cmake \ 62 debhelper \ 63 flex \ 64 gdb \ 65 libasound2 \ 66 libatk-bridge2.0-0 \ 67 libgtk-3-0 \ 68 llvm \ 69 ninja-build \ 70 pkg-config \ 71 unzip \ 72 valgrind \ 73 vim 74ENV PATH /usr/lib/llvm-6.0/bin:$PATH 75 76# lib/as3 (ActionScript) 77RUN mkdir -p /usr/local/adobe/flex/4.6 && \ 78 cd /usr/local/adobe/flex/4.6 && \ 79 wget -q "http://download.macromedia.com/pub/flex/sdk/flex_sdk_4.6.zip" && \ 80 unzip flex_sdk_4.6.zip 81ENV FLEX_HOME /usr/local/adobe/flex/4.6 82 83RUN apt-get install -y --no-install-recommends \ 84`# C++ dependencies` \ 85 libboost-all-dev \ 86 libevent-dev \ 87 libssl-dev \ 88 qt5-default \ 89 qtbase5-dev \ 90 qtbase5-dev-tools 91 92ENV SBCL_VERSION 1.5.3 93RUN \ 94`# Common Lisp (sbcl) dependencies` \ 95 curl --version && \ 96 curl -o sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 -J -L https://sourceforge.net/projects/sbcl/files/sbcl/${SBCL_VERSION}/sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2/download?use_mirror=managedway# && \ 97 tar xjf sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 && \ 98 cd sbcl-${SBCL_VERSION}-x86-64-linux && \ 99 ./install.sh && \ 100 sbcl --version && \ 101 cd .. && \ 102 rm -rf sbcl* 103 104ENV D_VERSION 2.087.0 105ENV DMD_DEB dmd_2.087.0-0_amd64.deb 106RUN \ 107`# D dependencies` \ 108 wget -q http://downloads.dlang.org/releases/2.x/${D_VERSION}/${DMD_DEB} && \ 109 dpkg --install ${DMD_DEB} && \ 110 rm -f ${DMD_DEB} && \ 111 mkdir -p /usr/include/dmd/druntime/import/deimos /usr/include/dmd/druntime/import/C && \ 112 git clone -b 'v2.0.2+2.0.16' https://github.com/D-Programming-Deimos/libevent.git deimos-libevent-2.0 && \ 113 mv deimos-libevent-2.0/deimos/* /usr/include/dmd/druntime/import/deimos/ && \ 114 mv deimos-libevent-2.0/C/* /usr/include/dmd/druntime/import/C/ && \ 115 rm -rf deimos-libevent-2.0 && \ 116 git clone -b 'v2.0.0+1.1.0h' https://github.com/D-Programming-Deimos/openssl.git deimos-openssl-1.1.0h && \ 117 mv deimos-openssl-1.1.0h/deimos/* /usr/include/dmd/druntime/import/deimos/ && \ 118 mv deimos-openssl-1.1.0h/C/* /usr/include/dmd/druntime/import/C/ && \ 119 rm -rf deimos-openssl-1.1.0h 120 121ENV DART_VERSION 2.4.0-1 122RUN apt-get install -y --no-install-recommends \ 123 `# Dart dependencies` \ 124 dart=$DART_VERSION 125ENV PATH /usr/lib/dart/bin:$PATH 126 127RUN apt-get install -y --no-install-recommends \ 128`# dotnet core dependencies` \ 129 dotnet-sdk-3.1 130 131RUN apt-get install -y --no-install-recommends \ 132`# Erlang dependencies` \ 133 erlang && \ 134 wget https://s3.amazonaws.com/rebar3/rebar3 -O /usr/bin/rebar3 && \ 135 chmod 755 /usr/bin/rebar3 && \ 136 rebar3 --version 137 138RUN apt-get install -y --no-install-recommends \ 139`# GlibC dependencies` \ 140 libglib2.0-dev 141 142# golang 143ENV GOLANG_VERSION 1.15.7 144ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz 145ENV GOLANG_DOWNLOAD_SHA256 0d142143794721bb63ce6c8a6180c4062bcf8ef4715e7d6d6609f3a8282629b3 146RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz && \ 147 echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - && \ 148 tar -C /usr/local -xzf golang.tar.gz && \ 149 ln -s /usr/local/go/bin/go /usr/local/bin && \ 150 rm golang.tar.gz 151 152RUN apt-get install -y --no-install-recommends \ 153`# Haskell dependencies` \ 154 ghc \ 155 cabal-install 156 157RUN apt-get install -y --no-install-recommends \ 158`# Haxe dependencies` \ 159 haxe \ 160 neko \ 161 neko-dev && \ 162 haxelib setup --always /usr/share/haxe/lib && \ 163 haxelib install --always hxcpp 2>&1 > /dev/null 164 165RUN apt-get install -y --no-install-recommends \ 166`# Java dependencies` \ 167 ant \ 168 ant-optional \ 169 maven \ 170 openjdk-11-jdk-headless 171 172RUN apt-get install -y --no-install-recommends \ 173`# Lua dependencies` \ 174 lua5.2 \ 175 lua5.2-dev 176# https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212 177# lua5.3 does not install alternatives! 178# need to update our luasocket code, lua doesn't have luaL_openlib any more 179 180RUN apt-get install -y --no-install-recommends \ 181`# Node.js dependencies` \ 182 nodejs 183 184# Test dependencies for running puppeteer 185RUN apt-get install -y --no-install-recommends \ 186`# JS dependencies` \ 187 libxss1 188 189# does not work on disco? 190# RUN apt-get install -y --no-install-recommends \ 191# `# OCaml dependencies` \ 192# ocaml \ 193# opam && \ 194# opam init --yes && \ 195# opam install --yes oasis 196 197RUN apt-get install -y --no-install-recommends \ 198`# Perl dependencies` \ 199 libbit-vector-perl \ 200 libclass-accessor-class-perl \ 201 libcrypt-ssleay-perl \ 202 libio-socket-ssl-perl \ 203 libnet-ssleay-perl \ 204 libtest-exception-perl 205 206RUN apt-get install -y --no-install-recommends \ 207`# Php dependencies` \ 208 php \ 209 php-cli \ 210 php-dev \ 211 php-json \ 212 php-pear \ 213 re2c \ 214 composer 215 216RUN apt-get install -y --no-install-recommends \ 217`# Python dependencies` \ 218 python-all \ 219 python-all-dbg \ 220 python-all-dev \ 221 python-ipaddress \ 222 python-pip \ 223 python-setuptools \ 224 python-six \ 225 python-tornado \ 226 python-twisted \ 227 python-wheel \ 228 python-zope.interface && \ 229 pip install --upgrade backports.ssl_match_hostname 230 231RUN apt-get install -y --no-install-recommends \ 232`# Python3 dependencies` \ 233 python3-all \ 234 python3-all-dbg \ 235 python3-all-dev \ 236 python3-pip \ 237 python3-setuptools \ 238 python3-six \ 239 python3-tornado \ 240 python3-twisted \ 241 python3-wheel \ 242 python3-zope.interface 243 244RUN apt-get install -y --no-install-recommends \ 245`# Ruby dependencies` \ 246 ruby \ 247 ruby-dev \ 248 ruby-bundler 249 250# Rust dependencies 251RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain 1.40.0 -y 252ENV PATH /root/.cargo/bin:$PATH 253 254# Swift on Linux for cross tests 255# does not work on disco 256# RUN cd / && \ 257# wget --quiet https://swift.org/builds/swift-4.2.1-release/ubuntu1804/swift-4.2.1-RELEASE/swift-4.2.1-RELEASE-ubuntu18.04.tar.gz && \ 258# tar xf swift-4.2.1-RELEASE-ubuntu18.04.tar.gz --strip-components=1 && \ 259# rm swift-4.2.1-RELEASE-ubuntu18.04.tar.gz && \ 260# swift --version 261 262# cppcheck-1.82 has a nasty cpp parser bug, so we're using something newer 263# don't need this on disco, nobody uses it 264# RUN apt-get install -y --no-install-recommends \ 265# `# Static Code Analysis dependencies` \ 266# cppcheck \ 267# sloccount && \ 268# pip install flake8 && \ 269# wget -q "https://launchpad.net/ubuntu/+source/cppcheck/1.83-2/+build/14874703/+files/cppcheck_1.83-2_amd64.deb" && \ 270# dpkg -i cppcheck_1.83-2_amd64.deb && \ 271# rm cppcheck_1.83-2_amd64.deb 272 273# Clean up 274RUN rm -rf /var/cache/apt/* && \ 275 rm -rf /var/lib/apt/lists/* && \ 276 rm -rf /tmp/* && \ 277 rm -rf /var/tmp/* 278 279ENV THRIFT_ROOT /thrift 280RUN mkdir -p $THRIFT_ROOT/src 281COPY Dockerfile $THRIFT_ROOT/ 282WORKDIR $THRIFT_ROOT/src 283