1- FROM python:2.7-stretch
1+ FROM python:3.8-buster
22
33# CircleCI required tools
44RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -19,20 +19,20 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
1919pkg-config \
2020&& rm -rf /var/lib/apt/lists/*
2121
22- ENV GOLANG_VERSION 1.12.7
22+ ENV GOLANG_VERSION 1.14.4
2323
2424RUN set -eux; \
2525\
2626# this "case" statement is generated via "update.sh"
2727dpkgArch="$(dpkg --print-architecture)" ; \
2828case"${dpkgArch##*-}" in \
29- amd64) goRelArch='linux-amd64' ; goRelSha256='66d83bfb5a9ede000e33c6579a91a29e6b101829ad41fffb5c5bb6c900e109d9 ' ;; \
30- armhf) goRelArch='linux-armv6l' ; goRelSha256='48edbe936e9eb74f259bfc4b621fafca4d4ec43156b4ee7bd0d979f257dcd60a ' ;; \
31- arm64) goRelArch='linux-arm64' ; goRelSha256='4da1f7198a8fa0c4067852656b6c10153a4eca5a26aca28ef02ae9f4a7939ba5 ' ;; \
32- i386) goRelArch='linux-386' ; goRelSha256='ae2424b7ff557a708be12d3141f25b645966489ca49af1ad10b4fbe4c97d4c41 ' ;; \
33- ppc64el) goRelArch='linux-ppc64le' ; goRelSha256='8eda20600d90247efbfa70d116d80056e11192d62592240975b2a8c53caa5bf3 ' ;; \
34- s390x) goRelArch='linux-s390x' ; goRelSha256='3374ac3d646555e50be790091b51849319cfcb176904048458c7f4252337fce8 ' ;; \
35- *) goRelArch='src' ; goRelSha256='95e8447d6f04b8d6a62de1726defbb20ab203208ee167ed15f83d7978ce43b13 ' ; \
29+ amd64) goRelArch='linux-amd64' ; goRelSha256='aed845e4185a0b2a3c3d5e1d0a35491702c55889192bb9c30e67a3de6849c067 ' ;; \
30+ armhf) goRelArch='linux-armv6l' ; goRelSha256='e20211425b3f797ca6cd5e9a99ab6d5eaf1b009d08d19fc8a7835544fa58c703 ' ;; \
31+ arm64) goRelArch='linux-arm64' ; goRelSha256='05dc46ada4e23a1f58e72349f7c366aae2e9c7a7f1e7653095538bc5bba5e077 ' ;; \
32+ i386) goRelArch='linux-386' ; goRelSha256='4179f406ea0efd455a8071eaaaf1dea92cac5c17aab89fbad18ea2a37623c810 ' ;; \
33+ ppc64el) goRelArch='linux-ppc64le' ; goRelSha256='b335f85bc935ca3f553ad1bac37da311aaec887ffd8a48cb58a0abb0d8adf324 ' ;; \
34+ s390x) goRelArch='linux-s390x' ; goRelSha256='17f2ae0bae968b3d909daabc5cc4a37471ddb70ec49076b78702291e6772d71a ' ;; \
35+ *) goRelArch='src' ; goRelSha256='7011af3bbc2ac108d1b82ea8abb87b2e63f78844f0259be20cde4d42c5c40584 ' ; \
3636echo >&2; echo >&2"warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source" ; echo >&2 ;; \
3737esac; \
3838\
@@ -60,74 +60,59 @@ RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
6060# --------------- End Go Part ---------------
6161
6262# --------------- Start Java Part ---------------
63- RUN mkdir ~/.gnupg
64- RUN echo"disable-ipv6" >> ~/.gnupg/dirmngr.conf
65- RUN set -eux; \
66- apt-get update; \
67- apt-get install -y --no-install-recommends \
63+ RUN apt-get update && apt-get install -y --no-install-recommends \
6864bzip2 \
6965unzip \
7066xz-utils \
71- \
72- # java.lang.UnsatisfiedLinkError: /usr/local/openjdk-11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory
73- # java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
74- # https://github.com/docker-library/openjdk/pull/235#issuecomment-424466077
75- fontconfig libfreetype6 \
76- ; \
77- rm -rf /var/lib/apt/lists/*
67+ && rm -rf /var/lib/apt/lists/*
7868
7969# Default to UTF-8 file.encoding
8070ENV LANG C.UTF-8
8171
82- ENV JAVA_HOME /usr/local/openjdk-8
83- ENV PATH $JAVA_HOME/bin:$PATH
84-
85- # backwards compatibility shim
86- RUN { echo'#/bin/sh' ; echo'echo "$JAVA_HOME"' ; } > /usr/local/bin/docker-java-home && chmod +x /usr/local/bin/docker-java-home && ["$JAVA_HOME" ="$(docker-java-home)" ]
72+ # add a simple script that can auto-detect the appropriate JAVA_HOME value
73+ # based on whether the JDK or only the JRE is installed
74+ RUN { \
75+ echo'#!/bin/sh' ; \
76+ echo'set -e' ; \
77+ echo; \
78+ echo'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"' ; \
79+ } > /usr/local/bin/docker-java-home \
80+ && chmod +x /usr/local/bin/docker-java-home
8781
88- # https://adoptopenjdk.net/upstream.html
89- ENV JAVA_VERSION 8u212-b04
90- ENV JAVA_BASE_URL https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u212-b04/OpenJDK8U-
91- ENV JAVA_URL_VERSION 8u212b04
92- # https://github.com/docker-library/openjdk/issues/320#issuecomment-494050246
82+ # do some fancy footwork to create a JAVA_HOME that's cross-architecture-safe
83+ RUN ln -svT"/usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)" /docker-java-home
84+ ENV JAVA_HOME /docker-java-home
9385
94- RUN set -eux; \
95- \
96- dpkgArch="$(dpkg --print-architecture)" ; \
97- case"$dpkgArch" in \
98- amd64) upstreamArch='x64' ;; \
99- arm64) upstreamArch='aarch64' ;; \
100- *) echo >&2"error: unsupported architecture: $dpkgArch" ;; \
101- esac; \
102- \
103- wget -O openjdk.tgz.asc"${JAVA_BASE_URL}${upstreamArch}_linux_${JAVA_URL_VERSION}.tar.gz.sign" ; \
104- wget -O openjdk.tgz"${JAVA_BASE_URL}${upstreamArch}_linux_${JAVA_URL_VERSION}.tar.gz" --progress=dot:giga; \
86+ RUN set -ex; \
10587\
106- export GNUPGHOME="$(mktemp -d)" ; \
107- # TODO find a good link for users to verify this key is right (https://mail.openjdk.java.net/pipermail/jdk-updates-dev/2019-April/000951.html is one of the only mentions of it I can find); perhaps a note added to https://adoptopenjdk.net/upstream.html would make sense?
108- gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys CA5F11C6CE22644D42C6AC4492EF8D39DC13168F; \
109- # https://github.com/docker-library/openjdk/pull/322#discussion_r286839190
110- gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys EAC843EBD3EFDB98CC772FADA5CD6035332FA671; \
111- gpg --batch --list-sigs --keyid-format 0xLONG CA5F11C6CE22644D42C6AC4492EF8D39DC13168F | grep'0xA5CD6035332FA671' | grep'Andrew Haley' ; \
112- gpg --batch --verify openjdk.tgz.asc openjdk.tgz; \
113- gpgconf --kill all; \
114- rm -rf"$GNUPGHOME" ; \
88+ # deal with slim variants not having man page directories (which causes "update-alternatives" to fail)
89+ if [ ! -d /usr/share/man/man1 ]; then \
90+ mkdir -p /usr/share/man/man1; \
91+ fi; \
11592\
116- mkdir -p"$JAVA_HOME" ; \
117- tar --extract --file openjdk.tgz --directory"$JAVA_HOME" --strip-components 1; \
118- rm openjdk.tgz*; \
93+ apt-get update; \
94+ apt-get install -y --no-install-recommends \
95+ openjdk-11-jdk \
96+ ca-certificates-java \
97+ ; \
98+ rm -rf /var/lib/apt/lists/*; \
11999\
120- # TODO strip "demo" and "man" folders?
100+ # verify that "docker-java-home" returns what we expect
101+ ["$(readlink -f " $JAVA_HOME")" ="$(docker-java-home)" ]; \
121102\
122- # basic smoke test
123- javac -version; \
124- java -version
103+ # update-alternatives so that future installs of other OpenJDK versions don't change /usr/bin/java
104+ update-alternatives --get-selections | awk -v home="$(readlink -f " $JAVA_HOME")" 'index($3, home) == 1 { $2 = "manual"; print | "update-alternatives --set-selections" }' ; \
105+ # ... and verify that it actually worked for one of the alternatives we care about
106+ update-alternatives --query java | grep -q'Status: manual'
107+
108+ # see CA_CERTIFICATES_JAVA_VERSION notes above
109+ RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure
125110# --------------- End Java Part ---------------
126111
127112# --------------- Start Maven Part ---------------
128- ARG MAVEN_VERSION=3.5.4
113+ ARG MAVEN_VERSION=3.6.3
129114ARG USER_HOME_DIR="/root"
130- ARG SHA=ce50b1c91364cb77efe3776f756a6d92b76d9038b0a0782f7d53acf1e997a14d
115+ ARG SHA=26ad91d751b3a9a53087aefa743f4e16a17741d3915b219cf74112bf87a438c5
131116ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
132117
133118RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
@@ -148,7 +133,7 @@ RUN apt-get update && apt-get install -y \
148133 && apt-get clean
149134
150135# install protobuf first, then grpc
151- ENV GRPC_RELEASE_TAG v1.16 .x
136+ ENV GRPC_RELEASE_TAG v1.29 .x
152137RUN git clone -b ${GRPC_RELEASE_TAG} https://github.com/grpc/grpc /var/local/git/grpc && \
153138 cd /var/local/git/grpc && \
154139 git submodule update --init && \
@@ -169,10 +154,10 @@ RUN mkdir -p /usr/local/etc \
169154echo'update: --no-document' ; \
170155} >> /usr/local/etc/gemrc
171156
172- ENV RUBY_MAJOR 2.5
173- ENV RUBY_VERSION2.5.3
174- ENV RUBY_DOWNLOAD_SHA2561cc9d0359a8ea35fc6111ec830d12e60168f3b9b305a3c2578357d360fcf306f
175- ENV RUBYGEMS_VERSION 3.0.1
157+ ENV RUBY_MAJOR 2.7
158+ ENV RUBY_VERSION"2.7.0-rc1"
159+ ENV RUBY_DOWNLOAD_SHA2567528db87df7a8cbfdcbd053073839f5a00b2a38f807771e3e45000e72fc86732
160+ ENV RUBYGEMS_VERSION 3.1.4
176161
177162# some of ruby's build scripts are written in ruby
178163# we purge system ruby later to make sure our final image uses what we just built
@@ -188,7 +173,7 @@ RUN set -ex \
188173&& apt-get install -y --no-install-recommends $buildDeps \
189174&& rm -rf /var/lib/apt/lists/* \
190175\
191- && wget -O ruby.tar.xz"https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc }/ruby-$RUBY_VERSION.tar.xz" \
176+ && wget -O ruby.tar.xz"https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR}/ruby-$RUBY_VERSION.tar.xz" \
192177&& echo"$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum -c - \
193178\
194179&& mkdir -p /usr/src/ruby \
@@ -238,7 +223,7 @@ RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME"
238223# --------------- End Ruby Part ---------------
239224
240225# --------------- Start NodeJS Part --------------
241- ENV NODE_VERSION11.15 .0
226+ ENV NODE_VERSION12.17 .0
242227
243228RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
244229 && case"${dpkgArch##*-}" in \
@@ -253,15 +238,12 @@ RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
253238# gpg keys listed at https://github.com/nodejs/node#release-keys
254239 && set -ex \
255240 && for key in \
241+ 4ED778F539E3634C779C87C6D7062848A1AB005C \
256242 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
257- FD3A5288F042B6850C66B31F09FE44734EB7990E \
258243 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
259- DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
260- C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
261- B9AE9905FFD7803F25714661B63B535A4C206CA9 \
262- 77984A986EBC2AA786BC0F66B01FBB92821C587A \
263244 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
264- 4ED778F539E3634C779C87C6D7062848A1AB005C \
245+ C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
246+ DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
265247 A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
266248 B9E2F5981AA6E0CD28160D9FF13993A75599653C \
267249 ; do \
@@ -277,7 +259,7 @@ RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
277259 && rm"node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
278260 && ln -s /usr/local/bin/node /usr/local/bin/nodejs
279261
280- ENV YARN_VERSION 1.15.2
262+ ENV YARN_VERSION 1.22.4
281263
282264RUN set -ex \
283265 && for key in \
@@ -303,4 +285,3 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
303285 git \
304286&& rm -rf /var/lib/apt/lists/* \
305287 && pip install virtualenv grpcio
306-