Die folgenden Anweisungen beschreiben den Prozess des identischen Wiederaufbaus aus dem „Quellcode" in einer sicheren Build-Umgebung – einen reproduzierbaren Build für ein gegebenes Eclipse Temurin-Release auf der Windows-x64-Plattform. Der Prozess wird auf sichere Weise durchgeführt, wobei ausschließlich die Upstream-Quellen und die offiziellen Microsoft Visual Studio Build-Werkzeuge verwendet werden, um einen Mechanismus zur sicheren Verifizierung der gegebenen Eclipse Temurin-Release-Binärdatei bereitzustellen. Diese Verifizierung hilft dann dabei, die Sicherheit der Lieferketten zu bestimmen, die zum Erstellen der offiziellen Eclipse Temurin-Release-Binärdateien verwendet werden.
Das Verfahren besteht aus den folgenden Schritten:
-
Einrichtung der Build-Umgebung
-
Installieren der erforderlichen Version der Microsoft Visual Studio Build Tools-Edition für den C/C++-Compiler
-
Bestimmen der OpenJDK-Make-Konfigurationsargumente, die den Eclipse Temurin-Optionen entsprechen
-
Erstellen des lokalen Eclipse Temurin JDK
-
Vergleichen des sicheren lokalen Eclipse Temurin-Wiederaufbaus mit der offiziellen Eclipse Temurin-Binärdatei mithilfe des Adoptium temurin-build-Vergleichsskripts, das den Vergleich mit „signierten" nativen Executables berücksichtigt
Reproduzierbares Verifizierungs-Build-Verfahren für Windows x64
-
Build-Umgebung
Um Eclipse Temurin auf Windows x64 identisch neu zu erstellen, ist eine geeignete Windows-Build-Umgebung mit den exakt gleichen erforderlichen Microsoft Visual Studio Build Tools erforderlich. Außerdem müssen alle potenziell in Konflikt stehenden früheren Versionen entfernt werden.
Stellen Sie sicher, dass alle früheren Microsoft Visual Studio-Komponenten über die Windows-Einstellungen unter „Apps & Features" deinstalliert wurden, einschließlich:
-
Visual Studio <Edition> 20xx …
-
Microsoft C++ <Jahr..Jahr> Redistributables
-
Microsoft Visual Studio Installer
-
Windows Software Development Kit
-
Windows SDK Addon
-
-
Stellen Sie sicher, dass die Windows-Systemzeitzone auf UTC gesetzt ist, um einen identischen Build zu gewährleisten
Setzen Sie die Windows-„Zeitzone" auf UTC, indem Sie den Wert unter Windows-Einstellungen → „Zeit & Sprache" → „Datum & Uhrzeit" → „Zeitzone" überprüfen.
-
Starten Sie den Windows-Rechner neu, nachdem Sie Programme deinstalliert oder die Zeitzone geändert haben.
-
Erforderliche Version von Microsoft Visual Studio installieren
Installieren Sie Microsoft Visual Studio VS2022 „Build Tools" Edition Version 17.7.3, die Version 19.37.32822 des C/C++-Compilers enthält:
-
Herunterladen und ausführen: https://download.visualstudio.microsoft.com/download/pr/1d66edfe-3c83-476b-bf05-e8901c62ba7f/bac71effb5a23d7cd1a81e5f628a0c8dcb7e8a07e0aa7077c853ed84a862dceb/vs_BuildTools.exe
-
Wählen Sie „Workloads" – „Desktop-Entwicklung mit C++"
-
„Installieren"
-
-
Erforderliche Build-Abhängigkeiten installieren:
Installieren Sie Cygwin mit den erforderlichen Abhängigkeiten für den OpenJDK-Build:
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"Sofern setup-x86_64.exe sicher ist und GPG-Verify „Good signature" meldet, Cygwin installieren:
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 -
Ein Cygwin-Terminalfenster starten, um den Build darin durchzuführen
Doppelklicken Sie auf das „Cygwin Terminal"-Desktop-Symbol, um ein neues Cygwin-Terminal zu öffnen, das die Bash-Shell ausführt
-
Erforderliche Build-Konfiguration für die Reproduktion des Ziel-Eclipse Temurin-Releases bestimmen
Laden Sie für die erforderliche Eclipse Temurin-Release-Version die SBOM und SBOM-Metadaten aus dem offiziellen Adoptium-Release-Binaries-Repository herunter, z. B. für 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 -
Upstream-OpenJDK-Quell-Tag für den Build bestimmen
Öffnen Sie die SBOM-JSON-Datei und bestimmen Sie den „SCM Ref", aus dem der Release erstellt wurde
{ "name" : "SCM Ref", "value" : "jdk-21.0.4+7_adopt" },Der Upstream-OpenJDK-Tag ist dieser Wert ohne das „_adopt", z. B. „jdk-21.0.4+7"
-
Geeignetes Boot JDK herunterladen
Um Temurin zu erstellen, benötigen Sie ein geeignetes Boot JDK. Öffnen Sie die SBOM-JSON-Datei und bestimmen Sie die Version, die zum Erstellen des Releases verwendet wurde
{ "name" : "BOOTJDK", "version" : "20.0.2+9" },Laden Sie die erforderliche Version sicher herunter und verifizieren Sie sie von 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.zipStellen Sie sicher, dass „Good signature from Adoptium GPG Key (DEB/RPM Signing Key)" angezeigt wird
In einen geeigneten Ordner entzippen
unzip OpenJDK20U-jdk_x64_windows_hotspot_20.0.2_9.zipZur PATH-Umgebungsvariablen hinzufügen, sodass die java- und javac-Werkzeuge für die später in diesen Anweisungen verwendeten Skripte verfügbar sind.
export PATH=<bootjdk>/bin:$PATH -
Erforderlichen Upstream-OpenJDK-Quellcode klonen
Ersetzen Sie jdk21u durch den zu erstellenden Upstream-Release
git clone https://github.com/openjdk/jdk21u.git # Checkout required tag to build (cd jdk21u && git checkout <OpenJDK tag to build>) -
Spezifisches lokales Build-Verzeichnis erstellen
Hinweis: Dies ist NUR für jdk-21.0.4+7 aufgrund eines Problems mit dem reproduzierbaren Build (https://github.com/adoptium/temurin-build/issues/3790) erforderlich. Für spätere Versionen ist dies nicht notwendig.
Erstellen Sie das folgende exakte lokale Build-Verzeichnis für den Build; der Pfad muss für einen identisch reproduzierbaren Build übereinstimmen.
mkdir -p C:/workspace/openjdk-build/workspace/build/openjdkbuild -
Build konfigurieren
Bestimmen und bearbeiten Sie die „configure args", um Ihrer lokalen Umgebung zu entsprechen
-
Konfigurationsargumente für diesen Build bestimmen
Verwenden Sie den folgenden grep-Befehl, um die erforderlichen Konfigurationsargumente aus der SBOM-metadata.json zu finden
grep "using configure arguments" <SBOM-metadata.json> | sed -n -e "s/^.*using configure arguments '\(.*\)'\..*/\1/p" -
Entfernen Sie -–with-cacerts-src=<path>, da Temurin mit Mozilla CA-Zertifikaten erstellt wird, während der lokale Build die Standard-OpenJDK-CA-Zertifikate verwendet.
-
Aktualisieren Sie --with-ucrt-dll-dir=<path>, um sicherzustellen, dass es dem Speicherort auf Ihrem lokalen Rechner entspricht:
--with-ucrt-dll-dir='C:/Program Files (x86)/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64' -
Ersetzen Sie -–with-boot-jdk=<path> durch den Pfad zu Ihrem lokal entpackten Boot JDK von oben.
Konfigurieren Sie aus dem Verzeichnis „C:/workspace/openjdk-build/workspace/build/openjdkbuild"
cd C:/workspace/openjdk-build/workspace/build/openjdkbuild bash ~/jdk21u/configure <edited configure args>
-
-
Temurin erstellen
make imagesDas erstellte Image ist im Verzeichnis /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk verfügbar
-
Offiziellen Eclipse Temurin-Release zur Verifizierung herunterladen
Das zu verifizierende Temurin JDK herunterladen und entpacken:
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 -
Adoptium temurin-build-Vergleichswerkzeug für reproduzierbare Builds unter Windows herunterladen und einrichten
Aufgrund der Temurin-„Signing Signatures" der Windows-.exe/.dll-Dateien ist eine Verarbeitung erforderlich, um die eindeutigen digitalen Signaturen mithilfe des Windows-Tools signtool.exe zu entfernen. Um diesen Prozess zu unterstützen und den Vergleich durchzuführen, stellt das Adoptium temurin-build-Tooling ein reproduzierbares Vergleichsskript bereit.
Führen Sie die folgenden Schritte aus, um das temurin-build-Vergleichsskript zu klonen, Ihre Umgebung einzurichten und es auszuführen:
-
cd temurin-build/tooling
-
BinRepl.java kompilieren:
javac src/java/temurin/tools/BinRepl.java -
„signtool.exe" suchen und zu PATH hinzufügen, z. B.:
export PATH=/cygdrive/c/progra~2/wi3cf2~1/10/bin/10.0.22621.0/x64:$PATH -
„dumpbin.exe" suchen und zu PATH hinzufügen, z. B.:
export PATH=/cygdrive/c/progra~2/micros~2/2022/BuildTools/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64:$PATH -
cd reproducible
-
CLASSPATH setzen, um die kompilierte BinRepl.class zu finden, z. B.:
export CLASSPATH=../src/java
-
Überprüfen, ob der lokale sichere Wiederaufbau mit der offiziellen Eclipse Temurin-Binärdatei identisch ist
Vergleichen Sie den lokalen Wiederaufbau mit dem offiziellen Eclipse Temurin JDK. Dieses Skript entpackt die jmod-Dateien und entfernt alle einzigartigen Temurin-Signaturen. Dieser Prozess dauert eine Weile (ungefähr 30 Minuten):
bash ./repro_compare.sh temurin ~/jdk-21.0.4+7 openjdk /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk CYGWINBei einer erfolgreichen Verifizierung sollte das Skript ein reproduzierbares Ergebnis von 100 % melden.
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 %

