【问题标题】:Reproducible builds with jlink使用 jlink 可重现的构建
【发布时间】:2020-09-02 08:29:59
【问题描述】:

简化的 JDK(使用 jlink 创建)是我们应用程序的一部分。 JDK 映像所需的模块很少更改。不幸的是,生成一个新的 JDK 映像(具有完全相同的jlink 参数)会导致不同的输出,所以 客户端必须在差异升级期间一次又一次地下载相同的文件,这是不必要的。

这是一个 PoC:

$ mkdir jdk-15a jdk-15b
$ tar xzf openjdk-15_linux-x64_bin.tar.gz --directory jdk-15a/
$ tar xzf openjdk-15_linux-x64_bin.tar.gz --directory jdk-15b/
$ jdk-15a/jdk-15/bin/jlink --compress=1 --module-path jdk-15a/jdk-15/jmods --add-modules java.base,jdk.management,jdk.unsupported,jdk.charsets --output output01
$ jdk-15b/jdk-15/bin/jlink --compress=1 --module-path jdk-15b/jdk-15/jmods --add-modules java.base,jdk.management,jdk.unsupported,jdk.charsets --output output02
$ md5sum output*/lib/modules
9ae5ae63df59593a0892c5ed411d7e59  output01/lib/modules
24b4af31553670799ab286ad1186329e  output02/lib/modules

(我在多个构建服务器上使用类似于 JDK 实例的 jdk-15ajdk-15b 目录。)

在这种情况下,有什么方法可以从jlink 获取byte-to-byte identical output (reproducible build)

使用的JDK版本:

$ cat jdk-15a/jdk-15/release 
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION="15"
JAVA_VERSION_DATE="2020-09-15"
...
OS_ARCH="x86_64"
OS_NAME="Linux"
SOURCE=".:hg:e3f940bd3c8f"

【问题讨论】:

  • JDK-8241602 声称在 jdk-15 build 22 中已修复。您使用的是哪个版本?
  • @Marcono1234:感谢您的链接!它是 Build 36 (2020/8/11)。我应该将此报告为回归吗?
  • 是的,我想如果你这样做会很好。我也对他们对 JDK-8241602 的修复感到有些困惑,因为它似乎并没有真正解决根本问题(未订购集合?)。
  • 好的,我已经在 bugreport.java.com 上报告了。
  • 太好了,请在创建公共错误报告后更新此问题。

标签: java jlink binary-reproducibility


【解决方案1】:

这是一个 JDK 错误,报告于 JDK-8252730

【讨论】:

    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多