-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
Add OpenJDK + Eclipse OpenJ9 images from IBM Semeru Runtimes #10666
Conversation
Wasn't I'm very confused about what this is and how it fits in with the existing OpenJ9 variants over there. |
@tianon Eclipse Temurin delivers OpenJDK + Hotspot images, and IBM Semeru Runtimes going forward will deliver both Open and Certified (JCKed) versions of OpenJDK + Eclipse OpenJ9 images. |
Hi @tianon what Surya said is correct. It is a confusing story and transition, I will try to add a bit of background. In regards to IBM Java 8 (https://hub.docker.com/_/ibmjava). These are not going anywhere anytime soon. These are based on a different code base and will continue for the foreseeable future. The IBM Java11 builds however, will transition to IBM Semeru Runtime Certified edition for the next release. |
I guess a major point of confusion for me here is why this is being proposed as a new image instead of these being part of https://hub.docker.com/_/ibmjava then? This seems to me (as an outsider) that OpenJ9 used to be part of IBM Java, was part of AdoptOpenJDK for a while, and is now going back to being part of IBM Java due to the collapse/move of AdoptOpenJDK? What makes Semeru different from "IBM Java"? Why are they separate? |
@tianon There is a branding change as we are moving away from AdoptOpenJDK. IBM Semeru is purely OpenJDK+OpenJ9 which supports both Open Edition and Certified Edition of the packages. As such, the current "ibmjava" supports only the Certified edition. Also, the code base has additional IBM specific changes which is not same as IBM Semeru Runtimes. In future, "ibmjava" repo will only support JDK8 and all the other future releases will be part of IBM Semeru Runtimes. |
Some background info that may be helpful: https://developer.ibm.com/blogs/introducing-the-ibm-semeru-runtimes/ This article explains the new branding that motivates this request. It doesn't help with differentiating from the existing ibmjava images, but I think the 2 key aspects (as Adam and Surya mentioned) are:
Also note that "Eclipse OpenJ9" is just one component needed to make a JDK that can run Java programs. When IBM builds the IBM SDK for Java, we incorporate OpenJ9. When AdoptOpenJDK used to build a thing called "OpenJDK with OpenJ9", they clearly incorporated OpenJ9 (it's right in the name :) ). When IBM now builds the IBM Semeru Runtime, we also incorporate OpenJ9 into it. Hope that helps! |
😬 Is all this really necessary/desired? For example, I don't imagine a situation where the Something like Also, simply using |
@tianon Updated the tags accordingly. Agree, they were too long. Just to confirm, there wont be any other non-openj9 images that we intend to deliver. |
Actually, that exact thing has just happened. Eclipse OpenJ9 released a 0.27.1 update release with fixes for the POWER platform. That release is still targeted for the July update releases for Java 8, 11, and 16 (so the OpenJDK versions have not changed)... OpenJDK and Eclipse OpenJ9 are two different projects each capable of issuing patches that don't require the other to change their version number. I don't expect most users to be exposed to this level of detail: they will mostly just pull e.g. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@tianon Request you to trigger the Test Run's against this PR as well. |
@tianon Request you to trigger the Test Run's once again. Fixed the 2 issues which were seen during the last run. Thanks !! |
@tianon Now that the checks are completed, can this be merged. Thanks !! |
Frankly, I'm still very confused by the image and tag naming -- what is |
@tianon You got it right, we will be delivering "certified" version in future. We are not explicitly including "OpenJ9" into the tagging as we only deliver "OpenJ9" implementation. Yes, this is the image name we want to go with as we have changed our Branding for Java deliverables, and all future releases will be referred by this name. Regarding the implementations, as mentioned we won't be adding any other implementations. We will stick only to OpenJ9 implementation. |
To hopefully clarify: "open" in the name refers to the IBM Semeru Runtime Open Edition. As @narkedi says, there will also soon be an IBM Semeru Runtime Certified Edition which will put "certified" in that same spot. For legal reasons, we need to have two distinct names for the two editions. Together, the Open Edition and the Certified Edition are referred to as the IBM Semeru Runtimes. Both editions have the same OpenJDK versions and OpenJ9 versions in them, but have different licenses, and only the certified edition has been tested for Java certification. |
Why would users choose one over the other? |
Some people are familiar with and comfortable with open source license -> Open Edition Some IBM customers are familiar with and comfortable with IBM license -> Certified Edition Some people really care about Java certification -> Certified Edition else Open Edition :) . |
@tianon Hope your confusion is cleared out. Can we please get this PR merged ? Thanks !! |
That makes me even more confused -- if all that's different is the amount of testing and the license applied, why not provide the same thing under a dual license? Wouldn't that provide the same benefits, but with less overhead (both technically and mentally for IBM and IBM's users)? As is, the choice being presented to users sounds to me like "would you like the open thing or the tested thing?" and I don't think that dichotomy is the intention. |
I'll refer you to one line in my earlier post:
|
I will grant that the names fall into the category of "worst option, except for all the alternatives". You aren't raising any issues we haven't gone around a hundred times already :( . We're not willfully trying to be confusing here, but we're operating under some constraints that we're not at liberty to discuss publicly. Forgive me, but I'm also actually not quite sure where you're going with this line of questioning. You're challenging names that have been decided (months ago) by the people who have the right and responsibility to make those naming decisions. We want to use those names for our binaries consistently inside and outside Docker Hub. Surely your end game here isn't to make things even more confusing (I know, I'm also amazed that is actually possible) by forcing us to use different names at Docker Hub than the ones people identify with at our direct download site (here's a link) ? |
Nope, not trying to be a pain; sorry if it feels that way. I'm trying to make sure I understand fully, and that the end result is actually in line with the goals of the program this image is being proposed into: https://github.com/docker-library/official-images#what-are-official-images From what I'm understanding so far, the "Open" edition is definitely right in line, but the "Certified" edition is a fair bit murkier. I realize this PR currently only contains the "Open" edition, but it's phrased/proposed in such a way that implies the future existence of the "Certified" edition here as well, which is why I'm trying to make sure I understand correctly. |
I'm not sure what to say. I cannot argue it from a technical standpoint. But there are other considerations because "certified" is a loaded term in the Java ecosystem and there are legal implications associated with the license needed to be able to run the Java Certification Kit (JCK) that I can't get into. We tried to make it as simple as we could although, in retrospect, including both OpenJDK and OpenJ9 version numbers is an area we could probably improve going forward (but we have an existing release that's been available for a month now that already uses the versioning scheme we've used here). I don't suppose there's a way forward that lets us get the currently named images out and available for people to use (they've been waiting more than a month now) but we improve the versioning (and therefore tagging) in our subsequent releases? (the October update release, say) ? |
Ah, new CI failure is due to #11071 -- to fix it, you'll want to add |
Diff for 6151523:diff --git a/_bashbrew-cat b/_bashbrew-cat
index bdfae4a..e38cc3d 100644
--- a/_bashbrew-cat
+++ b/_bashbrew-cat
@@ -1 +1,81 @@
-Maintainers: New Image! :D (@docker-library-bot)
+Maintainers: Surya Narkedimilli <snarkedi@in.ibm.com> (@narkedi)
+GitRepo: https://github.com/ibmruntimes/semeru-containers.git
+GitFetch: refs/heads/ibm
+
+Tags: open-8u302-b08-jdk-centos7, open-8-jdk-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 8/jdk/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-8u302-b08-jdk-focal, open-8-jdk-focal
+SharedTags: open-8u302-b08-jdk, open-8-jdk
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 8/jdk/ubuntu
+File: Dockerfile.open.releases.full
+
+Tags: open-8u302-b08-jre-centos7, open-8-jre-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 8/jre/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-8u302-b08-jre-focal, open-8-jre-focal
+SharedTags: open-8u302-b08-jre, open-8-jre
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 8/jre/ubuntu
+File: Dockerfile.open.releases.full
+
+Tags: open-11.0.12_7-jdk-centos7, open-11-jdk-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 11/jdk/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-11.0.12_7-jdk-focal, open-11-jdk-focal
+SharedTags: open-11.0.12_7-jdk, open-11-jdk
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 11/jdk/ubuntu
+File: Dockerfile.open.releases.full
+
+Tags: open-11.0.12_7-jre-centos7, open-11-jre-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 11/jre/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-11.0.12_7-jre-focal, open-11-jre-focal
+SharedTags: open-11.0.12_7-jre, open-11-jre
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 11/jre/ubuntu
+File: Dockerfile.open.releases.full
+
+Tags: open-16.0.2_7-jdk-centos7, open-16-jdk-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 16/jdk/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-16.0.2_7-jdk-focal, open-16-jdk-focal
+SharedTags: open-16.0.2_7-jdk, open-16-jdk
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 16/jdk/ubuntu
+File: Dockerfile.open.releases.full
+
+Tags: open-16.0.2_7-jre-centos7, open-16-jre-centos7
+Architectures: amd64, ppc64le
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 16/jre/centos
+File: Dockerfile.open.releases.full
+
+Tags: open-16.0.2_7-jre-focal, open-16-jre-focal
+SharedTags: open-16.0.2_7-jre, open-16-jre
+Architectures: amd64, ppc64le, s390x
+GitCommit: a5e772ef095c8d185a4dbcb804e5d4a3c895f71e
+Directory: 16/jre/ubuntu
+File: Dockerfile.open.releases.full
diff --git a/_bashbrew-list b/_bashbrew-list
index e69de29..efd8e98 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -0,0 +1,36 @@
+ibm-semeru-runtimes:open-8u302-b08-jdk
+ibm-semeru-runtimes:open-8u302-b08-jdk-centos7
+ibm-semeru-runtimes:open-8u302-b08-jdk-focal
+ibm-semeru-runtimes:open-8u302-b08-jre
+ibm-semeru-runtimes:open-8u302-b08-jre-centos7
+ibm-semeru-runtimes:open-8u302-b08-jre-focal
+ibm-semeru-runtimes:open-8-jdk
+ibm-semeru-runtimes:open-8-jdk-centos7
+ibm-semeru-runtimes:open-8-jdk-focal
+ibm-semeru-runtimes:open-8-jre
+ibm-semeru-runtimes:open-8-jre-centos7
+ibm-semeru-runtimes:open-8-jre-focal
+ibm-semeru-runtimes:open-11-jdk
+ibm-semeru-runtimes:open-11-jdk-centos7
+ibm-semeru-runtimes:open-11-jdk-focal
+ibm-semeru-runtimes:open-11-jre
+ibm-semeru-runtimes:open-11-jre-centos7
+ibm-semeru-runtimes:open-11-jre-focal
+ibm-semeru-runtimes:open-11.0.12_7-jdk
+ibm-semeru-runtimes:open-11.0.12_7-jdk-centos7
+ibm-semeru-runtimes:open-11.0.12_7-jdk-focal
+ibm-semeru-runtimes:open-11.0.12_7-jre
+ibm-semeru-runtimes:open-11.0.12_7-jre-centos7
+ibm-semeru-runtimes:open-11.0.12_7-jre-focal
+ibm-semeru-runtimes:open-16-jdk
+ibm-semeru-runtimes:open-16-jdk-centos7
+ibm-semeru-runtimes:open-16-jdk-focal
+ibm-semeru-runtimes:open-16-jre
+ibm-semeru-runtimes:open-16-jre-centos7
+ibm-semeru-runtimes:open-16-jre-focal
+ibm-semeru-runtimes:open-16.0.2_7-jdk
+ibm-semeru-runtimes:open-16.0.2_7-jdk-centos7
+ibm-semeru-runtimes:open-16.0.2_7-jdk-focal
+ibm-semeru-runtimes:open-16.0.2_7-jre
+ibm-semeru-runtimes:open-16.0.2_7-jre-centos7
+ibm-semeru-runtimes:open-16.0.2_7-jre-focal
diff --git a/ibm-semeru-runtimes_open-11-jdk-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-11-jdk-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..84a266a
--- /dev/null
+++ b/ibm-semeru-runtimes_open-11-jdk-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,101 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk-11.0.12+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ amd64|x86_64) \
+ ESUM='4c2d776f69e3ff7d01cd57c0938b7a7f058264425faf18e3708b905e93f915c4'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ ppc64el|ppc64le) \
+ ESUM='7d49a5b29a84831526f7bffaaee399ac9a26d05712ac4b9cb7ca0a370ed3f020'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
+CMD ["jshell"]
diff --git a/ibm-semeru-runtimes_open-11-jdk-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-11-jdk-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..da51239
--- /dev/null
+++ b/ibm-semeru-runtimes_open-11-jdk-focal/Dockerfile.open.releases.full
@@ -0,0 +1,108 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk-11.0.12+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ amd64|x86_64) \
+ ESUM='4c2d776f69e3ff7d01cd57c0938b7a7f058264425faf18e3708b905e93f915c4'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ ppc64el|ppc64le) \
+ ESUM='7d49a5b29a84831526f7bffaaee399ac9a26d05712ac4b9cb7ca0a370ed3f020'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='991f8df53079378782b9de3bbfd4c52a19920ea9ba90e9a54c871ce47b599cdb'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jdk_s390x_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
+CMD ["jshell"]
diff --git a/ibm-semeru-runtimes_open-11-jre-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-11-jre-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..85708af
--- /dev/null
+++ b/ibm-semeru-runtimes_open-11-jre-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,100 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk-11.0.12+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='285bd388a497db61408d26a9f3328f62004714ede94456718cf6440a109e25d2'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='f352998f6fdf0b84f63c563608be57f30aa3f14c8117c1219422dbc712ad4f81'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-11-jre-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-11-jre-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..13f3714
--- /dev/null
+++ b/ibm-semeru-runtimes_open-11-jre-focal/Dockerfile.open.releases.full
@@ -0,0 +1,107 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk-11.0.12+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='285bd388a497db61408d26a9f3328f62004714ede94456718cf6440a109e25d2'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='6e5829aeb37abfb122e0944e438ecb2043c56df14fcdcce39bd4e3c9a55571a8'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jre_s390x_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='f352998f6fdf0b84f63c563608be57f30aa3f14c8117c1219422dbc712ad4f81'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru11-binaries/releases/download/jdk-11.0.12%2B7_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_11.0.12_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-16-jdk-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-16-jdk-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..68cabc9
--- /dev/null
+++ b/ibm-semeru-runtimes_open-16-jdk-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,101 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk-16.0.2+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='d5901996f2c0889b2b92de97fed0b36d5068da308be0fbd6c8293a6b6b91634d'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='1349eb9a1d9af491a1984d66a80126730357c4a5c4fcbe7112a2c832f6c0886e'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
+CMD ["jshell"]
diff --git a/ibm-semeru-runtimes_open-16-jdk-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-16-jdk-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..a55ee69
--- /dev/null
+++ b/ibm-semeru-runtimes_open-16-jdk-focal/Dockerfile.open.releases.full
@@ -0,0 +1,108 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk-16.0.2+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='d5901996f2c0889b2b92de97fed0b36d5068da308be0fbd6c8293a6b6b91634d'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='3a2741a2e14b9934405a6c0b6af9e865687a70814af355e62dd84025707ccfdc'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jdk_s390x_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='1349eb9a1d9af491a1984d66a80126730357c4a5c4fcbe7112a2c832f6c0886e'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
+CMD ["jshell"]
diff --git a/ibm-semeru-runtimes_open-16-jre-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-16-jre-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..3566532
--- /dev/null
+++ b/ibm-semeru-runtimes_open-16-jre-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,100 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk-16.0.2+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='51dac9a69b594c72adabb2c36634a121be04a17c4ce34628cf9b37fd5010c1a8'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='b077cd0b35d3ed1927c22e5b498264ecff67297992809056187b42662edfc536'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-16-jre-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-16-jre-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..21359df
--- /dev/null
+++ b/ibm-semeru-runtimes_open-16-jre-focal/Dockerfile.open.releases.full
@@ -0,0 +1,107 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk-16.0.2+7_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='51dac9a69b594c72adabb2c36634a121be04a17c4ce34628cf9b37fd5010c1a8'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='dba28e3e06bb7c76b4da2f46c48ed74dc72e168f9ee01439decadea181eb402c'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jre_s390x_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='b077cd0b35d3ed1927c22e5b498264ecff67297992809056187b42662edfc536'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru16-binaries/releases/download/jdk-16.0.2%2B7_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_16.0.2_7_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-8-jdk-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-8-jdk-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..96e4a95
--- /dev/null
+++ b/ibm-semeru-runtimes_open-8-jdk-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,100 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk8u302-b08_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='ce3f5f46ed4bcee187a5734d20fa4f7914765026f1ad2799b7020feed22a19ef'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='f1fea5d3049754ad13f9b90d90beb9157dbd7e84e00c255c2cef81441f0f348e'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-8-jdk-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-8-jdk-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..4309e72
--- /dev/null
+++ b/ibm-semeru-runtimes_open-8-jdk-focal/Dockerfile.open.releases.full
@@ -0,0 +1,107 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk8u302-b08_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='ce3f5f46ed4bcee187a5734d20fa4f7914765026f1ad2799b7020feed22a19ef'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jdk_ppc64le_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='4ae2fff725327937dc9cf74e714a8e349f00fad0f543052bd95a9a79ee99d121'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jdk_s390x_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='f1fea5d3049754ad13f9b90d90beb9157dbd7e84e00c255c2cef81441f0f348e'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jdk_x64_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-8-jre-centos7/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-8-jre-centos7/Dockerfile.open.releases.full
new file mode 100644
index 0000000..6d40a5e
--- /dev/null
+++ b/ibm-semeru-runtimes_open-8-jre-centos7/Dockerfile.open.releases.full
@@ -0,0 +1,100 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM centos:7
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN yum install -y tzdata openssl curl ca-certificates fontconfig gzip tar \
+ && yum clean all
+
+ENV JAVA_VERSION jdk8u302-b08_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(uname -m)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='376f3063225e8117f5b5f35ff73e9284123c377f7c5c6b6da976afd4fc51e8a9'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='9d3d4234b9a579251426c6d498f407bcbed94d10ca572dfdc82c387b9fe9c158'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+
diff --git a/ibm-semeru-runtimes_open-8-jre-focal/Dockerfile.open.releases.full b/ibm-semeru-runtimes_open-8-jre-focal/Dockerfile.open.releases.full
new file mode 100644
index 0000000..120d662
--- /dev/null
+++ b/ibm-semeru-runtimes_open-8-jre-focal/Dockerfile.open.releases.full
@@ -0,0 +1,107 @@
+# (C) Copyright IBM Corporation 2021
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FROM ubuntu:20.04
+
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
+
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales \
+ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
+ && locale-gen en_US.UTF-8 \
+ && rm -rf /var/lib/apt/lists/*
+
+ENV JAVA_VERSION jdk8u302-b08_openj9-0.27.0
+
+RUN set -eux; \
+ ARCH="$(dpkg --print-architecture)"; \
+ case "${ARCH}" in \
+ ppc64el|ppc64le) \
+ ESUM='376f3063225e8117f5b5f35ff73e9284123c377f7c5c6b6da976afd4fc51e8a9'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jre_ppc64le_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ s390x) \
+ ESUM='5bc792eaa0f1404f7d1cc48cad4b95bb192ccb1155fb9b45b228314b23fd71d7'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jre_s390x_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ amd64|x86_64) \
+ ESUM='9d3d4234b9a579251426c6d498f407bcbed94d10ca572dfdc82c387b9fe9c158'; \
+ BINARY_URL='https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.0/ibm-semeru-open-jre_x64_linux_8u302b08_openj9-0.27.0.tar.gz'; \
+ ;; \
+ *) \
+ echo "Unsupported arch: ${ARCH}"; \
+ exit 1; \
+ ;; \
+ esac; \
+ curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; \
+ echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; \
+ mkdir -p /opt/java/openjdk; \
+ cd /opt/java/openjdk; \
+ tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
+ rm -rf /tmp/openjdk.tar.gz;
+
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal"
+
+# Create OpenJ9 SharedClassCache (SCC) for bootclasses to improve the java startup.
+# Downloads and runs tomcat to generate SCC for bootclasses at /opt/java/.scc/openj9_system_scc
+# Does a dry-run and calculates the optimal cache size and recreates the cache with the appropriate size.
+# With SCC, OpenJ9 startup is improved ~50% with an increase in image size of ~14MB
+# Application classes can be create a separate cache layer with this as the base for further startup improvement
+
+RUN set -eux; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ SCC_SIZE="50m"; \
+ DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; \
+ INSTALL_PATH_TOMCAT=/opt/tomcat-home; \
+ TOMCAT_CHECKSUM="0db27185d9fc3174f2c670f814df3dda8a008b89d1a38a5d96cbbe119767ebfb1cf0bce956b27954aee9be19c4a7b91f2579d967932207976322033a86075f98"; \
+ TOMCAT_DWNLD_URL="https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz"; \
+ \
+ mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; \
+ curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; \
+ echo "${TOMCAT_CHECKSUM} *${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; \
+ tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; \
+ rm -rf "${DOWNLOAD_PATH_TOMCAT}"; \
+ \
+ java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 15; \
+ FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); \
+ SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); \
+ SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); \
+ [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; \
+ SCC_SIZE="${SCC_SIZE}m"; \
+ java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; \
+ unset OPENJ9_JAVA_OPTIONS; \
+ \
+ export OPENJ9_JAVA_OPTIONS="-Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; \
+ "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; \
+ sleep 5; \
+ "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; \
+ sleep 5; \
+ FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); \
+ echo "SCC layer is $FULL% full."; \
+ rm -rf "${INSTALL_PATH_TOMCAT}"; \
+ if [ -d "/opt/java/.scc" ]; then \
+ chmod -R 0777 /opt/java/.scc; \
+ fi; \
+ \
+ echo "SCC generation phase completed";
+ |
Please do -- if the cache validation is based on timestamps, something like I think there would be benefit to non-Docker users as well to somehow resolve this in a common way.
This is still outstanding feedback and probably worth revisiting / doing some testing around to see if setting all three is really necessary. |
This comment was marked as off-topic.
This comment was marked as off-topic.
@iNikem, they will be there in a week's time. |
@narkedi Are UBI images planned? |
The upstream repository already contains UBI-based images, for example https://github.com/ibmruntimes/semeru-containers/tree/da551bc8b1f96749ad70c6a5bedfc77a7770477e/11/jdk/ubi. No idea why they are not published, though. |
@joschi @rdean They are published at https://hub.docker.com/u/ibmsemeruruntime . You can use them unless you are strictly looking for Official images. Thanks !! |
See also #9445 |
@narkedi Any idea when Java 17 will be available? |
@PascalSchumacher we're still waiting on OpenJ9 to release jdk17. There are still 1 or 2 blockers. We expect it will be soon. Once OpenJ9 release is ready, Semeru will be released within about a week. And Docker containers shortly after the Semeru release. |
@AdamBrousseau The IBM Semeru Runtimes downloads for Java 17 are available now https://developer.ibm.com/languages/java/semeru-runtimes/downloads/ @PascalSchumacher The docker images are available here https://hub.docker.com/_/ibm-semeru-runtimes |
Ubuntu images will work for initial testing, but I'll need UBI-based images for deployment. |
@AdamBrousseau Any reason why it's not built for ARM64, unlike the other LTS releases? |
@Software-Noob Will check and add the ARM64 support, it just got missed out. We will see that its included. Thanks !! |
@rdean official UBI images can be found at Red Hat Registry |
Those images carry this statement: "Before downloading or using this Container, you must agree to the Red Hat subscription agreement located at redhat.com/licenses. If you do not agree with these terms, do not download or use the Container. If you have an existing Red Hat Enterprise Agreement (or other negotiated agreement with Red Hat) with terms that govern subscription services associated with Containers, then your existing agreement will control." UBI and Semeru individually don't require a Red Hat subscription / Enterprise Agreement to use. Why does the combination? |
ARM64 images are now part of the official images for JDK17. |
@rdean Not quite sure why its popping up, will check with the RH team if there are any changes to the terms and conditions. |
@iNikem Not exactly, you should hear some news by next week. We will support Windows, and will publish with the latest version of JDK releases. Thanks for the interest and we will make sure that they are there very shortly. |
This request is to add the OpenJDK+ Eclipse OpenJ9 images to the official Docker images.
Checklist for Review
NOTE: This checklist is intended for the use of the Official Images maintainers both to track the status of your PR and to help inform you and others of where we're at. As such, please leave the "checking" of items to the repository maintainers. If there is a point below for which you would like to provide additional information or note completion, please do so by commenting on the PR. Thanks! (and thanks for staying patient with us ❤️)
foobar
needs Node.js, hasFROM node:...
instead of grabbingnode
via other means been considered?)ifFROM scratch
, tarballs only exist in a single commit within the associated history?