跳转至内容

Reproducible builds/Status

来自 ArchWiki

Arch Linux 正在不断地重建 coreextra 软件包,并有一个 状态页面。该页面包含不良软件包的状态以及需要修复的内容。

问题

常规

  • 所有使用 pacman < 5.2 构建的软件包都需要重建,以解决文件顺序问题和 btrfs 大小 bug。对于文件顺序问题,可以通过在镜像目录上运行以下单行命令来找到受影响的 extra 软件包。
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

文件顺序重建 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

包含 JAR 文件的软件包

JAR 文件包含每个文件的修改时间戳,这使得它们不可重现。根据构建系统,有不同的解决方案可用。

Ant

目前没有对可重现构建的支持,请参阅 上游功能请求

Gradle

开箱即用,应支持可重现构建。

Maven

支持 project.build.outputTimestamp 属性,该属性可以设置为一个固定的时间戳。最新版本的 Maven 插件会尊重此属性来创建可重现的工件。该属性应在项目的 pom.xml 文件中设置,如果上游尚未设置,您可以使用类似以下命令的命令在编译时定义它:

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

可能需要修补项目的 pom.xml 以将插件更新到支持可重现构建的较新版本,请参阅 Maven 可重现构建指南以了解最低要求版本以及更多信息,例如其他必要的配置选项。

示例软件包(包括更新 Maven 插件版本的补丁):junit-system-rules

OpenJDK jar 命令

内置的 OpenJDK jar 程序将 从 OpenJDK 15 版本开始支持 SOURCE_DATE_EPOCH

strip-nondeterminism

作为最后的手段,Debian 的 strip-nondeterminism 能够从各种文件类型(包括 JAR)中剥离不可重现的元数据,例如文件时间戳。它并非万能的(例如,构建系统可能在 JAR manifest 中包含额外的不可重现元数据,strip-nondeterminism 会移除其中一些,但不是全部),只有在没有原生支持可重现构建的情况下才应作为最后的手段使用。

strip-nondeterminism --timestamp "$SOURCE_DATE_EPOCH"

KDE Kdeveloper 项目文件

KDE 创建的 Package App 模板 .tar.bz2 文件,当使用 repro 重现时,tar 文件和用户 ID 会不同,这可能是 repro 的一个 bug。https://gist.githubusercontent.com/jelly/570313f56ee59be7674ad4cc002232e7/raw/b85536690c48b23ce97650e8db8f0ca18c2dbf1a/gistfile1.txt

导致问题的 cmake 文件.

Doxygen 文档构建与 graphviz-2.44.0-2

graphviz 缺少 libpng 的依赖,导致 dot 中的 PNG 生成不可用,因为 graphviz 在 libpng 可用之前安装,因此未将其标记为需要 dlopen。所有依赖 doxygen 进行文档生成的软件包,以及以下 diff,都需要重建。

│ │ --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]

软件包 (Package) 问题 解决方案/补丁 负责人 已解决
linux 已签名模块 none none
linux-docs 大量问题 - 顺序、链接、... none none
linux-headers /usr/lib/modules/*/build/vmlinux diff[死链 2021-11-15—HTTP 404] none none
linux-lts linux none none
linux-lts-docs linux-docs none none
linux-lts-headers linux-headers none none

[extra]

软件包 (Package) 问题 解决方案/补丁 负责人 已解决
ant .jar 文件差异 none none
ant-doc 大量时间戳(javadoc),以及 .zip 文件差异 none none
asymptote HTML 和 Info 中的日期。PDF 文档差异(日期?) none none
autogen man 页中的时间戳,sr/share/autogen/libopts-42.1.17.tar.gz 中的文件所有权不同,以及 usr/bin/autogen 中的一个小的二进制差异 需要 export MAN_PAGE_DATE=... 和 configure --enable-timeout=70 none
bigloo uname 和到处都是的时间戳 none none
breezy 3.0.2.3-3 使用 repro 和 makechrootpkg 均可重现 工具问题? none
clisp IP 地址;ps 文档中的时间戳,可能还有更多 none none
deluge .pyc 文件,.egg 文件 none none
doxygen-docs 大量 PDF 文件存在差异 none none
ecl uname、时间戳、gzip、大量其他二进制差异 none none
eclipse-ecj .jar 文件 none none
efitools /usr/share/efitools/efi/LockDown.efi 存在二进制差异 none none
efl 大量二进制差异 none none
emacs usr/bin/emacs 中的二进制差异 none none
firefox 是 firefox;PGO? none none
libbluray usr/share/java/{libbluray{,-awt}-j2se-1.2.0.jar 中的文件属性(?)差异 none none
libgtop /usr/bin/libgtop_server2 中的 uname none none
libmp4v2 usr/include/mp4v2/project.h & usr/lib/libmp4v2.so.2.0.0 中的时间戳 none none
lirc YAML 文件中的时间戳,usr/share/lirc/lirc-0.10.1.tar.gz 中有大量时间戳差异,repro 导致 poll() 检测问题,makerepropkg 中未发现 patch none
r 文件中大量时间戳,gzip 时间戳,随机(?)生成的 /tmp/ 路径,二进制差异... none none
zabbix-agent2 /usr/bin/zabbix_agent2 中的时间戳 none none

[multilib]

软件包 (Package) 问题 解决方案/补丁 负责人 已解决
lib32-keyutils 二进制文件包含构建日期 建议 none

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.