Reproducible builds (Português)/Status (Portuguê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 |