使用ARM64 musl-lib编译OpenJDK 9及更高版本

时间:2018-10-14 08:07:11

标签: java docker arm64 alpine musl

有点背景。

我的目标是在ARM64上使用JRE创建超薄的docker映像。 这是可能会影响最终图像尺寸的区域。

  1. 使用JAVA 9及更高版本使我能够利用新的Java模块功能。
  2. 将Alpine用于ARM64可提供超薄的基本映像。

到目前为止,我所做的是: 有适用于ARM64的OpenJDK 9及更高版本,使用模块功能,我得到的JRE大小约为30M,这是一个了不起的成就。

现在,我正在努力转向Alpine基本映像,它需要使用musl-libc编译OpenJDK。 我设法用glibc重新编译了持久的OpenJDK,我的问题是用musl libc编译OpenJDK 9有多复杂,我的理解是,glibc和musl公开了相同的接口,基本上,OpenJDK应该与musl-libc兼容。

任何挑战挑战的方法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

仅在(五月/ 19)-AArch64的openjdk9(实验)现在可以从Alpine存储库中获得!

包裹详细信息: https://pkgs.alpinelinux.org/package/edge/testing/aarch64/openjdk9

使用以下方法进行抓取:

apk add openjdk9 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

前几天,我不得不在Musl Alpine 3.8上从源代码构建OpenJDK。幸运的是,这非常顺利!因此,如果最终不得不从源代码构建OpenJDK来获得ARM64 musl支持,则可以按照以下步骤对目标进行一些修改。

注1:为了扩展评论中的讨论,关于Musl Alpine的OpenJDK当前正在开发中。最新可用的是JDK 12早期访问,仅适用于X64:http://jdk.java.net/12。 JDK 9、10和11具有开发分支,但尚未GA正式发布。根据您对内置OpenJDK的使用,应该认真考虑这一点。

自然,最好使用经过测试的OpenJDK二进制文件(如果有的话)。

注释2:以下步骤是在X86工作站上,通过OpenJDK 11在Alpine 3.8传统磁盘安装(不是docker)上进行测试的。

先决条件:

包装

在构建之前,应先安装以下软件包(希望我不会丢失任何软件包):

// build tools and utilities  
apk add build-base autoconf bash coreutils gawk grep mercurial zip  
// X11 libraries   
apk add libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev  
// Additional libraries  
apk add alsa-lib-dev cups-dev fontconfig-dev

启动JDK

然后,具有讽刺意味的是,您需要一个引导JDK:安装了与先前版本相同的OpenJDK ...它可能是在主机上运行的OpenJDK(不是交叉编译的),因此您应该动手使用OpenJDK 10或11 musl X86构建。

在某个时候,已经提供了OpenJDK 11早期访问二进制文件,但是由于尚未准备好将其从OpenJDK download page中删除。对于JDK引导,可能就足够了,因此请尝试掌握它:openjdk-11+28_linux-x64-musl_bin.tar.gz。如果您希望(或必须)坚持使用JDK9,则可以使用OpenJDK 8进行引导,并且因为openjdk8 apk软件包而可用,在那里也没有问题。

通常,构建会自动选择引导JDK,但如果没有,则可以指定它与--with-boot-jdk=[path-to-jdk]一起配置。

来源:

对于Alpine OpenJDK构建,应使用OpenJDK的Portola分支。这些已经与musl兼容。 JDK 9、10和11有分支。如上所述,它们是实验性的。

获取OpenJDK 11源代码:

hg clone https://hg.openjdk.java.net/portola/jdk11

建筑物:

一旦完成所有设置,构建就非常简单。我用过:

cd jdk11
bash configure
make JOBS=8 LOG=info hotspot

参考:

有关更多参考,请参见JDK11构建说明(不适用于Alpine):

OpenJDK交叉编译: