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

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

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

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

  • C/C++ コンパイラとして必要なバージョンの Microsoft Visual Studio Build Tools エディションのインストール

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

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

  • 署名付きのネイティブ実行ファイルとの比較を調整する Adoptium temurin-build 比較スクリプトを使用した、セキュアなローカル Eclipse Temurin 再ビルドと公式 Eclipse Temurin バイナリの比較

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

  1. ビルド環境

    Windows x64 で Eclipse Temurin を同一に再ビルドするには、必要な正確な Microsoft Visual Studio Build Tools を備えた適切な Windows ビルド環境が必要であり、以前に存在する潜在的に競合するバージョンを削除する必要があります。

    Windows の「設定」→「アプリと機能」を使用して、以下を含む以前の Microsoft Visual Studio コンポーネントをアンインストールします:

    • Visual Studio <エディション> 20xx …​

    • Microsoft C++ <年..年> 再配布可能パッケージ

    • Microsoft Visual Studio インストーラー

    • Windows Software Development Kit

    • Windows SDK アドオン

  2. 同一のビルドを確保するために Windows システムのタイムゾーンを UTC に設定

    Windows の「設定」→「時刻と言語」→「日付と時刻」→「タイムゾーン」の値を UTC に設定します。

  3. プログラムをアンインストールしたりタイムゾーンを変更した後は Windows マシンを再起動します。

  4. 必要なバージョンの Microsoft Visual Studio をインストール

    バージョン 19.37.32822 の C/C++ コンパイラを含む Microsoft Visual Studio VS2022「Build Tools」エディション バージョン 17.7.3 をインストールします:

  5. 必要なビルド依存関係のインストール:

    OpenJDK のビルドに必要な依存関係を含む Cygwin をインストールします:

    curl -L -O https://cygwin.com/setup-x86_64.exe
    curl -l -O https://cygwin.com/setup-x86_64.exe.sig
    # Verify download: Import "Cygwin <[email protected]>" GPG key
    gpg --keyserver keyserver.ubuntu.com --recv-keys 1A698DE9E2E56300
    gpg --verify setup-x86_64.exe.sig setup-x86_64.exe
    # Check for "Good signature"

    setup-x86_64.exe がセキュアで GPG 検証が「Good signature」を報告した場合、Cygwin をインストールします:

    setup-x86_64.exe --packages autoconf,automake,bsdtar,cmake,cpio,curl,gcc-core,git,gnupg,grep,jq,libtool,make,mingw64-x86_64-gcc-core,perl,rsync,unzip,wget,zip --download --local-install --delete-orphans --site https://mirrors.kernel.org/sourceware/cygwin/ --local-package-dir C:\cygwin_packages --root C:\cygwin64
  6. ビルドを実行するために Cygwin ターミナルウィンドウを起動

    「Cygwin Terminal」デスクトップアイコンをダブルクリックして、bash シェルを実行する新しい Cygwin ターミナルを開きます。

  7. ターゲット Eclipse Temurin リリースを再現するために必要なビルド設定を決定

    必要な Eclipse Temurin リリースバージョンについて、公式 Adoptium リリースバイナリリポジトリから SBOM と SBOM-metadata をダウンロードします。例えば jdk-21.0.4+7 の場合:

    curl -L -O https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.4%2B7/OpenJDK21U-sbom_x64_windows_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_windows_hotspot_21.0.4_7-metadata.json
  8. ビルドするアップストリーム OpenJDK ソースタグを決定

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

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

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

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

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

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

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

    # Download JDK zip
    curl -L -O https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.2%2B9/OpenJDK20U-jdk_x64_windows_hotspot_20.0.2_9.zip
    # 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_windows_hotspot_20.0.2_9.zip.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_windows_hotspot_20.0.2_9.zip.sig OpenJDK20U-jdk_x64_windows_hotspot_20.0.2_9.zip

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

    適切なフォルダーに解凍します。

    unzip OpenJDK20U-jdk_x64_windows_hotspot_20.0.2_9.zip

    後の手順で使用されるスクリプトで java と javac のツールが使用できるように、PATH 環境に追加します。

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

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

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

    注:これは再現性ビルドの問題(https://github.com/adoptium/temurin-build/issues/3790)のため、jdk-21.0.4+7 のみ必要です。それ以降のバージョンでは不要です。

    ビルドのために次の正確なローカルビルドディレクトリを作成します。ビルドが同一に再現されるためにパスがこれに一致する必要があります。

    mkdir -p C:/workspace/openjdk-build/workspace/build/openjdkbuild
  12. ビルドの設定

    ローカル環境に合わせて「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-cacerts-src=<path> を削除します。Temurin は Mozilla CA 証明書でビルドされますが、ローカルビルドは標準の OpenJDK CA 証明書を使用します。

    3. --with-ucrt-dll-dir=<path> を更新して、ローカルマシン上の場所と一致するようにします。次を指定します:

      --with-ucrt-dll-dir='C:/Program Files (x86)/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64'
    4. --with-boot-jdk=<path> を上記でローカルに解凍した boot jdk のパスに置き換えます。

      「C:/workspace/openjdk-build/workspace/build/openjdkbuild」ディレクトリから設定します。

      cd C:/workspace/openjdk-build/workspace/build/openjdkbuild
      bash ~/jdk21u/configure <edited configure args>
  13. Temurin のビルド

    make images

    ビルドされたイメージはディレクトリ /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk の下にあります。

  14. 検証のために公式 Eclipse Temurin リリースをダウンロード

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

    curl -L -o temurin-windows-x64-jdk-21.0.4+7.zip https://api.adoptium.net/v3/binary/version/jdk-21.0.4+7/windows/x64/jdk/hotspot/normal/adoptium
    unzip temurin-windows-x64-jdk-21.0.4+7.zip
  15. Windows 向けの Adoptium temurin-build 再現性ビルド比較ツールをダウンロードしてセットアップ

    Temurin の Windows .exe/dll の「署名」のため、Windows の signtool.exe ツールを使用して一意のデジタル署名を削除するための処理が必要です。このプロセスを支援し比較を実行するために、Adoptium temurin-build ツールが再現性比較スクリプトを提供しています。

    temurin-build 再現性比較スクリプトを実行するために環境をクローンしてセットアップするには、次の手順を実行します:

    • git clone https://github.com/adoptium/temurin-build.git

    • cd temurin-build/tooling

    • BinRepl.java をコンパイル:

      javac src/java/temurin/tools/BinRepl.java
    • 「signtool.exe」を見つけて PATH に追加します。例:

      export PATH=/cygdrive/c/progra~2/wi3cf2~1/10/bin/10.0.22621.0/x64:$PATH
    • 「dumpbin.exe」を見つけて PATH に追加します。例:

      export PATH=/cygdrive/c/progra~2/micros~2/2022/BuildTools/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64:$PATH
    • cd reproducible

    • コンパイルされた BinRepl.class を見つけるために CLASSPATH を設定します。例:

      export CLASSPATH=../src/java
  16. ローカルのセキュアな再ビルドが公式 Eclipse Temurin バイナリと同一であることを検証

    ローカルの再ビルドと Eclipse Temurin 公式 JDK を比較します。このスクリプトは jmod を展開してすべての一意の Temurin 署名「Signatures」を削除する処理を含み、完了するまでに時間がかかります(約 30 分):

    bash ./repro_compare.sh temurin ~/jdk-21.0.4+7 openjdk /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk CYGWIN

    検証が成功した場合、スクリプトは 100% の再現性結果を報告するはずです。

    Comparing /home/user/jdk-21.0.4+7 with /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk ... output to file: reprotest.diff
    Number of differences: 0
    ReproduciblePercent = 100 %
edit icon

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

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

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