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 Windows x64. O processo é realizado de forma segura, usando apenas as fontes upstream e as ferramentas de build oficiais do Microsoft Visual Studio, 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
-
Instalação da versão necessária do Microsoft Visual Studio Builds Tools edition para o compilador C/C++
-
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, usando o script de comparação de build reproduzível do Adoptium temurin-build que ajusta para comparação com executáveis nativos "assinados"
Procedimento de build de verificação reproduzível no Windows x64
-
Ambiente de Build
Para reconstruir identicamente o Eclipse Temurin no Windows x64, é necessário um ambiente de build Windows adequado com as mesmas Microsoft Visual Studio Build Tools necessárias, e é preciso remover quaisquer versões conflitantes anteriores.
Certifique-se de que todos os componentes anteriores do Microsoft Visual Studio estejam desinstalados usando Configurações do Windows→"Adicionar ou remover programas", incluindo:
-
Visual Studio <Edition> 20xx …
-
Microsoft C++ <year..year> Redistributables
-
Microsoft Visual Studio Installer
-
Windows Software Development Kit
-
Windows SDK Addon
-
-
Certifique-se de que o fuso horário do sistema Windows seja UTC para garantir um build idêntico
Defina o "Fuso horário" do Windows como UTC, verificando em Configurações do Windows→"Hora e Idioma" → "Data e hora" → valor de "Fuso horário".
-
Reinicie a máquina Windows após desinstalar qualquer programa ou alterar o Fuso Horário.
-
Instalar a versão necessária do Microsoft Visual Studio
Instale o Microsoft Visual Studio VS2022 edição "Build Tools" versão 17.7.3 que contém a versão 19.37.32822 do compilador C/C++:
-
Selecione "Workloads" - "Desktop development with C++"
-
"Install"
-
Instalar dependências de build necessárias:
Instale o Cygwin com as dependências necessárias para construir o OpenJDK:
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"Assumindo que setup-x86_64.exe seja seguro e que a verificação GPG reporte "Good signature", então instale o Cygwin:
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 -
Inicie uma janela de terminal Cygwin para realizar o build a partir dela
Clique duas vezes no ícone "Cygwin Terminal" na área de trabalho para abrir um novo terminal Cygwin executando o bash shell
-
Determinar a configuração de build necessária para reproduzir o lançamento alvo do Eclipse Temurin
Para a versão do lançamento do Eclipse Temurin necessária, baixe o SBOM e os metadados do SBOM do repositório oficial de binários do Adoptium, por exemplo, para 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 -
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 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.zipCertifique-se de "Good signature from Adoptium GPG Key (DEB/RPM Signing Key)"
Descompacte em uma pasta adequada
unzip OpenJDK20U-jdk_x64_windows_hotspot_20.0.2_9.zipAdicione ao ambiente PATH, para que as ferramentas java e javac estejam disponíveis para os scripts usados posteriormente nestas instruções.
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 # Checkout required tag to build (cd jdk21u && git checkout <OpenJDK tag to build>) -
Criar um diretório de build local específico
Nota: Isso é necessário APENAS para jdk-21.0.4+7 devido a um problema de build reproduzível (https://github.com/adoptium/temurin-build/issues/3790). Para versões posteriores isso é desnecessário.
Crie o seguinte diretório de build local exato para o build; o caminho deve corresponder a este para que o build seja reproduzível de forma idêntica.
mkdir -p C:/workspace/openjdk-build/workspace/build/openjdkbuild -
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" -
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.
-
Atualize --with-ucrt-dll-dir=<path>, para garantir que corresponda à localização na sua máquina local, especifique:
--with-ucrt-dll-dir='C:/Program Files (x86)/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64' -
Substitua -–with-boot-jdk=<path>, pelo caminho para o boot jdk local descompactado acima.
Configure a partir do diretório "C:/workspace/openjdk-build/workspace/build/openjdkbuild"
cd C:/workspace/openjdk-build/workspace/build/openjdkbuild bash ~/jdk21u/configure <edited configure args>
-
-
Construir o Temurin
make imagesA imagem construída estará disponível no diretório: /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk
-
Baixar o lançamento oficial do Eclipse Temurin a ser verificado
Baixe e descompacte o JDK Temurin a ser verificado:
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 -
Baixar e configurar as ferramentas de comparação de build reproduzível do Adoptium temurin-build para Windows
Devido às "assinaturas de assinatura" do Temurin nos .exe/dll’s do Windows, é necessário um processamento para remover as assinaturas digitais únicas usando a ferramenta signtool.exe do Windows. Para auxiliar nesse processo e realizar a comparação, as ferramentas temurin-build do Adoptium fornecem um script de comparação reproduzível.
Execute as seguintes etapas para clonar e configurar seu ambiente para executar o script de comparação reproduzível do temurin-build:
-
cd temurin-build/tooling
-
Compile BinRepl.java:
javac src/java/temurin/tools/BinRepl.java -
Encontre "signtool.exe" e adicione ao PATH, por exemplo:
export PATH=/cygdrive/c/progra~2/wi3cf2~1/10/bin/10.0.22621.0/x64:$PATH -
Encontre "dumpbin.exe" e adicione ao PATH, por exemplo:
export PATH=/cygdrive/c/progra~2/micros~2/2022/BuildTools/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64:$PATH -
cd reproducible
-
Defina CLASSPATH para encontrar o BinRepl.class compilado, por exemplo:
export CLASSPATH=../src/java
-
Verificar se a reconstrução local segura é idêntica ao binário oficial do Eclipse Temurin
Compare a reconstrução local com o JDK oficial do Eclipse Temurin. Este script envolve desempacotar os jmods e remover todas as "Assinaturas" únicas de assinatura do Temurin; este processo leva um tempo para ser concluído (aproximadamente 30 minutos):
bash ./repro_compare.sh temurin ~/jdk-21.0.4+7 openjdk /cygdrive/c/workspace/openjdk-build/workspace/build/openjdkbuild/images/jdk CYGWINPara uma verificação bem-sucedida, o script deve reportar um resultado reproduzível de 100%.
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 %

