添加证书后如何重新创建 JDK tar.gz 文件

How to recreate JDK tar.gz file after added a certificate

我的组织要求所有 JDK 都包含特定证书。

因此我遵循了以下步骤:

  1. 已将 JDK 下载为 jdk-17-linux-x64.tar.gz (170M)
  2. 解压jdk-17-linux-x64.tar.gz
  3. 使用密钥工具添加了我们的证书
  4. 从提取的内容 (300M)
  5. 中创建了一个新的 tarball jdk-17-linux-x64.tar.gz

然后我将新的 tarball 上传到我们的 Jenkins 服务器,但我收到以下错误:

    ERROR: Failed to download https://xxxx/jdk-17-linux-x64.tar.gz from agent; will retry from master
java.io.IOException: incorrect header check
    at com.jcraft.jzlib.InflaterInputStream.read(InflaterInputStream.java:112)
    at org.apache.commons.compress.utils.IOUtils.readFully(IOUtils.java:168)
    at org.apache.commons.compress.utils.IOUtils.readFully(IOUtils.java:142)
    at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.readRecord(TarArchiveInputStream.java:459)
    at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getRecord(TarArchiveInputStream.java:428)
    at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:305)
    at hudson.FilePath.readFromTar(FilePath.java:2582)
Caused: java.io.IOException: Failed to extract input stream
    at hudson.FilePath.readFromTar(FilePath.java:2608)
    at hudson.FilePath.access0(FilePath.java:211)
    at hudson.FilePath$Unpack.invoke(FilePath.java:954)

我发现我创建的新tar.gz大小是300M,比原来的tar球的170M大很多。

有人可以告诉我如何重新创建一个合适的 JDK tar 球吗?也许我应该使用特定的压缩格式?

根据异常消息,Hudson 尝试提取的文件似乎不是有效的 tar.gz 文件。由于重新生成的文件与 未压缩的 文件树的大小大致相同,我的猜测是您在创建文件时错过了压缩步骤;也就是说,您创建了一个 未压缩的 TAR 文件。

正确的 tar.gz 文件是使用 gzip 压缩的 TAR 文件。你可以这样创建一个:

$ tar -cfz my_jdk.tar.gz ....

或者像这样:

$ tar -cf my_jdk.tar ....
$ gzip my_jdk.tar

更多详细信息,请参阅手册条目;例如阅读 man tar 和/或 man gzip.