ci.docker icon indicating copy to clipboard operation
ci.docker copied to clipboard

Docker OpenLiberty on Raspberry-Pi

Open Warkdev opened this issue 5 years ago • 6 comments

Hello,

I've followed the following article but I couldn't make it work. At first, I got the error that yum package does not exist which is quite normal on Raspbian.

I've commented out yum lines as these packages are available by default on the system but I'm now having the following error:

image

It looks like the wget function didn't work properly, is that possible ?

Regards, Warkdev

Warkdev avatar Jun 07 '20 08:06 Warkdev

Well well.. after digging into this, I came up with reworking few parts of the Dockerfile (I've used the file Dockerfile.ubi.adoptopenjdk14 as source) and here is my final version although I couldn't get it working with OPENJ9_SCC=true:

` FROM arm32v7/adoptopenjdk:14-jre-hotspot ARG LIBERTY_VERSION=20.0.0.6 ARG LIBERTY_SHA=083e89c2f96972df339a513582b338658e6562b3 ARG LIBERTY_BUILD_LABEL=cl200620200528-0414 ARG LIBERTY_DOWNLOAD_URL=https://repo1.maven.org/maven2/io/openliberty/openliberty-runtime/$LIBERTY_VERSION/openliberty-runtime-$LIBERTY_VERSION.zip ARG OPENJ9_SCC=false

LABEL org.opencontainers.image.authors="Arthur De Magalhaes, Chris Potter"
org.opencontainers.image.vendor="Open Liberty"
org.opencontainers.image.url="https://openliberty.io/"
org.opencontainers.image.source="https://github.com/OpenLiberty/ci.docker"
org.opencontainers.image.version="$LIBERTY_VERSION"
org.opencontainers.image.revision="$LIBERTY_BUILD_LABEL"
vendor="Open Liberty"
name="Open Liberty"
version="$LIBERTY_VERSION"
summary="Image for Open Liberty with AdoptOpenJDK with OpenJ9 and UBI 8"
description="This image contains the Open Liberty runtime with AdoptOpenJDK with OpenJ9 and Red Hat UBI 8 as the base OS. For more information on this image please see https://github.com/OpenLiberty/ci.docker#building-an-application-image"

COPY helpers /opt/ol/helpers COPY fixes/ /opt/ol/fixes/ COPY licenses /licenses

--# Install Open Liberty RUN apt-get update
&& apt-get -y install wget unzip openssl
&& wget -q $LIBERTY_DOWNLOAD_URL -U UA-Open-Liberty-Docker -O /tmp/wlp.zip
&& echo "$LIBERTY_SHA /tmp/wlp.zip" > /tmp/wlp.zip.sha1
&& sha1sum -c /tmp/wlp.zip.sha1
&& chmod -R u+x /usr/bin
&& unzip -q /tmp/wlp.zip -d /opt/ol
&& rm /tmp/wlp.zip
&& rm /tmp/wlp.zip.sha1
&& useradd -u 1001 -r -g root -s /usr/sbin/nologin default
&& apt-get -y remove wget unzip
&& apt-get clean all
&& chown -R 1001:0 /opt/ol/wlp
&& chmod -R g+rw /opt/ol/wlp

--# Set Path Shortcuts ENV PATH=/opt/ol/wlp/bin:/opt/ol/docker/:/opt/ol/helpers/build:$PATH
LOG_DIR=/logs
WLP_OUTPUT_DIR=/opt/ol/wlp/output
WLP_SKIP_MAXPERMSIZE=true
OPENJ9_SCC=$OPENJ9_SCC

--# Configure Open Liberty RUN /opt/ol/wlp/bin/server create
&& rm -rf $WLP_OUTPUT_DIR/.classCache /output/workarea

--# Create symlinks && set permissions for non-root user RUN mkdir /logs
&& mkdir -p /opt/ol/wlp/usr/shared/resources/lib.index.cache
&& ln -s /opt/ol/wlp/usr/shared/resources/lib.index.cache /lib.index.cache
&& mkdir -p $WLP_OUTPUT_DIR/defaultServer
&& ln -s $WLP_OUTPUT_DIR/defaultServer /output
&& ln -s /opt/ol/wlp/usr/servers/defaultServer /config
&& mkdir -p /config/configDropins/defaults
&& mkdir -p /config/configDropins/overrides
&& ln -s /opt/ol/wlp /liberty
&& chown -R 1001:0 /config
&& chmod -R g+rw /config
&& chown -R 1001:0 /logs
&& chmod -R g+rw /logs
&& chown -R 1001:0 /opt/ol/wlp/usr
&& chmod -R g+rw /opt/ol/wlp/usr
&& chown -R 1001:0 /opt/ol/wlp/output
&& chmod -R g+rw /opt/ol/wlp/output
&& chown -R 1001:0 /opt/ol/helpers
&& chmod -R g+rw /opt/ol/helpers
&& chown -R 1001:0 /opt/ol/fixes
&& chmod -R g+rwx /opt/ol/fixes
&& chown -R 1001:0 /opt/ol/helpers
&& chmod -R g+rwx /opt/ol/helpers
&& mkdir /etc/wlp
&& chown -R 1001:0 /etc/wlp
&& chmod -R g+rw /etc/wlp
&& echo "<server description="Default Server"><httpEndpoint id="defaultHttpEndpoint" host="*" />" > /config/configDropins/defaults/open-default-port.xml

--# Create a new SCC layer RUN if [ "$OPENJ9_SCC" = "true" ]; then /opt/ol/helpers/build/populate_scc.sh; fi RUN rm -rf /output/messaging /output/resources/security /logs/* $WLP_OUTPUT_DIR/.classCache RUN chown -R 1001:0 /opt/ol/wlp/output RUN chmod -R g+rwx /opt/ol/wlp/output

--#These settings are needed so that we can run as a different user than 1001 after server warmup ENV RANDFILE=/tmp/.rnd
IBM_JAVA_OPTIONS="-Xshareclasses:name=liberty,nonfatal,cacheDir=/output/.classCache/ ${IBM_JAVA_OPTIONS}"

USER 1001

EXPOSE 9080 9443

ENTRYPOINT ["/opt/ol/helpers/runtime/docker-server.sh"] CMD ["/opt/ol/wlp/bin/server", "run", "defaultServer"] `

Warkdev avatar Jun 07 '20 18:06 Warkdev

thanks @Warkdev - were you able to pinpoint what was the key change you needed?

@ymanton - please note the comment about not getting this to work with SCC enabled. Any ideas here?

arthurdm avatar Jun 10 '20 19:06 arthurdm

Hello,

Sure, first, set SCC to FALSE:

ARG OPENJ9_SCC=false

I couldn't get it working because the shell kept complaining about the if structure:

RUN if [ "$OPENJ9_SCC" = "true" ]; then /opt/ol/helpers/build/populate_scc.sh; fi

Then, I replace all yum byt apt-get and I removed shadow-utils dependency as it's already available.

Finally, I've replaced adduser by useradd command.

Warkdev avatar Jun 10 '20 19:06 Warkdev

FROM arm32v7/adoptopenjdk:14-jre-hotspot

You're using HotSpot, not OpenJ9, so the OpenJ9 SCC feature is not applicable. The code in the Dockerfile doesn't try to detect which JVM is being used, so disabling it manually is currently the only way to get around that.

ymanton avatar Jun 10 '20 19:06 ymanton

Interesting, I must admit that I didn't look at this.

I could try using another openjdk version to see if that works then.

Thanks.

Warkdev avatar Jun 10 '20 19:06 Warkdev

OpenJ9 isn't available for 32-bit ARM so if you're primarily interested in the SCC you would have to move to a different architecture. OpenJ9 is recently available for aarch64 and is in active development, and also x86-64, s390x, and ppc64le.

ymanton avatar Jun 10 '20 20:06 ymanton