![作为最终用户,如何验证给定的包是否以可重现的方式构建?](https://linux22.com/image/197014/%E4%BD%9C%E4%B8%BA%E6%9C%80%E7%BB%88%E7%94%A8%E6%88%B7%EF%BC%8C%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81%E7%BB%99%E5%AE%9A%E7%9A%84%E5%8C%85%E6%98%AF%E5%90%A6%E4%BB%A5%E5%8F%AF%E9%87%8D%E7%8E%B0%E7%9A%84%E6%96%B9%E5%BC%8F%E6%9E%84%E5%BB%BA%EF%BC%9F.png)
我想验证一下是否mksh
可以以可重现的方式构建该包。我正在尝试与
apt build-dep mksh
apt source mksh
cd mksh; dpkg-buildpackage -uc -us
cd ..; sha256sum <freshly build dep>
如果我现在这样做
apt download mksh
并将下载的 deb 的校验和与我本地创建的 debian 包进行比较,校验和不同(预计我没有签署 deb)
如何使这些校验和匹配?
答案1
源mksh
包可重复构建.deb
,这意味着如果您可以重现其构建环境,则可以重新创建给定的包。该信息已存储在.buildinfo
文件中,并在Debian 快照,可以检索用于构建给定.deb
.
现在,.buildinfo
文件不会与 Debian 存储库中的二进制包一起发布, 但他们被出版了在buildinfos.debian.net,其中包含当前 Debian 11.buildinfo
版本的文件(mksh
例如 版本amd64
)。使用它,您可以确定给定二进制包的构建环境mksh
是什么,然后尝试重现它。
这里还有另一个微妙之处——Debian mksh
11 中的当前软件包是 binNMU,其源代码没有确切地与发布的包源匹配。要重现现有的二进制包,您必须包含额外的 binNMU changelog
(例如 changelog.Debian.amd64.gz
在amd64
包装中)具有相同的内容:
mksh (59c-9+b2) sid; urgency=low, binary-only=yes
* Binary-only non-maintainer upload for amd64; no source changes.
* Rebuild for outdated Built-Using
-- amd64 / i386 Build Daemon (x86-ubc-01) <[email protected]> Thu, 05 Aug 2021 11:52:19 +0000
请注意,如果您能重现给定的构建环境,生成的.deb
文件应该完全相同——在 Debian 中发布的二进制包本身没有签名,这是描述它们的元数据。
答案2
你不能。底层数据不同,因此计算出的校验和也会不同。找到两个具有相同校验和的值是一个难题。