-
-
Notifications
You must be signed in to change notification settings - Fork 257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added optional arg to -D/--podman/--docker base image to use #3869
Merged
Merged
Changes from all commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
0f2fbe8
Added optional arg to -D/--podman/--docker base image to use
judovana 0a158ed
seaparate local declaration and no backticks and no sed
judovana 205b604
Using current arch as arch instead of ahrdcoded
judovana 0ddc037
Added fedora depndencies
judovana 27d92c8
Now working also on centos 9
judovana 67936fb
Now centos:stream8
judovana 52213c3
Fixed indentation
judovana 5826bcd
Update sbin/common/common.sh
judovana bb9b983
missing article
judovana 482e4df
Added more coments to optional image argumetn check
judovana e2c3935
Removed hardcoded x64 arch
judovana b1a436b
Added few more commens if comments are on
judovana 52723a2
Reorgnaized order of operations in docekrtfile
judovana 5670083
$() and " for bash lint
judovana 03a514f
Added support for centos:7
judovana 10a27ff
Update sbin/common/config_init.sh
judovana 990b358
Update sbin/common/config_init.sh
judovana 3320ef9
Update sbin/common/config_init.sh
judovana 746bdc4
removed missleading comment
judovana File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is going to need a follow-on change as the non-x64 ones (aarch64 and ppc64le) are under vault.centos.org/altarch (This wasn't a problem for the CentOS6 ones we translated in the past as we only used that one on x64)
@steelhead31 is working on a fix elsewhere as he hit the same problem after merging adoptium/infrastructure#3643 so once he's completed that we can replicate the same operation in here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That sould be simple check, but I was trying both centos:stream{8,9} on aarch64. And centos8 seems to be already facing the "need of sed" issue. I will double check. I could have had swapped VM.
If it indeed will not run, I will adjust, shoudl be simple. TYVM!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Really, it works for8:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The alt-arch was only cento7 speciality. So I guess you were referring to it. Sorry, I misread a bit. I will try alsocentos7 on aarch64, and I guess thatr will need the alt for sure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, my solution is pretty similar.. wrapped in an if statement..
sed -i 's|#baseurl=http://mirror.centos.org/altarch/\$releasever/|baseurl=http://vault.centos.org/altarch/7.9.2009/|' /etc/yum.repos.d/CentOS-Base.repo; \
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanx!! I will reuse it immediately if it bites back or if @sxa insits.