Linux x64 における Temurin 再現性検証ビルド

以下の手順は、Linux x64 プラットフォームにおける特定の Eclipse Temurin リリースの再現性ビルドを、セキュアなビルド環境で「ソース」から同一に再ビルドするプロセスを詳述しています。このプロセスはアップストリームのソースとセキュアに検証されたビルドツールのみを使用してセキュアな方法で実行され、指定された Eclipse Temurin リリースバイナリをセキュアに検証するためのメカニズムを提供します。この検証は Eclipse Temurin 公式リリースバイナリをビルドするために使用されたサプライチェーンのセキュリティを判断するのに役立ちます。

手順は以下のステップで構成されます:

  • ビルド環境のセットアップ

  • Eclipse Adoptium が使用したものと同一の gcc DevKit をソースからビルド

  • Eclipse Temurin オプションに一致する OpenJDK make 設定引数の決定

  • ローカル Eclipse Temurin JDK のビルド

  • セキュアなローカル Eclipse Temurin 再ビルドと公式 Eclipse Temurin バイナリの比較

Linux x64 再現性検証ビルド手順

  1. ビルド環境

    Linux x64 で Eclipse Temurin を同一に再ビルドするには、バージョン 7 または 8 の適切な Centos または RHEL が必要です。

  2. EPEL ツールのインストール

    Centos7/8:

    yum install epel-release

    RHEL7:

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    RHEL8:

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
  3. ビルドツールのインストール

    yum install -y tar git patch gcc gcc-c++ wget bison texinfo lbzip2 zip unzip glibc.x86_64 glibc-devel.x86_64 glibc.i686 glibc-devel.i686 libgcc.i686
    yum install -y autoconf systemtap systemtap-sdt-devel
  4. GNU make のバージョンが 4 以上か確認

    gcc DevKit をビルドするためには、GNU make が少なくともバージョン 4 である必要があります。

    GNU make のバージョンを確認します。

    make --version

    バージョン 4 以上でない場合は、次のように GNU make 4.3 をダウンロードしてビルドします:

    curl -O -L https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
    curl -O -L https://ftp.gnu.org/gnu/make/make-4.3.tar.gz.sig
    # Verify download:
    gpg --keyserver keyserver.ubuntu.com --recv-keys 6D4EEB02AD834703510B117680CB727A20C79BB2
    # Reference: https://lists.gnu.org/archive/html/bug-make/2016-12/msg00002.html
    gpg --verify make-4.3.tar.gz.sig make-4.3.tar.gz
    # Check for "Good signature"
    # Build
    tar -xf make-4.3.tar.gz
    (cd make-4.3 && ./configure --prefix=/usr/local && make clean && make && make install)
    ln -s /usr/local/bin/make /usr/local/bin/gmake
  5. タイムゾーンを UTC に設定

    同一のビルドを実現するには、ビルドのタイムゾーンを UTC に設定して、正確なバイナリビルド出力を確保する必要があります。

    timedatectl set-timezone UTC
  6. Adoptium DevKit ツールチェーンの make スクリプトファイルをダウンロード

    gcc DevKit ツールチェーンをセキュアかつ同一にビルドするために、Eclipse Adoptium リポジトリから次のスクリプトをセキュアにダウンロードします。これらのスクリプトとパッチにより、DevKit の make プロセスが Centos sysroot でビルドでき、追加の整合性チェックのために Centos RPM の GPG 検証ダウンロードが可能になります。

    curl -L -O https://raw.githubusercontent.com/adoptium/ci-jenkins-pipelines/master/pipelines/build/devkit/make_devkit.sh
    curl -L -O https://raw.githubusercontent.com/adoptium/ci-jenkins-pipelines/master/pipelines/build/devkit/Tools.gmk.patch
    curl -L -O https://raw.githubusercontent.com/adoptium/ci-jenkins-pipelines/master/pipelines/build/devkit/binutils-2.39.patch
  7. ソースから gcc DevKit ツールチェーンをビルド

    bash ./make_devkit.sh jdk21u x86_64 Centos 7.9.2009

    ビルドされた「DevKit パス」はフォルダー jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu にあります。

    新しくビルドされた DevKit ライブラリを見つけるために LD_LIBRARY_PATH を設定します。

    export LD_LIBRARY_PATH=<DevKit path>/lib64:<DevKit path>/lib
  8. 検証する Eclipse Temurin ビルドの SBOM をダウンロード

    例えば、リリース jdk-21.0.4+7 の SBOM と SBOM-metadata をダウンロードするには:

    curl -L -O https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-sbom_x64_linux_hotspot_21.0.4_7.json
    curl -L -O https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-sbom_x64_linux_hotspot_21.0.4_7-metadata.json
  9. ビルドするアップストリーム OpenJDK ソースタグを決定

    SBOM の json ファイルを開いて、リリースがビルドされた「SCM Ref」を確認します。

    {
      "name" : "SCM Ref",
      "value" : "jdk-21.0.4+7_adopt"
    },

    アップストリーム OpenJDK タグはこの値から「_adopt」を除いたもの、例えば「jdk-21.0.4+7」です。

  10. 適切な Boot JDK をダウンロード

    Temurin をビルドするには適切な Boot JDK が必要です。SBOM の json ファイルを開いて、リリースのビルドに使用されたバージョンを確認します。

    {
      "name" : "BOOTJDK",
      "version" : "20.0.2+9"
    },

    https://github.com/adoptium/temurin<NN>-binaries/releases から必要なバージョンをセキュアにダウンロードして検証します。

    # Download JDK tar.gz
    curl -L -O https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.2%2B9/OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gz
    # Download GPG sig file to verify
    curl -L -O https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.2%2B9/OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gz.sig
    # Verify JDK using Adoptium GPG key
    gpg --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B
    echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key 3B04D753C9050D9A5D343F39843C48A565F8F04B trust;
    gpg --verify OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gz.sig OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gz

    「Adoptium GPG Key (DEB/RPM Signing Key) からの正常な署名」を確認します。

    適切なフォルダーに展開します。

    tar -xf OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gz

    PATH 環境に追加します。

    export PATH=<bootjdk>/bin:$PATH
  11. 必要なアップストリーム OpenJDK ソースをクローン

    jdk21u をビルドするアップストリームリリースに置き換えます。

    git clone https://github.com/openjdk/jdk21u.git jdk21u_bld
    # Checkout required tag to build
    (cd jdk21u_bld && git checkout <OpenJDK tag to build>)
  12. ローカルビルドディレクトリを作成

    mkdir openjdk_build
  13. ビルドの設定

    ローカル環境に合わせて「configure args」を決定して編集します。

    1. このビルドの configure 引数を決定

      次の grep を使用して SBOM-metadata.json から必要な configure 引数を見つけます。

      grep "using configure arguments" <SBOM-metadata.json> | sed -n -e "s/^.*using configure arguments '\(.*\)'\..*/\1/p"
    2. --with-devkit=<path> を、ローカルにビルドされた gcc DevKit「<path>/jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu」のパスに置き換えます。

    3. --with-cacerts-src=<path> を削除します。Temurin は Mozilla CA 証明書でビルドされますが、ローカルビルドは標準の OpenJDK CA 証明書を使用します。

    4. --with-boot-jdk=<path> を上記でローカルに展開した boot jdk のパスに置き換えます。

      「openjdk_build」ディレクトリから設定します。

      cd openjdk_build
      bash ../jdk21u_bld/configure <edited configure args>
  14. Temurin のビルド

    make images
  15. 再現性ビルド比較に関係のないビルドイメージの出力を削除

    1. 「cacerts」:Temurin は独自の Mozilla CA 証明書リストでビルドされます(lib/security および java.base/lib/security から削除する必要があります)

    2. 「release」:「release」テキスト説明ファイルは異なるビルド OS 環境および Temurin の追加メタデータにより異なります

    3. 「demo」:Temurin は「demo」サンプルファイルを同梱しません

    4. 「debuginfo」:Temurin JDK の tarball には debuginfo が含まれません

      rm -f images/jdk/lib/security/cacerts
      rm -f images/jdk/release
      rm -rf images/jdk/demo
      find "images/jdk" -type f -name "*.debuginfo" -delete
      (mkdir images/jdk/jmods/java.base_expanded && jmod extract --dir images/jdk/jmods/java.base_expanded images/jdk/jmods/java.base.jmod && rm -f images/jdk/jmods/java.base.jmod)
      rm -f images/jdk/jmods/java.base_expanded/lib/security/cacerts
      # Change back to root directory
      cd ..
  16. 「検証」のために公式 Eclipse Temurin リリースをダウンロード

    検証する Temurin JDK をダウンロードして展開します:

    curl -L -o temurin-linux-x64-jdk-21.0.4+7.tar.gz https://api.adoptium.net/v3/binary/version/jdk-21.0.4+7/linux/x64/jdk/hotspot/normal/adoptium
    tar -xf temurin-linux-x64-jdk-21.0.4+7.tar.gz
  17. 同じ非関連ファイルを削除

    rm -f jdk-21.0.4+7/lib/security/cacerts
    rm -f jdk-21.0.4+7/release
    rm -f jdk-21.0.4+7/NOTICE
    (mkdir jdk-21.0.4+7/jmods/java.base_expanded && jmod extract --dir jdk-21.0.4+7/jmods/java.base_expanded jdk-21.0.4+7/jmods/java.base.jmod && rm -f jdk-21.0.4+7/jmods/java.base.jmod)
    rm -f jdk-21.0.4+7/jmods/java.base_expanded/lib/security/cacerts
  18. ローカルのセキュアな再ビルドが公式 Eclipse Temurin バイナリと同一であることを検証

    2つのイメージを比較します。

    diff -r openjdk_build/images/jdk jdk-21.0.4+7

    検証が成功した場合、差分はないはずです。

edit icon

このドキュメントの改善にご協力ください!

すべてのAdoptiumドキュメントはオープンソースです。誤りや不明な点がありましたらお知らせください。

ドキュメント著者
andrew-m-leonardgdams
Join our Slack channel to discuss and reach out to maintainers.Join Slack