Temurin Reproduzierbarer Verifizierungs-Build auf Windows x64

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

  1. 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

  2. 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.

  3. Starten Sie den Windows-Rechner neu, nachdem Sie Programme deinstalliert oder die Zeitzone geändert haben.

  4. 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:

  5. 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
  6. 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

  7. 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
  8. 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"

  9. 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.zip

    Stellen 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.zip

    Zur 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
  10. 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>)
  11. 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
  12. Build konfigurieren

    Bestimmen und bearbeiten Sie die „configure args", um Ihrer lokalen Umgebung zu entsprechen

    1. 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"
    2. 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.

    3. 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'
    4. 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>
  13. Temurin erstellen

    make images

    Das erstellte Image ist im Verzeichnis /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk verfügbar

  14. 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
  15. 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:

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

    • 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
  16. Ü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 CYGWIN

    Bei 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 %
edit icon

Hilf uns, diese Dokumentation zu verbessern!

Alle Adoptium-Dokumentationen sind Open Source. Etwas falsch oder unklar?

Dokumentations-Autoren
andrew-m-leonardgdams
Join our Slack channel to discuss and reach out to maintainers.Join Slack