以下の手順は、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 再現性検証ビルド手順
-
ビルド環境
Linux x64 で Eclipse Temurin を同一に再ビルドするには、バージョン 7 または 8 の適切な Centos または RHEL が必要です。
-
EPEL ツールのインストール
Centos7/8:
yum install epel-releaseRHEL7:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmRHEL8:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -
ビルドツールのインストール
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 -
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 -
タイムゾーンを UTC に設定
同一のビルドを実現するには、ビルドのタイムゾーンを UTC に設定して、正確なバイナリビルド出力を確保する必要があります。
timedatectl set-timezone UTC -
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 -
ソースから 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 -
検証する 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 -
ビルドするアップストリーム OpenJDK ソースタグを決定
SBOM の json ファイルを開いて、リリースがビルドされた「SCM Ref」を確認します。
{ "name" : "SCM Ref", "value" : "jdk-21.0.4+7_adopt" },アップストリーム OpenJDK タグはこの値から「_adopt」を除いたもの、例えば「jdk-21.0.4+7」です。
-
適切な 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.gzPATH 環境に追加します。
export PATH=<bootjdk>/bin:$PATH -
必要なアップストリーム 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>) -
ローカルビルドディレクトリを作成
mkdir openjdk_build -
ビルドの設定
ローカル環境に合わせて「configure args」を決定して編集します。
-
このビルドの configure 引数を決定
次の grep を使用して SBOM-metadata.json から必要な configure 引数を見つけます。
grep "using configure arguments" <SBOM-metadata.json> | sed -n -e "s/^.*using configure arguments '\(.*\)'\..*/\1/p" -
--with-devkit=<path> を、ローカルにビルドされた gcc DevKit「<path>/jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu」のパスに置き換えます。
-
--with-cacerts-src=<path> を削除します。Temurin は Mozilla CA 証明書でビルドされますが、ローカルビルドは標準の OpenJDK CA 証明書を使用します。
-
--with-boot-jdk=<path> を上記でローカルに展開した boot jdk のパスに置き換えます。
「openjdk_build」ディレクトリから設定します。
cd openjdk_build bash ../jdk21u_bld/configure <edited configure args>
-
-
Temurin のビルド
make images -
再現性ビルド比較に関係のないビルドイメージの出力を削除
-
「cacerts」:Temurin は独自の Mozilla CA 証明書リストでビルドされます(lib/security および java.base/lib/security から削除する必要があります)
-
「release」:「release」テキスト説明ファイルは異なるビルド OS 環境および Temurin の追加メタデータにより異なります
-
「demo」:Temurin は「demo」サンプルファイルを同梱しません
-
「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 ..
-
-
「検証」のために公式 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 -
同じ非関連ファイルを削除
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 -
ローカルのセキュアな再ビルドが公式 Eclipse Temurin バイナリと同一であることを検証
2つのイメージを比較します。
diff -r openjdk_build/images/jdk jdk-21.0.4+7検証が成功した場合、差分はないはずです。

