Update Java toolchains
1. Replace the OpenJDK with an unmodified OpenJDK from Alpine Linux 2. Add Alibaba Dragonwell as the default JDK for the Java demos
This commit is contained in:
parent
122a66289c
commit
cd5cc0cb5c
@ -4,7 +4,9 @@ This project demonstrates how Occlum enables _unmodified_ Java programs running
|
|||||||
|
|
||||||
# About JDK
|
# About JDK
|
||||||
|
|
||||||
JDK 11 is supported currently. The source code of JDK 11 can be found [here](https://hg.openjdk.java.net/portola/jdk11). In order for it to cooperate with Occlum, a [minor modification](../../tools/toolchains/java/) has been made to it. The modified JDK is compiled in Alpine Linux with `bash configure && make images` commands. We have installed it at `/opt/occlum/toolchains/jvm/java-11-openjdk/jre` while making the Docker image.
|
Both the unmodified [OpenJDK 11](https://hg.openjdk.java.net/portola/jdk11), which is imported from Alpine Linux, and the [Alibaba Dragonwell](https://github.com/alibaba/dragonwell11/tree/dragonwell-for-enclave), which is a downstream version of OpenJDK, are supported now. We have already installed OpenJDK and Dragonwell while building the Docker image, the OpenJDK is installed at `/opt/occlum/toolchains/jvm/java-11-openjdk`, and the Dragonwell is installed at `/opt/occlum/toolchains/jvm/java-11-alibaba-dragonwell`.
|
||||||
|
|
||||||
|
Our demos use Dragonwell as the default JDK, you are free to change to OpenJDK by setting the `JAVA_HOME` to point to the installation directory of OpenJDK and copying it into Occlum instance.
|
||||||
|
|
||||||
## Demo: Hello World
|
## Demo: Hello World
|
||||||
|
|
||||||
|
@ -10,5 +10,5 @@ git checkout -b 2.1.6.RELEASE tags/2.1.6.RELEASE
|
|||||||
# 2. Build the Fat JAR file with Maven
|
# 2. Build the Fat JAR file with Maven
|
||||||
cd complete
|
cd complete
|
||||||
export LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib
|
export LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib
|
||||||
export JAVA_HOME=/opt/occlum/toolchains/jvm/java-11-openjdk/jre
|
export JAVA_HOME=/opt/occlum/toolchains/jvm/java-11-alibaba-dragonwell
|
||||||
./mvnw clean package
|
./mvnw clean package
|
||||||
|
@ -19,8 +19,8 @@ check_file_exist() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
init_workspace() {
|
init_instance() {
|
||||||
# Init Occlum Workspace
|
# Init Occlum instance
|
||||||
rm -rf occlum_instance && mkdir occlum_instance
|
rm -rf occlum_instance && mkdir occlum_instance
|
||||||
cd occlum_instance
|
cd occlum_instance
|
||||||
occlum init
|
occlum init
|
||||||
@ -29,15 +29,15 @@ init_workspace() {
|
|||||||
.resource_limits.max_num_of_threads = 64 |
|
.resource_limits.max_num_of_threads = 64 |
|
||||||
.process.default_heap_size = "256MB" |
|
.process.default_heap_size = "256MB" |
|
||||||
.process.default_mmap_size = "1120MB" |
|
.process.default_mmap_size = "1120MB" |
|
||||||
.entry_points = [ "/usr/lib/jvm/java-11-openjdk/jre/bin" ] |
|
.entry_points = [ "/usr/lib/jvm/java-11-alibaba-dragonwell/jre/bin" ] |
|
||||||
.env.default = [ "LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk/jre/lib/server:/usr/lib/jvm/java-11-openjdk/jre/lib:/usr/lib/jvm/java-11-openjdk/jre/../lib" ]' Occlum.json)" && \
|
.env.default = [ "LD_LIBRARY_PATH=/usr/lib/jvm/java-11-alibaba-dragonwell/jre/lib/server:/usr/lib/jvm/java-11-alibaba-dragonwell/jre/lib:/usr/lib/jvm/java-11-alibaba-dragonwell/jre/../lib" ]' Occlum.json)" && \
|
||||||
echo "${new_json}" > Occlum.json
|
echo "${new_json}" > Occlum.json
|
||||||
}
|
}
|
||||||
|
|
||||||
build_web() {
|
build_web() {
|
||||||
# Copy JVM and JAR file into Occlum Workspace and build
|
# Copy JVM and JAR file into Occlum instance and build
|
||||||
mkdir -p image/usr/lib
|
mkdir -p image/usr/lib/jvm
|
||||||
cp -r /opt/occlum/toolchains/jvm image/usr/lib/
|
cp -r /opt/occlum/toolchains/jvm/java-11-alibaba-dragonwell image/usr/lib/jvm
|
||||||
cp /usr/local/occlum/x86_64-linux-musl/lib/libz.so.1 image/lib
|
cp /usr/local/occlum/x86_64-linux-musl/lib/libz.so.1 image/lib
|
||||||
mkdir -p image/usr/lib/spring
|
mkdir -p image/usr/lib/spring
|
||||||
cp ../${jar_path} image/usr/lib/spring/
|
cp ../${jar_path} image/usr/lib/spring/
|
||||||
@ -48,16 +48,16 @@ run_web() {
|
|||||||
jar_path=./gs-messaging-stomp-websocket/complete/target/gs-messaging-stomp-websocket-0.1.0.jar
|
jar_path=./gs-messaging-stomp-websocket/complete/target/gs-messaging-stomp-websocket-0.1.0.jar
|
||||||
check_file_exist ${jar_path}
|
check_file_exist ${jar_path}
|
||||||
jar_file=`basename "${jar_path}"`
|
jar_file=`basename "${jar_path}"`
|
||||||
init_workspace
|
init_instance
|
||||||
build_web
|
build_web
|
||||||
echo -e "${BLUE}occlum run JVM web app${NC}"
|
echo -e "${BLUE}occlum run JVM web app${NC}"
|
||||||
occlum run /usr/lib/jvm/java-11-openjdk/jre/bin/java -Xmx512m -XX:MaxMetaspaceSize=64m -Dos.name=Linux -jar /usr/lib/spring/${jar_file}
|
occlum run /usr/lib/jvm/java-11-alibaba-dragonwell/jre/bin/java -Xmx512m -XX:MaxMetaspaceSize=64m -Dos.name=Linux -jar /usr/lib/spring/${jar_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
build_hello() {
|
build_hello() {
|
||||||
# Copy JVM and class file into Occlum Workspace and build
|
# Copy JVM and class file into Occlum instance and build
|
||||||
mkdir -p image/usr/lib
|
mkdir -p image/usr/lib/jvm
|
||||||
cp -r /opt/occlum/toolchains/jvm image/usr/lib/
|
cp -r /opt/occlum/toolchains/jvm/java-11-alibaba-dragonwell image/usr/lib/jvm
|
||||||
cp /usr/local/occlum/x86_64-linux-musl/lib/libz.so.1 image/lib
|
cp /usr/local/occlum/x86_64-linux-musl/lib/libz.so.1 image/lib
|
||||||
cp ../${hello} image
|
cp ../${hello} image
|
||||||
occlum build
|
occlum build
|
||||||
@ -66,10 +66,10 @@ build_hello() {
|
|||||||
run_hello() {
|
run_hello() {
|
||||||
hello=./hello_world/Main.class
|
hello=./hello_world/Main.class
|
||||||
check_file_exist ${hello}
|
check_file_exist ${hello}
|
||||||
init_workspace
|
init_instance
|
||||||
build_hello
|
build_hello
|
||||||
echo -e "${BLUE}occlum run JVM hello${NC}"
|
echo -e "${BLUE}occlum run JVM hello${NC}"
|
||||||
occlum run /usr/lib/jvm/java-11-openjdk/jre/bin/java -Xmx512m -XX:MaxMetaspaceSize=64m -Dos.name=Linux Main
|
occlum run /usr/lib/jvm/java-11-alibaba-dragonwell/jre/bin/java -Xmx512m -XX:MaxMetaspaceSize=64m -Dos.name=Linux Main
|
||||||
}
|
}
|
||||||
|
|
||||||
arg=$1
|
arg=$1
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
FROM alpine:3.11 AS alpine
|
||||||
|
|
||||||
|
LABEL maintainer="Qing Li <geding.lq@antgroup.com>"
|
||||||
|
|
||||||
|
RUN apk update && \
|
||||||
|
apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
|
|
||||||
FROM centos:7.5.1804
|
FROM centos:7.5.1804
|
||||||
|
|
||||||
LABEL maintainer="He Sun <bochang.sh@antfin.com>"
|
LABEL maintainer="He Sun <bochang.sh@antfin.com>"
|
||||||
@ -108,9 +115,13 @@ ENV PATH="/opt/occlum/toolchains/rust/bin:$PATH"
|
|||||||
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/sgxsdk/sdk_libs"
|
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/sgxsdk/sdk_libs"
|
||||||
|
|
||||||
# Install Occlum Java toolchain (JDK 11)
|
# Install Occlum Java toolchain (JDK 11)
|
||||||
|
ARG JDK11_PATH=/opt/occlum/toolchains/jvm/java-11-openjdk
|
||||||
|
COPY --from=alpine /usr/lib/jvm/java-11-openjdk $JDK11_PATH
|
||||||
|
RUN rm $JDK11_PATH/lib/security/cacerts
|
||||||
|
COPY --from=alpine /etc/ssl/certs/java/cacerts $JDK11_PATH/lib/security/cacerts
|
||||||
COPY toolchains/java /tmp/java
|
COPY toolchains/java /tmp/java
|
||||||
WORKDIR /tmp
|
WORKDIR /tmp
|
||||||
RUN cd java && ./install.sh && rm -rf /tmp/java
|
RUN cd java && ./install_dragonwell.sh && rm -rf /tmp/java
|
||||||
ENV PATH="/opt/occlum/toolchains/jvm/bin:$PATH"
|
ENV PATH="/opt/occlum/toolchains/jvm/bin:$PATH"
|
||||||
|
|
||||||
# Install the latest version of Occlum
|
# Install the latest version of Occlum
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
|
FROM alpine:3.11 AS alpine
|
||||||
|
|
||||||
|
LABEL maintainer="Qing Li <geding.lq@antgroup.com>"
|
||||||
|
|
||||||
|
RUN apk update && \
|
||||||
|
apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
|
|
||||||
FROM ubuntu:18.04
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
LABEL maintainer="Qing Li <geding.lq@alibaba-inc.com>"
|
LABEL maintainer="Qing Li <geding.lq@antgroup.com>"
|
||||||
|
|
||||||
RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||||
alien \
|
alien \
|
||||||
@ -95,9 +102,13 @@ ENV PATH="/opt/occlum/toolchains/rust/bin:$PATH"
|
|||||||
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/sgxsdk/sdk_libs"
|
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/sgxsdk/sdk_libs"
|
||||||
|
|
||||||
# Install Occlum Java toolchain (JDK 11)
|
# Install Occlum Java toolchain (JDK 11)
|
||||||
|
ARG JDK11_PATH=/opt/occlum/toolchains/jvm/java-11-openjdk
|
||||||
|
COPY --from=alpine /usr/lib/jvm/java-11-openjdk $JDK11_PATH
|
||||||
|
RUN rm $JDK11_PATH/lib/security/cacerts
|
||||||
|
COPY --from=alpine /etc/ssl/certs/java/cacerts $JDK11_PATH/lib/security/cacerts
|
||||||
COPY toolchains/java /tmp/java
|
COPY toolchains/java /tmp/java
|
||||||
WORKDIR /tmp
|
WORKDIR /tmp
|
||||||
RUN cd java && ./install.sh && rm -rf /tmp/java
|
RUN cd java && ./install_dragonwell.sh && rm -rf /tmp/java
|
||||||
ENV PATH="/opt/occlum/toolchains/jvm/bin:$PATH"
|
ENV PATH="/opt/occlum/toolchains/jvm/bin:$PATH"
|
||||||
|
|
||||||
# Install the latest version of Occlum
|
# Install the latest version of Occlum
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
From f195a65829b168efddad9cbe41b6154c4483005f Mon Sep 17 00:00:00 2001
|
|
||||||
From: "jeffery.wsj" <jeffery.wsj@alibaba-inc.com>
|
|
||||||
Date: Fri, 10 Jul 2020 08:31:42 +0000
|
|
||||||
Subject: [PATCH] Xhook SYS_getcpu vdso call
|
|
||||||
|
|
||||||
---
|
|
||||||
src/hotspot/os/linux/os_linux.cpp | 16 +++++++++-------
|
|
||||||
1 file changed, 9 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp
|
|
||||||
index dbf18b7b5f..59a2ef3ab6 100644
|
|
||||||
--- a/src/hotspot/os/linux/os_linux.cpp
|
|
||||||
+++ b/src/hotspot/os/linux/os_linux.cpp
|
|
||||||
@@ -2876,13 +2876,15 @@ int os::Linux::sched_getcpu_syscall(void) {
|
|
||||||
#elif defined(AMD64)
|
|
||||||
// Unfortunately we have to bring all these macros here from vsyscall.h
|
|
||||||
// to be able to compile on old linuxes.
|
|
||||||
- #define __NR_vgetcpu 2
|
|
||||||
- #define VSYSCALL_START (-10UL << 20)
|
|
||||||
- #define VSYSCALL_SIZE 1024
|
|
||||||
- #define VSYSCALL_ADDR(vsyscall_nr) (VSYSCALL_START+VSYSCALL_SIZE*(vsyscall_nr))
|
|
||||||
- typedef long (*vgetcpu_t)(unsigned int *cpu, unsigned int *node, unsigned long *tcache);
|
|
||||||
- vgetcpu_t vgetcpu = (vgetcpu_t)VSYSCALL_ADDR(__NR_vgetcpu);
|
|
||||||
- retval = vgetcpu(&cpu, NULL, NULL);
|
|
||||||
+// #define __NR_vgetcpu 2
|
|
||||||
+// #define VSYSCALL_START (-10UL << 20)
|
|
||||||
+// #define VSYSCALL_SIZE 1024
|
|
||||||
+// #define VSYSCALL_ADDR(vsyscall_nr) (VSYSCALL_START+VSYSCALL_SIZE*(vsyscall_nr))
|
|
||||||
+// typedef long (*vgetcpu_t)(unsigned int *cpu, unsigned int *node, unsigned long *tcache);
|
|
||||||
+// vgetcpu_t vgetcpu = (vgetcpu_t)VSYSCALL_ADDR(__NR_vgetcpu);
|
|
||||||
+// retval = vgetcpu(&cpu, NULL, NULL);
|
|
||||||
+ cpu = get_nprocs();
|
|
||||||
+ retval = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return (retval == -1) ? retval : cpu;
|
|
||||||
--
|
|
||||||
2.17.1
|
|
||||||
|
|
@ -2,24 +2,25 @@
|
|||||||
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
DOWNLOAD_DIR=/tmp/occlum_java_toolchain
|
DOWNLOAD_DIR=/tmp/occlum_java_toolchain
|
||||||
INSTALL_DIR=/opt/occlum/toolchains/jvm
|
INSTALL_DIR=/opt/occlum/toolchains/jvm
|
||||||
|
JDK=java-11-alibaba-dragonwell
|
||||||
|
|
||||||
# Exit if any command fails
|
# Exit if any command fails
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Clean previous download and installation if any
|
# Clean previous download and installation if any
|
||||||
rm -rf ${DOWNLOAD_DIR}
|
rm -rf ${DOWNLOAD_DIR}
|
||||||
rm -rf ${INSTALL_DIR}
|
rm -rf ${INSTALL_DIR}/${JDK}
|
||||||
|
|
||||||
# Create the download directory
|
# Create the download directory
|
||||||
mkdir -p ${DOWNLOAD_DIR}
|
mkdir -p ${DOWNLOAD_DIR}
|
||||||
cd ${DOWNLOAD_DIR}
|
cd ${DOWNLOAD_DIR}
|
||||||
|
|
||||||
# Download and install JDK 11
|
# Download and install Dragonwell JDK
|
||||||
JDK=openjdk-11-for-occlum-0.14.0
|
wget https://dragonwell.oss-cn-shanghai.aliyuncs.com/11/11.0.8.3_GA/linux/x64/Alibaba_Dragonwell_11.0.8.3-Enclave-Experimental-WithoutDebugInfo_x64.zip
|
||||||
wget https://github.com/occlum/occlum/releases/download/0.14.0/${JDK}.tar.gz
|
unzip Alibaba_Dragonwell_11.0.8.3-Enclave-Experimental-WithoutDebugInfo_x64.zip
|
||||||
tar -xf ${JDK}.tar.gz
|
mkdir -p ${INSTALL_DIR}
|
||||||
mkdir -p ${INSTALL_DIR}/java-11-openjdk
|
mv ${DOWNLOAD_DIR}/jdk ${INSTALL_DIR}/${JDK}
|
||||||
mv ${DOWNLOAD_DIR}/${JDK} ${INSTALL_DIR}/java-11-openjdk/jre
|
ln -sf . ${INSTALL_DIR}/${JDK}/jre
|
||||||
|
|
||||||
# Clean the download directory
|
# Clean the download directory
|
||||||
rm -rf ${DOWNLOAD_DIR}
|
rm -rf ${DOWNLOAD_DIR}
|
||||||
@ -28,12 +29,14 @@ rm -rf ${DOWNLOAD_DIR}
|
|||||||
mkdir -p ${INSTALL_DIR}/bin
|
mkdir -p ${INSTALL_DIR}/bin
|
||||||
cat > ${INSTALL_DIR}/bin/occlum-java <<EOF
|
cat > ${INSTALL_DIR}/bin/occlum-java <<EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib ${INSTALL_DIR}/java-11-openjdk/jre/bin/java "\$@"
|
JAVA_HOME="\${JAVA_HOME:-${INSTALL_DIR}/${JDK}}"
|
||||||
|
LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib \${JAVA_HOME}/bin/java "\$@"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat > ${INSTALL_DIR}/bin/occlum-javac <<EOF
|
cat > ${INSTALL_DIR}/bin/occlum-javac <<EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib ${INSTALL_DIR}/java-11-openjdk/jre/bin/javac "\$@"
|
JAVA_HOME="\${JAVA_HOME:-${INSTALL_DIR}/${JDK}}"
|
||||||
|
LD_LIBRARY_PATH=/opt/occlum/toolchains/gcc/x86_64-linux-musl/lib \${JAVA_HOME}/bin/javac "\$@"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x ${INSTALL_DIR}/bin/occlum-java
|
chmod +x ${INSTALL_DIR}/bin/occlum-java
|
Loading…
Reference in New Issue
Block a user