/
githubmirror
/
alluxio
Обзор
Документация
Войти
/
githubmirror
/
alluxio
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v310
dev/github/Dockerfile-jdk17
181 строка
9 KB
Bowen Ding
Add Rust toolchain to CI
26 окт 2023, 08:33
Не верифицирован
26 окт 2023, 08:33
53c49f7
Код
Авторство
О чём код?
# # The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 # (the "License"). You may not use this work except in compliance with the License, which is # available at www.apache.org/licenses/LICENSE-2.0 # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, # either express or implied, as more fully set forth in the License. # # See the NOTICE file distributed with this work for information regarding copyright ownership. # # See https://hub.docker.com/r/alluxio/alluxio-maven for instructions on running the image. ARG RUST_VERSION=1.66.1 # Official rust image from https://github.com/rust-lang/docker-rust/blob/master/Dockerfile-debian.template # This image installs rustup and cargo into /usr/local/{rustup,cargo} # we install additional targets and components, # and copy the toolchains from this image into the maven base image in the next stage FROM rust:${RUST_VERSION} as rust-installer RUN rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu && \ rustup component add clippy rustfmt && \ # move the two directories into an empty directory to save one COPY instruction in the next stage mkdir /cargo-and-rustup && \ mv /usr/local/rustup /cargo-and-rustup/rustup && \ mv /usr/local/cargo /cargo-and-rustup/cargo FROM maven:3.8.6-eclipse-temurin-17 # ARGs only last for the build phase of a single image. Redefine it to make it available in this stage as well. # See https://stackoverflow.com/questions/53681522/share-variable-in-multi-stage-dockerfile-arg-before-from-not-substituted ARG RUST_VERSION ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ RUST_VERSION=${RUST_VERSION} COPY --from=rust-installer /cargo-and-rustup /usr/local/ # reference: https://github.com/docker-library/openjdk/blob/master/8/jdk/buster/Dockerfile # we need jdk 8 in jdk 17 so that we can compile with jdk 8 and test with jdk 17 ENV JAVA_HOME /usr/local/openjdk-8 ENV PATH $JAVA_HOME/bin:$PATH # backwards compatibility shim 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)" ] RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ bzip2 \ unzip \ xz-utils \ \ # java.lang.UnsatisfiedLinkError: /usr/local/openjdk-11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory # java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager # https://github.com/docker-library/openjdk/pull/235#issuecomment-424466077 fontconfig libfreetype6 \ \ # utilities for keeping Debian and OpenJDK CA certificates in sync ca-certificates p11-kit \ # additional packages not installed in slim base image \ wget gnupg git \ ; \ rm -rf /var/lib/apt/lists/* # https://stackoverflow.com/questions/72978485/git-submodule-update-failed-with-fatal-detected-dubious-ownership-in-repositor RUN git config --global safe.directory '*' ENV JAVA_HOME /usr/local/openjdk-8 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)" ] # backwards compatibility ENV PATH $JAVA_HOME/bin:$PATH # Default to UTF-8 file.encoding ENV LANG C.UTF-8 # https://adoptopenjdk.net/upstream.html # > # > What are these binaries? # > # > These binaries are built by Red Hat on their infrastructure on behalf of the OpenJDK jdk8u and jdk11u projects. The binaries are created from the unmodified source code at OpenJDK. Although no formal support agreement is provided, please report any bugs you may find to https://bugs.java.com/. # > ENV JAVA_VERSION 8u332 # https://github.com/docker-library/openjdk/issues/320#issuecomment-494050246 # > # > I am the OpenJDK 8 and 11 Updates OpenJDK project lead. # > ... # > While it is true that the OpenJDK Governing Board has not sanctioned those releases, they (or rather we, since I am a member) didn't sanction Oracle's OpenJDK releases either. As far as I am aware, the lead of an OpenJDK project is entitled to release binary builds, and there is clearly a need for them. # > RUN set -eux; \ \ arch="$(dpkg --print-architecture)"; \ case "$arch" in \ 'amd64') \ downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_linux_8u332b09.tar.gz'; \ ;; \ 'arm64') \ downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_aarch64_linux_8u332b09.tar.gz'; \ ;; \ *) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;; \ esac; \ \ wget --progress=dot:giga -O openjdk.tgz "$downloadUrl"; \ wget --progress=dot:giga -O openjdk.tgz.asc "$downloadUrl.sign"; \ \ export GNUPGHOME="$(mktemp -d)"; \ # pre-fetch Andrew Haley's (the OpenJDK 8 and 11 Updates OpenJDK project lead) key so we can verify that the OpenJDK key was signed by it # (https://github.com/docker-library/openjdk/pull/322#discussion_r286839190) # we pre-fetch this so that the signature it makes on the OpenJDK key can survive "import-clean" in gpg gpg --batch --keyserver keyserver.ubuntu.com --recv-keys EAC843EBD3EFDB98CC772FADA5CD6035332FA671; \ # 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? # no-self-sigs-only: https://salsa.debian.org/debian/gnupg2/commit/c93ca04a53569916308b369c8b218dad5ae8fe07 gpg --batch --keyserver keyserver.ubuntu.com --keyserver-options no-self-sigs-only --recv-keys CA5F11C6CE22644D42C6AC4492EF8D39DC13168F; \ gpg --batch --list-sigs --keyid-format 0xLONG CA5F11C6CE22644D42C6AC4492EF8D39DC13168F \ | tee /dev/stderr \ | grep '0xA5CD6035332FA671' \ | grep 'Andrew Haley'; \ gpg --batch --verify openjdk.tgz.asc openjdk.tgz; \ gpgconf --kill all; \ rm -rf "$GNUPGHOME"; \ \ mkdir -p "$JAVA_HOME"; \ tar --extract \ --file openjdk.tgz \ --directory "$JAVA_HOME" \ --strip-components 1 \ --no-same-owner \ ; \ rm openjdk.tgz*; \ \ # update "cacerts" bundle to use Debian's CA certificates (and make sure it stays up-to-date with changes to Debian's store) # see https://github.com/docker-library/openjdk/issues/327 # http://rabexc.org/posts/certificates-not-working-java#comment-4099504075 # https://salsa.debian.org/java-team/ca-certificates-java/blob/3e51a84e9104823319abeb31f880580e46f45a98/debian/jks-keystore.hook.in # https://git.alpinelinux.org/aports/tree/community/java-cacerts/APKBUILD?id=761af65f38b4570093461e6546dcf6b179d2b624#n29 { \ echo '#!/usr/bin/env bash'; \ echo 'set -Eeuo pipefail'; \ echo 'trust extract --overwrite --format=java-cacerts --filter=ca-anchors --purpose=server-auth "$JAVA_HOME/jre/lib/security/cacerts"'; \ } > /etc/ca-certificates/update.d/docker-openjdk; \ chmod +x /etc/ca-certificates/update.d/docker-openjdk; \ /etc/ca-certificates/update.d/docker-openjdk; \ \ # https://github.com/docker-library/openjdk/issues/331#issuecomment-498834472 find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; \ ldconfig; \ \ # basic smoke test to see if the default is jdk 8 javac -version; \ java -version ENV JAVA_HOME /usr/local/openjdk-17 ENV PATH $JAVA_HOME/bin:$PATH # basic smoke test to see if the default is jdk 17 RUN set -eux; \ javac -version; \ java -version # need to create /.config to avoid npm errors RUN mkdir -p /home/jenkins && \ chmod -R 777 /home/jenkins && \ chmod g+w /etc/passwd && \ mkdir -p /.config && \ chmod -R 777 /.config && \ apt-get update -y && \ apt-get upgrade -y ca-certificates && \ apt-get install -y build-essential docker.io fuse3 libfuse3-dev libfuse-dev make ruby ruby-dev # jekyll for documentation RUN gem install public_suffix:4.0.7 jekyll:4.2.2 bundler:2.3.18 # golang for tooling RUN ARCH=$(dpkg --print-architecture) && \ wget https://go.dev/dl/go1.18.1.linux-${ARCH}.tar.gz && \ tar -xvf go1.18.1.linux-${ARCH}.tar.gz && \ mv go /usr/local ENV GOROOT=/usr/local/go ENV PATH=$GOROOT/bin:$PATH # terraform for deployment scripts RUN ARCH=$(dpkg --print-architecture) && \ wget --quiet https://releases.hashicorp.com/terraform/1.0.1/terraform_1.0.1_linux_${ARCH}.zip && \ unzip -o ./terraform_1.0.1_linux_${ARCH}.zip -d /usr/local/bin/ && \ rm terraform_1.0.1_linux_${ARCH}.zip