Arch Linux 现在拥有位对位可复现的 Docker 镜像

发布: (2026年4月23日 GMT+8 09:59)
3 分钟阅读

Source: Hacker News

作为对几个月前我们 WSL 镜像达到的类似里程碑的后续,Arch Linux 现在拥有一个 逐位可复现的 Docker 镜像

该镜像在 Docker Hub 上以全新的 repro 标签 分发: 。

可复现的 Docker 镜像

为了保证可复现性,镜像中已去除 pacman 密钥环。因此,pacman 无法直接使用
在安装或更新软件包之前,必须在容器内部(重新)生成密钥环:

pacman-key --init && pacman-key --populate archlinux

你可以在首次启动时交互式运行此命令,或在将该镜像用作基础镜像时将其写入 RUN 语句。

Distrobox 用法

distrobox create -n arch-repro \
  -i docker.io/archlinux/archlinux:repro \
  --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux"

可复现性验证

  • 可以通过以下方式检查不同构建之间的摘要是否相同:

    podman inspect --format '{{.Digest}}' 
  • diffoci 工具可以比较构建之间的字节级差异: 。

关于如何复现该 Docker 镜像的文档请参见此处

构建镜像

基础根文件系统的确定性构建复用了与 Arch Linux WSL 镜像相同的流程 ()。

Docker 特有的调整

  • Source date epoch – 设置 SOURCE_DATE_EPOCH 并将其传播到 Dockerfile 中的 org.opencontainers.image.created 标签。

  • 移除 ldconfig 辅助缓存 – 该文件会引入非确定性:

    TYPE    NAME                            INPUT-0                                                             INPUT-1
    File    var/cache/ldconfig/aux-cache    656b08db599dbbd9eb0ec663172392023285ed6598f74a55326a3d95cdd5f5d0    ffee92304701425a85c2aff3ade5668e64bf0cc381cfe0a5cd3c0f4935114195
  • 规范化时间戳docker build / podman build 时使用 --source-date-epoch=$SOURCE_DATE_EPOCH--rewrite-timestamp 选项:

    TYPE    NAME                 INPUT-0                          INPUT-1
    File    etc/                 2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    etc/ld.so.cache      2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    etc/os-release       2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    sys/                 2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    var/cache/           2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    var/cache/ldconfig/  2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    proc/                2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC
    File    dev/                 2026-03-31 07:57:46 +0000 UTC    2026-03-31 07:59:21 +0000 UTC

你可以在 archlinux‑docker 仓库中查看完整的变更集: 。

致谢与后续计划

感谢 Mark 在此工作中的帮助!

此里程碑推动了 Arch Linux 更广泛的“可复现构建”倡议。展望未来,我正在考虑为该 Docker 镜像(以及WSL 镜像)设置自动重建器,以定期重建、验证可复现性并公开发布构建日志。 🤗

0 浏览
Back to Blog

相关文章

阅读更多 »

Jiga (YC W21) 招聘

制造业值得更好的对待。我们正在构建工具,帮助 NASA、Tesla、Google 以及数百个顶尖团队将未来变为现实。你能帮助我们实现它吗?

我们的新闻编辑部 AI 政策

当我们将某个陈述、立场或引语归于特定来源时,这些材料来源于对访谈、文字记录、已发表的统计数据等的直接参与。