Ubuntu 版本是否具有确定性?我假设它们是确定性的,也就是说,如果我重新创建构建 Ubuntu 安装介质的过程,我将获得与 Ubuntu 镜像相同的图像(逐位,具有相同的校验和)。
最近的邮政作者:Joanna Rutkowska(Qubes 操作系统发行版)表明事实并非如此:
目前大多数项目(包括所有 Linux 发行版)都无法进行确定性构建
为什么不?
答案1
不是。让我们在这里澄清一下区别,
系统是否支持“可重复的构建”?
是的,所有系统都支持确定性的包。
系统是否执行“可重复的构建”?
不,虽然它确实有助于诊断问题,并且正在努力使软件包可重现——但无论如何都会报告和处理错误。
所有的事情,无一例外,都是可以重复的吗?
差远了。
现在让我们定义“可重复的构建”
如果给定相同的源代码、构建环境和构建说明,则构建是可重现的,任何一方都可以逐位重新创建所有指定工件的相同副本。
构建环境、构建说明和源代码的相关属性以及预期的可重现工件由作者或分销商定义。构建工件是构建结果的一部分,是期望的主要输出。
现在让我们谈谈需要什么
查看此页面下“如何”其中规定了三项标准
构建系统需要完全确定:转换给定的源必须始终产生相同的结果。通常,当前日期和时间不能被记录,并且输出必须始终以相同的顺序写入。
用于执行构建的工具集以及更普遍的构建环境应该被记录或预定义。
应该为用户提供一种方法来重新创建足够接近的构建 3.,执行构建过程,并验证输出是否与原始构建匹配。
您可以找到更多有关所有这些的文档在这里。
至于为什么 Ubuntu 目前无法重现,原因如下Perl 目前失败因为-V
为了方便起见存储了编译器参数——他们正在等待 GCC 修补上游。许多这样的功能可能会被彻底消灭。还有一些其他问题:一些手册页和程序编译了构建日期,其他则编译了共享库的可变路径等。
不可重现并不是问题或漏洞。它只是使验证您是否未被篡改变得更加困难,目前该功能被视为更有价值。
您可以关注Debian 在确定性方面的进展
答案2
首先,我认为 Rutkowska 并不是在谈论确定性地构建安装媒体,而是在谈论包(deb、rpm)。
Debian 正在致力于可重复地构建软件包(https://wiki.debian.org/ReproducibleBuilds),但仍然有很多软件包无法通过这种方式构建……
确定性地构建整个分布无疑更具挑战性。