As instruções a seguir detalham o processo de reconstrução idêntica a partir do "código-fonte" em um ambiente de build seguro, um build reproduzível para um dado lançamento do Eclipse Temurin na plataforma Linux x64. O processo é realizado de forma segura, usando apenas as fontes upstream e ferramentas de build verificadas de forma segura, de modo a fornecer um mecanismo para verificar de forma segura o binário do lançamento dado do Eclipse Temurin. Essa verificação ajuda então a determinar a segurança das cadeias de fornecimento usadas para construir os binários de lançamento oficial do Eclipse Temurin.
O procedimento consiste nas seguintes etapas:
-
Configuração do ambiente de build
-
Construção do gcc DevKit a partir do "código-fonte" idêntico ao usado pelo Eclipse Adoptium
-
Determinação dos argumentos de configuração make do OpenJDK correspondentes às opções do Eclipse Temurin
-
Construção do Eclipse Temurin JDK local
-
Comparação da reconstrução local segura do Eclipse Temurin com o binário oficial do Eclipse Temurin
Procedimento de build de verificação reproduzível no Linux x64
-
Ambiente de Build
Para reconstruir identicamente o Eclipse Temurin no Linux x64, é necessário um Centos ou RHEL adequado, de versão 7 ou 8.
-
Instalar Ferramentas 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 -
Instalar Ferramentas de Build
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 -
Versão do GNU make >= 4?
O GNU make deve ser pelo menos versão 4 para construir o gcc DevKit.
Verifique a versão do GNU make
make --versionSe não for pelo menos versão 4, baixe e construa o GNU make 4.3 da seguinte forma:
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 -
Definir Fuso Horário para UTC
Para builds idênticos, o fuso horário do build deve ser UTC para garantir saída de build binária exata
timedatectl set-timezone UTC -
Baixar Arquivos de Script make do Adoptium DevKit Toolchain
Para construir de forma segura e idêntica um gcc DevKit Toolchain, baixe de forma segura os seguintes scripts do repositório Eclipse Adoptium. Esses scripts e patches habilitam o processo de make do DevKit para construir com um sysroot Centos e também permitem o download verificado por GPG dos RPMs Centos para verificação adicional de integridade.
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 -
Construir o gcc DevKit Toolchain a partir do código-fonte
bash ./make_devkit.sh jdk21u x86_64 Centos 7.9.2009O "caminho do DevKit" construído estará na pasta jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu
Defina LD_LIBRARY_PATH para localizar as bibliotecas do DevKit recém-construídas
export LD_LIBRARY_PATH=<DevKit path>/lib64:<DevKit path>/lib -
Baixar o SBOM do build do Eclipse Temurin a ser verificado
Por exemplo, para baixar o SBOM e os metadados do SBOM para o lançamento jdk-21.0.4+7
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 -
Determinar a tag do código-fonte OpenJDK upstream a ser construída
Abra o arquivo SBOM json e determine o "SCM Ref" a partir do qual o lançamento foi construído
{ "name" : "SCM Ref", "value" : "jdk-21.0.4+7_adopt" },A tag OpenJDK upstream é esse valor sem o "_adopt", por exemplo "jdk-21.0.4+7"
-
Baixar um Boot JDK adequado
Para construir o Temurin você precisa de um Boot JDK adequado, abra o arquivo SBOM json e determine a versão usada para construir o lançamento
{ "name" : "BOOTJDK", "version" : "20.0.2+9" },Baixe e verifique de forma segura a versão necessária em 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.gzCertifique-se de "Good signature from Adoptium GPG Key (DEB/RPM Signing Key)"
Desempacote em uma pasta adequada
tar -xf OpenJDK20U-jdk_x64_linux_hotspot_20.0.2_9.tar.gzAdicione à variável de ambiente PATH
export PATH=<bootjdk>/bin:$PATH -
Clonar o código-fonte OpenJDK upstream necessário
Substitua jdk21u pelo lançamento upstream que está sendo construído
git clone https://github.com/openjdk/jdk21u.git jdk21u_bld # Checkout required tag to build (cd jdk21u_bld && git checkout <OpenJDK tag to build>) -
Criar um diretório de build local
mkdir openjdk_build -
Configurar o build
Determine e edite os "argumentos de configuração" para corresponder ao seu ambiente local
-
Determine os argumentos de configuração para este build
Use o seguinte grep para encontrar os argumentos de configuração necessários no SBOM-metadata.json
grep "using configure arguments" <SBOM-metadata.json> | sed -n -e "s/^.*using configure arguments '\(.*\)'\..*/\1/p" -
Substitua -–with-devkit=<path>, pelo caminho para o gcc DevKit local construído "<path>/jdk21u/build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu".
-
Remova -–with-cacerts-src=<path>, pois o Temurin é construído com certificados CA Mozilla, enquanto o build local usará os certificados CA padrão do OpenJDK.
-
Substitua -–with-boot-jdk=<path>, pelo caminho para o boot jdk local desempacotado acima.
Configure a partir do diretório "openjdk_build"
cd openjdk_build bash ../jdk21u_bld/configure <edited configure args>
-
-
Construir o Temurin
make images -
Remover a saída de imagem construída que não é relevante para a comparação de build reproduzível
-
"cacerts" : O Temurin é construído com sua própria lista de certificados CA Mozilla (precisa ser removido de lib/security e java.base/lib/security)
-
"release" : O arquivo de descrição de texto "release" difere devido ao ambiente de SO de build diferente e metadados adicionais do Temurin
-
"demo" : O Temurin não distribui os arquivos de exemplo "demo"
-
"debuginfo" : O tarball do JDK Temurin não contém 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 ..
-
-
Baixar o lançamento oficial do Eclipse Temurin para "Verificação"
Baixe e desempacote o JDK Temurin a ser verificado:
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 -
Remover os mesmos arquivos não relevantes
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 -
Verificar se a reconstrução local segura é idêntica ao binário oficial do Eclipse Temurin
Compare as duas imagens
diff -r openjdk_build/images/jdk jdk-21.0.4+7Para uma verificação bem-sucedida não deve haver diferenças.

