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-aarch64-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 aarch64
-
Build-Umgebung
Um Eclipse Temurin auf Linux aarch64 identisch neu zu erstellen, ist ein geeignetes Centos oder RHEL der Version 7 oder 8 erforderlich.
-
EPEL-Tools installieren
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 -
Build-Werkzeuge installieren
yum install -y tar git patch gcc gcc-c++ wget bison texinfo lbzip2 zip unzip glibc glibc-devel libgcc yum install -y autoconf systemtap systemtap-sdt-devel -
GNU make Version >= 4?
GNU make muss mindestens Version 4 sein, um das gcc DevKit zu erstellen.
GNU make-Version prüfen
make --versionFalls 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 -
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 -
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 -
gcc DevKit Toolchain aus dem Quellcode erstellen
bash ./make_devkit.sh jdk21u aarch64 Centos 7.6.1810Der erstellte „DevKit-Pfad" befindet sich im Ordner jdk21u/build/devkit/result/aarch64-linux-gnu-to-aarch64-linux-gnu
LD_LIBRARY_PATH setzen, um die neu erstellten DevKit-Bibliotheken zu finden
export LD_LIBRARY_PATH=<DevKit path>/lib64:<DevKit path>/lib -
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_aarch64_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_aarch64_linux_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 tar.gz curl -L -O https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.2%2B9/OpenJDK20U-jdk_aarch64_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_aarch64_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_aarch64_linux_hotspot_20.0.2_9.tar.gz.sig OpenJDK20U-jdk_aarch64_linux_hotspot_20.0.2_9.tar.gzStellen Sie sicher, dass „Good signature from Adoptium GPG Key (DEB/RPM Signing Key)" angezeigt wird
In einen geeigneten Ordner entpacken
tar -xf OpenJDK20U-jdk_aarch64_linux_hotspot_20.0.2_9.tar.gzZur PATH-Umgebungsvariablen hinzufügen
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 jdk21u_bld # Checkout required tag to build (cd jdk21u_bld && git checkout <OpenJDK tag to build>) -
Lokales Build-Verzeichnis erstellen
mkdir openjdk_build -
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" -
Ersetzen Sie -–with-devkit=<path> durch den Pfad zum lokal erstellten gcc DevKit „<path>/jdk21u/build/devkit/result/aarch64-linux-gnu-to-aarch64-linux-gnu".
-
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.
-
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>
-
-
Temurin erstellen
make images -
Erstellte Image-Ausgabe entfernen, die für den reproduzierbaren Build-Vergleich nicht relevant ist
-
„cacerts": Temurin wird mit seiner eigenen Liste von Mozilla CA-Zertifikaten erstellt (muss aus lib/security und java.base/lib/security entfernt werden)
-
„release": Die „release"-Textbeschreibungsdatei unterscheidet sich aufgrund der unterschiedlichen Build-OS-Umgebung und der zusätzlichen Temurin-Metadaten
-
„demo": Temurin enthält die „demo"-Beispieldateien nicht
-
„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 ..
-
-
Offiziellen Eclipse Temurin-Release zur „Verifizierung" herunterladen
Das zu verifizierende Temurin JDK herunterladen und entpacken:
curl -L -o temurin-linux-aarch64-jdk-21.0.4+7.tar.gz https://api.adoptium.net/v3/binary/version/jdk-21.0.4+7/linux/aarch64/jdk/hotspot/normal/adoptium tar -xf temurin-linux-aarch64-jdk-21.0.4+7.tar.gz -
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 -
Ü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+7Bei einer erfolgreichen Verifizierung sollte es keine Unterschiede geben.

