Temurin Reproduzierbarer Verifizierungs-Build auf Linux 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 Linux-x64-Plattform. Der Prozess wird auf sichere Weise durchgeführt, wobei ausschließlich die Upstream-Quellen und sicher verifizierte 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

  • Erstellen des gcc DevKit aus dem „Quellcode", identisch zu dem von Eclipse Adoptium verwendeten

  • 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

Reproduzierbares Verifizierungs-Build-Verfahren für Linux x64

  1. Build-Umgebung

    Um Eclipse Temurin auf Linux x64 identisch neu zu erstellen, ist ein geeignetes Centos oder RHEL der Version 7 oder 8 erforderlich.

  2. EPEL-Tools installieren

    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. Build-Werkzeuge installieren

    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 Version >= 4?

    GNU make muss mindestens Version 4 sein, um das gcc DevKit zu erstellen.

    GNU make-Version prüfen

    make --version

    Falls die Version unter 4 liegt, GNU make 4.3 wie folgt herunterladen und erstellen:

    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. Zeitzone auf UTC setzen

    Für identische Builds muss die Build-Zeitzone UTC sein, um eine exakt gleiche binäre Build-Ausgabe sicherzustellen

    timedatectl set-timezone UTC
  6. Adoptium DevKit Toolchain Make-Skriptdateien herunterladen

    Um ein gcc DevKit Toolchain sicher und identisch zu erstellen, laden Sie die folgenden Skripte sicher aus dem Eclipse Adoptium-Repository herunter. Diese Skripte und Patches ermöglichen es dem DevKit-Make-Prozess, mit einem Centos-Sysroot zu erstellen, und ermöglichen außerdem das GPG-verifizierte Herunterladen der Centos-RPMs für zusätzliche Integritätsprüfung.

    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 Toolchain aus dem Quellcode erstellen

    bash ./make_devkit.sh jdk21u x86_64 Centos 7.9.2009

    Der erstellte „DevKit-Pfad" befindet sich im Ordner jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu

    LD_LIBRARY_PATH setzen, um die neu erstellten DevKit-Bibliotheken zu finden

    export LD_LIBRARY_PATH=<DevKit path>/lib64:<DevKit path>/lib
  8. SBOM des zu verifizierenden Eclipse Temurin-Builds herunterladen

    Zum Beispiel, um die SBOM und SBOM-Metadaten für Release jdk-21.0.4+7 herunterzuladen

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

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

    Stellen Sie sicher, dass „Good signature from Adoptium GPG Key (DEB/RPM Signing Key)" angezeigt wird

    In einen geeigneten Ordner entpacken

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

    Zur PATH-Umgebungsvariablen hinzufügen

    export PATH=<bootjdk>/bin:$PATH
  11. Erforderlichen Upstream-OpenJDK-Quellcode klonen

    Ersetzen Sie jdk21u durch den zu erstellenden Upstream-Release

    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. Lokales Build-Verzeichnis erstellen

    mkdir openjdk_build
  13. 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. Ersetzen Sie -–with-devkit=<path> durch den Pfad zum lokal erstellten gcc DevKit „<path>/jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu".

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

    4. Ersetzen Sie -–with-boot-jdk=<path> durch den Pfad zu Ihrem lokal entpackten Boot JDK von oben.

      Konfigurieren Sie aus dem Verzeichnis „openjdk_build"

      cd openjdk_build
      bash ../jdk21u_bld/configure <edited configure args>
  14. Temurin erstellen

    make images
  15. Erstellte Image-Ausgabe entfernen, die für den reproduzierbaren Build-Vergleich nicht relevant ist

    1. „cacerts": Temurin wird mit seiner eigenen Liste von Mozilla CA-Zertifikaten erstellt (muss aus lib/security und java.base/lib/security entfernt werden)

    2. „release": Die „release"-Textbeschreibungsdatei unterscheidet sich aufgrund der unterschiedlichen Build-OS-Umgebung und der zusätzlichen Temurin-Metadaten

    3. „demo": Temurin enthält die „demo"-Beispieldateien nicht

    4. „debuginfo": Das Temurin JDK-Tarball enthält keine 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. Offiziellen Eclipse Temurin-Release zur „Verifizierung" herunterladen

    Das zu verifizierende Temurin JDK herunterladen und entpacken:

    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. Dieselben nicht relevanten Dateien entfernen

    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. Überprüfen, ob der lokale sichere Wiederaufbau mit der offiziellen Eclipse Temurin-Binärdatei identisch ist

    Die beiden Images vergleichen

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

    Bei einer erfolgreichen Verifizierung sollte es keine Unterschiede geben.

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