可重现构建/状态
Arch Linux 正在持续重建 core 和 extra 软件包,并有一个 状态页面。此页面包含不良软件包的状态以及需要修复的内容。
问题
一般
- 所有使用 pacman < 5.2 构建的软件包都需要重建,以解决文件顺序问题和 btrfs 大小错误。对于文件顺序问题,可以通过在镜像目录上运行以下单行命令找到受影响的 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 清单中包含其他不可重现的元数据,strip-nondeterminism 会删除其中一些,但不是全部),并且只有在没有对可重现构建的本地支持时才应作为最后的手段使用
strip-nondeterminism --timestamp "$SOURCE_DATE_EPOCH"
KDE Kdeveloper 项目文件
KDE 创建软件包应用程序模板 .tar.bz2 文件,当使用 repro 重现时,tar 文件和 userid 不同,这可能是 repro 中的一个错误。https://gist.githubusercontent.com/jelly/570313f56ee59be7674ad4cc002232e7/raw/b85536690c48b23ce97650e8db8f0ca18c2dbf1a/gistfile1.txt
使用 graphviz-2.44.0-2 构建 Doxygen 文档
graphviz 缺少对 libpng 的依赖,这使得 dot 中无法生成 PNG,因为 graphviz 是在 libpng 可用之前安装的,因此没有将其标记为 dlopen'd。所有依赖 doxygen 生成文档且具有以下差异的软件包都需要重建。
│ │ --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]
软件包 | 问题 | 解决方案/补丁 | 负责人 | 已解决 |
---|---|---|---|---|
linux | 签名模块 | 无 | 无 | 否 |
linux-docs | 许多问题 - 排序、链接... | 无 | 无 | 否 |
linux-headers | /usr/lib/modules/*/build/vmlinux 差异[死链接 2021-11-15 ⓘ] |
无 | 无 | 否 |
linux-lts | 与 linux 相同 | 无 | 无 | 否 |
linux-lts-docs | 与 linux-docs 相同 | 无 | 无 | 否 |
linux-lts-headers | 与 linux-headers 相同 | 无 | 无 | 否 |
[extra]
软件包 | 问题 | 解决方案/补丁 | 负责人 | 已解决 |
---|---|---|---|---|
amdvlk | usr/lib/amdvlk64.so 中存在许多差异 |
无 | 无 | 否 |
ant | .jar 文件差异 | 无 | 无 | 否 |
ant-doc | 许多时间戳 (javadoc) 和 .zip 文件差异 | 无 | 无 | 否 |
asymptote | html 和 info 中的日期。PDF 文档差异(日期?) | 无 | 无 | 否 |
autogen | man 页面中的时间戳,sr/share/autogen/libopts-42.1.17.tar.gz 具有不同的文件所有权,以及 usr/bin/autogen 中的一个小的二进制更改 |
需要导出 MAN_PAGE_DATE=... 并配置 --enable-timeout=70 |
无 | 否 |
bigloo | uname 和时间戳到处都是 |
无 | 无 | 否 |
breezy | 3.0.2.3-3 可以使用 repro 和 makechrootpkg 重现 | 工具问题? | 无 | 否 |
clisp | IP 地址;ps 文档中的时间戳,可能还有更多 | 无 | 无 | 否 |
deluge | .pyc 文件,.egg 文件 |
无 | 无 | 否 |
doxygen-docs | 许多具有差异的 pdf 文件 | 无 | 无 | 否 |
ecl | uname 、时间戳、gzip,许多其他二进制差异 |
无 | 无 | 否 |
eclipse-ecj | .jar 文件 |
无 | 无 | 否 |
efitools | /usr/share/efitools/efi/LockDown.efi 具有二进制差异 |
无 | 无 | 否 |
efl | 许多二进制差异 | 无 | 无 | 否 |
emacs | usr/bin/emacs 中的二进制差异 |
无 | 无 | 否 |
firefox | 这是 firefox;PGO? | 无 | 无 | 否 |
libbluray | usr/share/java/{libbluray{,-awt}-j2se-1.2.0.jar 中的文件属性(?)差异 |
无 | 无 | 否 |
libgtop | /usr/bin/libgtop_server2 中的 uname |
无 | 无 | 否 |
libmp4v2 | usr/include/mp4v2/project.h 和 usr/lib/libmp4v2.so.2.0.0 中的时间戳 |
无 | 无 | 否 |
lirc | yaml 文件中的时间戳,usr/share/lirc/lirc-0.10.1.tar.gz 有许多时间戳差异,repro 导致在 makerepropkg 中未发现的 poll() 检测问题 |
patch | 无 | 否 |
r | 文件中有很多时间戳,gzip 时间戳,在 /tmp/ 中随机(?)生成的路径,二进制差异... |
无 | 无 | 否 |
zabbix-agent2 | /usr/bin/zabbix_agent2 中的时间戳 |
无 | 无 | 否 |
[multilib]
软件包 | 问题 | 解决方案/补丁 | 负责人 | 已解决 |
---|---|---|---|---|
lib32-keyutils | 二进制文件包含构建日期 | 建议 | 无 | 否 |