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 . 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
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 |
Vários problemas- ordem, links, ... | nenhum | ninguém | Não | |
diff[link inativo 2021-11-15 ⓘ] | nenhum | ninguém | Não | |
linux-lts | mesmo que linux | nenhum | ninguém | Não |
mesmo que | nenhum | ninguém | Não | |
mesmo que | nenhum | ninguém | Não | |
Diferenças binárias para do shlibsign | nenhum | ninguém | Não | |
timestamp, uname codificados na compilação | nenhum | ninguém | Não |
[extra]
Pacote | Problema | Solução/Patch | Atribuído(a) | Resolvido |
---|---|---|---|---|
e | nenhum | ninguém | Não | |
accounts-qml-module | problema no tamanho do - FTBFS durante recompilação | nenhum | ninguém | Não |
muitas diferenças no | nenhum | ninguém | Não | |
ant | diferenças no arquivo .jar | nenhum | ninguém | Não |
vários carimbos de data/hora (javadoc) e diferença no arquivo .zip | nenhum | ninguém | Não | |
nenhum | ninguém | Não | ||
Adicionar arquivos ao array backup requer colocar em ordem, | nenhum | ninguém | Não | |
asymptote | Datas em aqruivos html e info. Diferenças em documento PDF (datas?) | nenhum | ninguém | Não |
Carimbo de data e hora em páginas man, com dono de arquivo diferentes e pequena alteração de binário no | precisa exportar MAN_PAGE_DATE=... e configure --enable-timeout=70 | ninguém | Não | |
uname e carimbos de data/hora em todo lugar | nenhum | ninguém | Não | |
3.0.2.3-3 reproduzível com ambos repro e makechrootpkg | problema de ferramental? | ninguém | Não | |
brltty | nenhum | ninguém | Não | |
muitos carimbos de data/hora texi2html | nenhum | ninguém | Não | |
diferença binária em usr/bin/fpcalc | nenhum | ninguém | Não | |
endereço ip; carimbos de data/hora em documentos ps, provavelmente muito mais | nenhum | ninguém | Não | |
Profile ID diverge em e diferenças binárias em | nenhum | ninguém | Não | |
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 |
muitos pdfs com diferenças | nenhum | ninguém | Não | |
uname, carimbo de data/hora, gzip, muitas outras diferenças binárias | nenhum | ninguém | Não | |
arquivo .jar | nenhum | ninguém | Não | |
efitools | tem diferenças binárias | nenhum | ninguém | Não |
muitas diferenças binárias | nenhum | ninguém | Não | |
diferenças em pdf, incluindo datas | nenhum | ninguém | Não | |
diferenças binárias em | nenhum | ninguém | Não | |
Pequena divergência na ordem em /usr/share/doc/ECM/ExtraCMakeModules.qch | nenhum | ninguém | Não | |
É o firefox ; PGO? | bug + patch | ninguém | Não | |
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 |
Nomes de usuário/grupo de arquivos em | nenhum | ninguém | Não | |
Diferenças de atributo de arquivos(?) em | nenhum | ninguém | Não | |
Diferenças binárias em | nenhum | ninguém | Não | |
uname em | nenhum | ninguém | Não | |
libibus | e têm diferenças | nenhum | ninguém | Não |
FTBFS sob repro. makerepropkg - muitas diferenças em todo lado... | nenhum | ninguém | Não | |
liblangtag | nenhum | ninguém | Não | |
carimbo de data/hora em e | nenhum | ninguém | Não | |
carimbo de data/hora em | nenhum | ninguém | Não | |
lirc | carimbo de data/hora em arquivos yaml, 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 |
Arquivos .pyc também testa alguns arquivos .pyc em falta | nenhum | ninguém | Não | |
Vários carimbos de data/hora em arquivos, em gzip, caminhos gerados aleatoriamente(?) em , divergências binárias... | nenhum | ninguém | Não | |
uname em , compilação com dependências fornecidas (miniupncpc que contém uname -r ) | nenhum | ninguém | Não | |
Carimbo de data/hora em | nenhum | ninguém | Não | |
zeitgeist | diff[link inativo 2021-11-15 ⓘ] Divergências estranhas de texto em | nenhum | ninguém | Não |