-
-
Notifications
You must be signed in to change notification settings - Fork 251
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added optional arg to -D/--podman/--docker base image to use (#3869)
* Added optional arg to -D/--podman/--docker base image to use it is also correctly passed to image generator, however taht is not tuned to work * seaparate local declaration and no backticks and no sed * Using current arch as arch instead of ahrdcoded * Added fedora depndencies With this, the fedora containers finshed correctly with images * Now working also on centos 9 * Now centos:stream8 * Fixed indentation * Update sbin/common/common.sh Co-authored-by: Martijn Verburg <[email protected]> * missing article Co-authored-by: Martijn Verburg <[email protected]> * Added more coments to optional image argumetn check * Removed hardcoded x64 arch * Added few more commens if comments are on * Reorgnaized order of operations in docekrtfile Generally sort them by disk footprint size. Motivation is, that allt he snapshjots were created after the install of all deps hapened. So instead of snapshoting 55mb base image with new symlink, it was snapshoting 1g or more image with all deps. Now all small-sized operations happens firsr then basic dependences happens, so most of the other operations can run last are huge ones: installing of all dependencies and cloning the jdk All is closed byu change of user to openjdk That reuired splitting of dn/apt to two parts, and thus extracting a bit of suddenly duplicated code to functions * $() and " for bash lint * Added support for centos:7 * Update sbin/common/config_init.sh Co-authored-by: Martijn Verburg <[email protected]> * Update sbin/common/config_init.sh Co-authored-by: Martijn Verburg <[email protected]> * Update sbin/common/config_init.sh Co-authored-by: Martijn Verburg <[email protected]> * removed missleading comment --------- Co-authored-by: Martijn Verburg <[email protected]>
- Loading branch information
Showing
5 changed files
with
264 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,8 +24,21 @@ DOCKERFILE_DIR= | |
DOCKERFILE_PATH= | ||
# Default to JDK8 | ||
JDK_VERSION=8 | ||
IMAGE="ubuntu:18.04" | ||
JDK_MAX= | ||
JDK_GA= | ||
DNF_INSTALL=dnf | ||
|
||
UBUNTU_PREAMBLE="apt-get update \\ | ||
&& apt-get install -qq -u --no-install-recommends \\ | ||
software-properties-common \\ | ||
dirmngr \\ | ||
gpg-agent \\ | ||
coreutils \\ | ||
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0x219BD9C9 \\ | ||
&& add-apt-repository 'deb http://repos.azulsystems.com/ubuntu stable main' \\ | ||
&& apt-get update \\ | ||
&& apt-get -y upgrade \\" | ||
|
||
getFile() { | ||
if [ $# -ne 2 ]; then | ||
|
@@ -93,6 +106,11 @@ processArgs() { | |
shift | ||
shift | ||
;; | ||
--base-image) | ||
IMAGE="${2}" | ||
shift | ||
shift | ||
;; | ||
--path) | ||
DOCKERFILE_DIR=$2 | ||
shift | ||
|
@@ -152,6 +170,7 @@ usage() { | |
Options: | ||
--help | -h Print this message and exit | ||
--build Build the docker image after generation and create interactive container | ||
--base-image set the base image if used container. Default: $IMAGE | ||
--clean Remove all dockerfiles (Dockerfile*) from '--path' | ||
--comments Prints comments into the dockerfile | ||
--dirs space separated list of dirs to be created, with proper permissions | ||
|
@@ -186,41 +205,79 @@ printPreamble() { | |
# SPDX-License-Identifier: Apache-2.0 | ||
# ******************************************************************************** | ||
FROM ubuntu:18.04 | ||
FROM $IMAGE | ||
LABEL maintainer=\"AdoptOpenJDK <[email protected]>\" | ||
" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
# Put in apt packages required for building a JDK | ||
printAptPackages() { | ||
|
||
printAptPackagesBase() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo " | ||
# Install required OS tools | ||
# Install required OS tools to setup environment as .deb via apt-get | ||
# dirmngr, gpg-agent & coreutils are all required for the apt-add repository command" >> "$DOCKERFILE_PATH" | ||
fi | ||
echo " | ||
RUN $UBUNTU_PREAMBLE | ||
&& apt-get install -qq -y --no-install-recommends \\ | ||
curl \\ | ||
git \\ | ||
unzip \\ | ||
wget \\ | ||
zip " >> "$DOCKERFILE_PATH" | ||
echo " | ||
RUN rm -rf /var/lib/apt/lists/*" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printDnfPackagesBase() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo " | ||
# Install required OS tools to setup environment as rpms via dnf" >> "$DOCKERFILE_PATH" | ||
fi | ||
local skipGpg="" # it may bite from time to time | ||
#local skipGpg="--nogpgcheck" | ||
local erasing="--allowerasing" | ||
if [ ${DNF_INSTALL} = yum ] ; then | ||
erasing="" | ||
fi | ||
if echo "${IMAGE}" | grep -e "stream8" -e "centos:7" ; then | ||
echo " | ||
RUN cd /etc/yum.repos.d/ ; sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* | ||
RUN cd /etc/yum.repos.d/ ; sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* " >> "$DOCKERFILE_PATH" | ||
fi | ||
echo " | ||
RUN apt-get update \\ | ||
&& apt-get install -qq -u --no-install-recommends \\ | ||
software-properties-common \\ | ||
dirmngr \\ | ||
gpg-agent \\ | ||
coreutils \\ | ||
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0x219BD9C9 \\ | ||
&& add-apt-repository 'deb http://repos.azulsystems.com/ubuntu stable main' \\ | ||
&& apt-get update \\ | ||
&& apt-get -y upgrade \\ | ||
RUN ${DNF_INSTALL} $skipGpg -y update $erasing | ||
RUN ${DNF_INSTALL} $skipGpg -y install $erasing \\ | ||
bzip2-libs \\ | ||
bzip2 \\ | ||
curl \\ | ||
git \\ | ||
unzip \\ | ||
/usr/bin/which \\ | ||
wget \\ | ||
zip " >> "$DOCKERFILE_PATH" | ||
echo " | ||
RUN ${DNF_INSTALL} clean all" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printAptPackagesJdk() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo " | ||
# Install required OS tools to build JDK as .deb via apt-get | ||
# dirmngr, gpg-agent & coreutils are all required for the apt-add repository command" >> "$DOCKERFILE_PATH" | ||
fi | ||
|
||
echo " | ||
RUN $UBUNTU_PREAMBLE | ||
&& apt-get install -qq -y --no-install-recommends \\ | ||
ant \\ | ||
ant-contrib \\ | ||
autoconf \\ | ||
ca-certificates \\ | ||
cmake \\ | ||
cpio \\ | ||
curl \\ | ||
file \\ | ||
git \\ | ||
libasound2-dev \\ | ||
libcups2-dev \\ | ||
libelf-dev \\ | ||
|
@@ -236,10 +293,7 @@ RUN apt-get update \\ | |
make \\ | ||
perl \\ | ||
ssh \\ | ||
systemtap-sdt-dev \\ | ||
unzip \\ | ||
wget \\ | ||
zip \\" >> "$DOCKERFILE_PATH" | ||
systemtap-sdt-dev \\" >> "$DOCKERFILE_PATH" | ||
|
||
if [ ${OPENJ9} = true ]; then | ||
echo " gcc-7 \\ | ||
|
@@ -268,6 +322,62 @@ RUN apt-get update \\ | |
echo " && rm -rf /var/lib/apt/lists/*" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printDnfPackagesJdk() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo " | ||
# Install required OS tools to build JDK as rpms via dnf" >> "$DOCKERFILE_PATH" | ||
fi | ||
local skipGpg="" # it may bite from time to time | ||
#local skipGpg="--nogpgcheck" | ||
local erasing="--allowerasing" | ||
if [ ${DNF_INSTALL} = yum ] ; then | ||
erasing="" | ||
fi | ||
echo " | ||
RUN ${DNF_INSTALL} $skipGpg -y install $erasing \\ | ||
ant \\ | ||
autoconf \\ | ||
automake \\ | ||
ca-certificates \\ | ||
cmake \\ | ||
cpio \\ | ||
diffutils \\ | ||
file \\ | ||
alsa-lib-devel \\ | ||
cups-devel \\ | ||
gcc \\ | ||
gcc-c++ \\ | ||
gdb \\ | ||
fontconfig-devel \\ | ||
freetype-devel \\ | ||
libtool \\ | ||
libX11-devel \\ | ||
libXi-devel \\ | ||
libXinerama-devel \\ | ||
libXrandr-devel \\ | ||
libXrender-devel \\ | ||
libXt-devel \\ | ||
libXtst-devel \\ | ||
lksctp-tools-devel \\ | ||
lksctp-tools pcsc-lite-libs \\ | ||
make \\ | ||
perl \\ | ||
procps-ng \\ | ||
openssh-clients \\ | ||
openssl \\ | ||
systemtap-sdt-devel \\ | ||
kernel-headers \\ | ||
\"lcms*\" \\ | ||
nss-devel \\ " >> "$DOCKERFILE_PATH" | ||
if echo "${IMAGE}" | grep fedora ; then | ||
echo " libstdc++-static \\ | ||
pcsc-lite-devel \\ " >> "$DOCKERFILE_PATH" | ||
fi | ||
echo " tzdata-java " >> "$DOCKERFILE_PATH" | ||
echo " | ||
RUN ${DNF_INSTALL} clean all" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printCreateFolder() { | ||
echo " | ||
RUN mkdir -p /openjdk/target | ||
|
@@ -285,6 +395,10 @@ ENV CC=gcc-7 CXX=g++-7" >> "$DOCKERFILE_PATH" | |
} | ||
|
||
printCustomDirs() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo "# In podman (in docker do not harm) shared folder is owned by root, and is read for others, unless it already exists" >> "$DOCKERFILE_PATH" | ||
echo "# So we have to create all future-mounted dirs, with proper owner and permissions" >> "$DOCKERFILE_PATH" | ||
fi | ||
for dir in ${DIRS} ; do | ||
echo "RUN mkdir -p $dir" >> "$DOCKERFILE_PATH" | ||
echo "RUN chmod 755 $dir" >> "$DOCKERFILE_PATH" | ||
|
@@ -293,6 +407,10 @@ printCustomDirs() { | |
} | ||
|
||
printDockerJDKs() { | ||
if [ ${COMMENTS} == true ]; then | ||
echo " | ||
# Linking of boot jdk must happen after the system jdk is isntalled, as it is iverwriting whatever java/javac from system" >> "$DOCKERFILE_PATH" | ||
fi | ||
# JDK8 uses zulu-7 to as it's bootjdk | ||
if [ "${JDK_VERSION}" != 8 ] && [ "${JDK_VERSION}" != "${JDK_MAX}" ]; then | ||
if [ "${JDK_VERSION}" == 11 ]; then | ||
|
@@ -341,7 +459,7 @@ printDockerJDKs() { | |
printJDK() { | ||
local JDKVersion=$1 | ||
echo " | ||
RUN sh -c \"mkdir -p /usr/lib/jvm/jdk$JDKVersion && wget 'https://api.adoptium.net/v3/binary/latest/$JDKVersion/ga/linux/x64/jdk/hotspot/normal/adoptium?project=jdk' -O - | tar xzf - -C /usr/lib/jvm/jdk$JDKVersion --strip-components=1\"" >> "$DOCKERFILE_PATH" | ||
RUN sh -c \"mkdir -p /usr/lib/jvm/jdk$JDKVersion && wget 'https://api.adoptium.net/v3/binary/latest/$JDKVersion/ga/linux/$(adoptiumArch)/jdk/hotspot/normal/adoptium?project=jdk' -O - | tar xzf - -C /usr/lib/jvm/jdk$JDKVersion --strip-components=1\"" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printGitCloneJenkinsPipelines(){ | ||
|
@@ -370,19 +488,75 @@ RUN useradd -u \$HostUID -ms /bin/bash build | |
WORKDIR /openjdk/build | ||
RUN chown -R build /openjdk/" >> "$DOCKERFILE_PATH" | ||
printCustomDirs | ||
} | ||
|
||
printUserSet(){ | ||
echo " | ||
USER build" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
printContainerVars(){ | ||
adoptiumArch() { | ||
local arch | ||
arch=$(uname -m) | ||
if [ "$arch" = "x86_64" ] ; then arch="x64" ; fi | ||
echo "$arch" | ||
} | ||
|
||
printContainerVars() { | ||
echo " | ||
ARG OPENJDK_CORE_VERSION | ||
ENV OPENJDK_CORE_VERSION=\$OPENJDK_CORE_VERSION | ||
ENV ARCHITECTURE=x64 | ||
ENV ARCHITECTURE=$(adoptiumArch) | ||
ENV JDK_PATH=jdk | ||
ENV JDK8_BOOT_DIR=/usr/lib/jvm/jdk8" >> "$DOCKERFILE_PATH" | ||
} | ||
|
||
isRpm() { | ||
echo "${IMAGE}" | grep -i -e "fedora" -e "centos" -e "rocky" -e "stream" -e "rhel" | ||
} | ||
|
||
isDeb() { | ||
echo "${IMAGE}" | grep -i -e "ubuntu" -e "debian" | ||
} | ||
|
||
isYum() { | ||
if echo "${IMAGE}" | grep -e "stream7" -e "centos:7" ; then | ||
DNF_INSTALL=yum | ||
else | ||
DNF_INSTALL=dnf | ||
fi | ||
} | ||
|
||
printDepsBase() { | ||
if isRpm ; then | ||
isYum | ||
printDnfPackagesBase | ||
elif isDeb ; then | ||
printAptPackagesBase | ||
# OpenJ9 MUST use gcc7, HS doesn't have to | ||
if [ ${OPENJ9} == true ]; then | ||
printgcc | ||
fi | ||
else | ||
echo "Unknown system, can not install build deps: $IMAGE" | ||
fi | ||
} | ||
|
||
printDepsJdk() { | ||
if isRpm ; then | ||
isYum | ||
printDnfPackagesJdk | ||
elif isDeb ; then | ||
printAptPackagesJdk | ||
# OpenJ9 MUST use gcc7, HS doesn't have to | ||
if [ ${OPENJ9} == true ]; then | ||
printgcc | ||
fi | ||
else | ||
echo "Unknown system, can not install build deps: $IMAGE" | ||
fi | ||
} | ||
|
||
generateFile() { | ||
mkdir -p "$DOCKERFILE_DIR" | ||
if [ -f "$DOCKERFILE_PATH" ]; then | ||
|
@@ -412,24 +586,19 @@ processArgs "$@" | |
generateFile | ||
generateConfig | ||
printPreamble | ||
printAptPackages | ||
# OpenJ9 MUST use gcc7, HS doesn't have to | ||
if [ ${OPENJ9} == true ]; then | ||
printgcc | ||
fi | ||
|
||
printDockerJDKs | ||
printUserCreate | ||
printDepsBase | ||
printGitCloneJenkinsPipelines | ||
|
||
# If building the image straight away, it can't be assumed the folders to be copied are in place | ||
# Therefore create an image that instead git clones openjdk-build and a build can be started there | ||
if [ ${BUILD} == false ]; then | ||
printCopyFolders | ||
else | ||
printGitClone | ||
fi | ||
|
||
printUserCreate | ||
printDepsJdk | ||
printDockerJDKs | ||
printUserSet | ||
printContainerVars | ||
|
||
echo "Dockerfile created at $DOCKERFILE_PATH" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.