Reproducible builds (Português)/Status (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Reproducible builds/Status. Data da última tradução: 2022-08-05. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

O Arch Linux está constantemente recompilando pacotes do core e extra e tem uma página de status [1]. Esta página contém um status de pacotes ruins e o que precisa ser corrigido.

Problemas

Geral

  • Uma recompilação é necessária para todos os pacotes compilados com pacman < 5.2 para resolver problemas de ordem de arquivo e um bug de tamanho btrfs. Para o problema de ordem de arquivo, os pacotes extra afetados podem ser encontrados executando o seguinte liner em um diretório espelho:
for i in /srv/ftp/extra/os/x86_64/*.pkg.tar.??; do
   bsdtar -tf $i | grep "^\." > pkg-order
   sort pkg-order > sort-order
   if ! diff pkg-order sort-order &>/dev/null; then
     echo $i;
   fi
   rm pkg-order sort-order
done

Ordem de arquivos para recompilação do FTBFS

accounts-qml-module-0.7-2-x86_64.pkg.tar.xz
archboot-2019.03-1-any.pkg.tar.xz
cmark-0.29.0-1-x86_64.pkg.tar.xz
gtk-sharp-2-2.12.45-2-x86_64.pkg.tar.xz
guile1.8-1.8.8-7-x86_64.pkg.tar.xz
java11-openjfx-11.0.3.u1-1-x86_64.pkg.tar.xz
java11-openjfx-doc-11.0.3.u1-1-x86_64.pkg.tar.xz
java11-openjfx-src-11.0.3.u1-1-x86_64.pkg.tar.xz
java8-openjfx-8.u202-3-x86_64.pkg.tar.xz
java8-openjfx-doc-8.u202-3-x86_64.pkg.tar.xz
java8-openjfx-src-8.u202-3-x86_64.pkg.tar.xz
java-openjfx-13.u14-1-x86_64.pkg.tar.xz
java-openjfx-doc-13.u14-1-x86_64.pkg.tar.xz
java-openjfx-src-13.u14-1-x86_64.pkg.tar.xz
jdk10-openjdk-10.0.2.u13-2-x86_64.pkg.tar.xz
jre10-openjdk-10.0.2.u13-2-x86_64.pkg.tar.xz
jre10-openjdk-headless-10.0.2.u13-2-x86_64.pkg.tar.xz
jsonrpc-glib-3.34.0-1-x86_64.pkg.tar.xz
libva-vdpau-driver-0.7.4-4-x86_64.pkg.tar.xz
liferea-1.12.7-1-x86_64.pkg.tar.xz
linux-atm-2.5.2-6-x86_64.pkg.tar.xz
mono-tools-4.2-2-x86_64.pkg.tar.xz
npapi-sdk-0.27.2-2-any.pkg.tar.xz
nss_ldap-265-7-x86_64.pkg.tar.xz
openjdk10-doc-10.0.2.u13-2-x86_64.pkg.tar.xz
openjdk10-src-10.0.2.u13-2-x86_64.pkg.tar.xz
pam_ldap-186-6-x86_64.pkg.tar.xz
portaudio-1:19.6.0-6-x86_64.pkg.tar.xz
qtav-1.13.0-1-x86_64.pkg.tar.xz

Pacotes com arquivos JAR

Os JARs incluem um carimbo de data/hora de modificação para cada arquivo, tornando-os irreproduzíveis. Dependendo do sistema de compilação, existem diferentes soluções disponíveis para isso.

Ant

Atualmente, ele não tem suporte para compilações reproduzíveis, veja a solicitação de recurso no upstream.

Gradle

Deve ter suporte a compilações reproduzíveis por padrão.

Maven

Tem suporte à propriedade project.build.outputTimestamp que pode ser configurada para um timestamp fixo. Versões recentes de plugins Maven respeitam essa propriedade para criar artefatos reproduzíveis. A propriedade deve ser definida no arquivo pom.xml do projeto, se o upstream ainda não fizer isso, você pode defini-la em tempo de compilação usando um comando como

mvn -Dproject.build. outputTimestamp="$SOURCE_DATE_EPOCH" clean package

. Pode ser necessário corrigir o pom.xml do projeto para atualizar os plugins para uma versão mais recente com suporte para compilações reproduzíveis, consulte o Guia do Maven para compilações reproduzíveis para as versões mínimas necessárias e mais informações, como opções de configuração adicionais necessárias.

Pacote de exemplo (incluindo um patch para uma atualização de versão do plugin Maven): junit-system-rules.

Comando jar do OpenJDK

O programa jar, embutido no OpenJDK, terá suporte a SOURCE_DATE_EPOCH começando com OpenJDK versão 15.

strip-nondeterminism

Como último recurso, strip-nondeterminism do Debian é capaz de remover metadados não reproduzíveis, como carimbos de data/hora de arquivos, de vários tipos de arquivos, incluindo JARs. Não é uma cura para tudo (por exemplo, sistemas de compilação podem incluir metadados não reproduzíveis adicionais no manifesto JAR, o não determinismo remove alguns, mas não todos) e deve ser usado apenas como último recurso se nenhum suporte nativo para compilações reproduzíveis for disponível:

strip-nondeterminism --timestamp "$SOURCE_DATE_EPOCH"

Pacote de exemplo: pdftk.

Arquivos do projeto KDE Kdeveloper

O KDE cria arquivos .tar.bz2 de modelo de Package App (aplicativo de pacote) cujos arquivos tar e userid são diferentes ao reproduzir com repro, o que pode ser um bug no repro. https://gist.githubusercontent.com/jelly/570313f56ee59be7674ad4cc002232e7/raw/b85536690c48b23ce97650e8db8f0ca18c2dbf1a/gistfile1.txt

O arquivo cmake que gera o problema.

Compilação de documentação doxygen com graphviz-2.44.0-2

O graphviz não tinha uma dependência do libpng, tornando a geração do PNG indisponível no dot, pois o graphviz era instalado antes do libpng estar disponível e, portanto, não o marcando como dlopen. Todos os pacotes que dependem do doxygen para documentação de geração e com o seguinte diff requerem uma recompilação.

│ │ --rw-r--r--   0 root         (0) root         (0)    20234 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser.html
│ │ --rw-r--r--   0 root         (0) root         (0)      265 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser__inherit__graph.map
│ │ --rw-r--r--   0 root         (0) root         (0)       32 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser__inherit__graph.md5
│ │ --rw-r--r--   0 root         (0) root         (0)     3136 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser__inherit__graph.png
│ │ +-rw-r--r--   0 root         (0) root         (0)    19961 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser.html
│ │ +-rw-r--r--   0 root         (0) root         (0)      598 2020-05-16 12:32:36.000000 usr/share/doc/grantlee/classGrantlee_1_1Parser__inherit__graph.dot

[core]

Pacote Problema Solução/Patch Atribuído(a) Resolvido
dnssec-anchors /etc/trusted-key.key diverge nenhum ninguém Não
gcc-ada Tempos de arquivos dentro de alguns arquivos .ads nenhum ninguém Não
linux Módulos assinados nenhum ninguém Não
linux-docs Vários problemas- ordem, links, ... nenhum ninguém Não
linux-headers /usr/lib/modules/*/build/vmlinux diff[link inativo 2021-11-15 ⓘ] nenhum ninguém Não
linux-lts mesmo que linux nenhum ninguém Não
linux-lts-docs mesmo que linux-docs nenhum ninguém Não
linux-lts-headers mesmo que linux-headers nenhum ninguém Não
nss Diferenças binárias para /usr/lib/lib{freebl3,freeblpriv3,softokn3}.chk do shlibsign nenhum ninguém Não
perl timestamp, uname codificados na compilação nenhum ninguém Não

[extra]

Pacote Problema Solução/Patch Atribuído(a) Resolvido
abiword usr/lib/python2.7/site-packages/gi/overrides/Abi.pyc e .pyo nenhum ninguém Não
accounts-qml-module problema no tamanho do .BUILDINFO - FTBFS durante recompilação nenhum ninguém Não
amdvlk muitas diferenças no usr/lib/amdvlk64.so nenhum ninguém Não
ant diferenças no arquivo .jar nenhum ninguém Não
ant-doc vários carimbos de data/hora (javadoc) e diferença no arquivo .zip nenhum ninguém Não
antlr2AUR usr/share/java/antlr2.jar nenhum ninguém Não
apparmor Adicionar arquivos ao array backup requer colocar em ordem, usr/lib/python3.8/site-packages/LibAppArmor/__pycache__/LibAppArmor.cpython-38.pyc nenhum ninguém Não
asymptote Datas em aqruivos html e info. Diferenças em documento PDF (datas?) nenhum ninguém Não
autogen Carimbo de data e hora em páginas man, sr/share/autogen/libopts-42.1.17.tar.gz com dono de arquivo diferentes e pequena alteração de binário no usr/bin/autogen precisa exportar MAN_PAGE_DATE=... e configure --enable-timeout=70 ninguém Não
bigloo uname e carimbos de data/hora em todo lugar nenhum ninguém Não
breezy 3.0.2.3-3 reproduzível com ambos repro e makechrootpkg problema de ferramental? ninguém Não
brltty usr/share/java/brlapi.jar nenhum ninguém Não
check-docs muitos carimbos de data/hora texi2html nenhum ninguém Não
chromaprint diferença binária em usr/bin/fpcalc nenhum ninguém Não
clisp endereço ip; carimbos de data/hora em documentos ps, provavelmente muito mais nenhum ninguém Não
colord Profile ID diverge em usr/share/color/icc/colord/{Crayons,x11-colors}.icc e diferenças binárias em usr/lib/colord nenhum ninguém Não
conky carimbo de data/hora (de toluapp) e uname (no mínimo) nenhum ninguém Não
deluge arquivo .pyc, arquivos .egg nenhum ninguém Não
doxygen-docs muitos pdfs com diferenças nenhum ninguém Não
ecl uname, carimbo de data/hora, gzip, muitas outras diferenças binárias nenhum ninguém Não
eclipse-ecj arquivo .jar nenhum ninguém Não
efitools /usr/share/efitools/efi/LockDown.efi tem diferenças binárias nenhum ninguém Não
efl muitas diferenças binárias nenhum ninguém Não
efl-docs diferenças em pdf, incluindo datas nenhum ninguém Não
emacs diferenças binárias em usr/bin/emacs nenhum ninguém Não
extra-cmake-modules Pequena divergência na ordem em /usr/share/doc/ECM/ExtraCMakeModules.qch nenhum ninguém Não
firefox É o firefox ; PGO? bug + patch[link inativo 2023-05-20 ⓘ] ninguém Não
fontconfig FTBFS com repro. Carimbo de data/hora dentro de páginas man nenhum ninguém Não
fontforge Diferenças binárias no fontforge e algumas bibliotecas nenhum ninguém Não
libakonadi Nomes de usuário/grupo de arquivos em usr/share/kdevappwizard/templates/akonadi{resource,serializer}.tar.bz2 nenhum ninguém Não
libbluray Diferenças de atributo de arquivos(?) em usr/share/java/{libbluray{,-awt}-j2se-1.2.0.jar nenhum ninguém Não
libgee Diferenças binárias em usr/lib/libgee-0.8.so.2.6.1 nenhum ninguém Não
libgtop uname em /usr/bin/libgtop_server2 nenhum ninguém Não
libibus /usr/lib/python2.7/site-packages/gi/overrides/IBus.pyc e .pyo têm diferenças nenhum ninguém Não
libjpeg-turbo FTBFS sob repro. makerepropkg - muitas diferenças em todo lado... nenhum ninguém Não
liblangtag /usr/share/gir-1.0/LangTag-0.6.gir nenhum ninguém Não
libmp4v2 carimbo de data/hora em usr/include/mp4v2/project.h e usr/lib/libmp4v2.so.2.0.0 nenhum ninguém Não
libquvi carimbo de data/hora em libquvi-0.9-0.9.4.so nenhum ninguém Não
lirc carimbo de data/hora em arquivos yaml, usr/share/lirc/lirc-0.10.1.tar.gz tem várias divergências por carimbo de data/hora, repro causa problema de detecção de poll() não encontrado no makerepropkg patch ninguém Não
meson Arquivos .pyc também testa alguns arquivos .pyc em falta nenhum ninguém Não
r Vários carimbos de data/hora em arquivos, em gzip, caminhos gerados aleatoriamente(?) em /tmp/, divergências binárias... nenhum ninguém Não
transmission-gtk uname em usr/bin/transmission-gtk, compilação com dependências fornecidas (miniupncpc que contém uname -r) nenhum ninguém Não
zabbix-agent2 Carimbo de data/hora em /usr/bin/zabbix_agent2 nenhum ninguém Não
zeitgeist diff[link inativo 2021-11-15 ⓘ] Divergências estranhas de texto em /usr/lib/libzeitgeist-2.0.so.0.0.0 nenhum ninguém Não