reproducible-build

所有包都一定可以在 GUIX 上重现吗?
reproducible-build

所有包都一定可以在 GUIX 上重现吗?

默认情况下,如果我尝试使用 GUIX 安装软件包并且它不能逐位重现,会发生什么情况? 我非常担心 2024 年包管理器的状况(以及供应链攻击的风险)。虽然传统的包管理器喜欢apt和yum由专门的包管理器团队维护,他们验证、测试并以加密方式签署所有版本,新的包管理器如扁平包装,折断,并且docker允许随机用户提交包,并且将愉快地下载并运行恶意修改的软件。 今天我了解了 GUIX,它强调可重现的构建。但是在花了一个小时阅读他们的文档之后,我无法确定 GUIX 中的可重现构建是如何工作的——也不知道它是否是这样的。强制执行对于所有包。 GUIX 的默认安装是否要...

Admin

如何确保 NixOS 配置将来构建或使用相同的软件包版本?
reproducible-build

如何确保 NixOS 配置将来构建或使用相同的软件包版本?

在使用 Nix 进行 LHCb 的软件打包和分发,作者写道: 为了方便这种使用,软件必须长期稳定;甚至比长期支持操作系统的可用时间还要长。此外,该软件应重现原始版本中存在的所有错误,以确保最终结果的准确性。构建应该是可重复的,以允许仔细引入补丁。 但 NixOS 配置文件不包含包的版本(与 Rust 清单不同),例如 environment.systemPackages = with pkgs; [ git git-lfs fish neovim nixpkgs-fmt nixos-option ...

Admin

在 Debian Buster 上构建 Debian 软件包“chromium 108”
reproducible-build

在 Debian Buster 上构建 Debian 软件包“chromium 108”

我正在尝试chromium 108为 Debian Buster 进行构建。该软件包仅适用于 Debian Bullseye,因此在我的 Debian Buster 构建机器上,我需要将其更改/etc/apt/sources.list为 bullesyse 并下载源: apt-get source chromium 之后我又变sources.list回巴斯特。 我 cd 到该目录并尝试dpkg-buildpackage: cd chromium-108.0.5359.94 dpkg-buildpackage --build=binary --no-sign...

Admin

如何使用固定修订版修复使用 Nix 构建 Docker 映像的错误
reproducible-build

如何使用固定修订版修复使用 Nix 构建 Docker 映像的错误

我正在尝试使用 Nix 在固定版本上构建 Docker 映像。该文件如下所示即可工作: { pkgs ? import <nixpkgs> { } }: pkgs.dockerTools.buildImage { ... 但当它看起来像这样时就会失败: { pkgs ? (import (builtins.fetchTarball { url = "https://github.com/NixOS/nixpkgs/archive/44fc3cb097324c9f9f93313dd3f103e78d722968.tar.gz"; sha25...

Admin

次要内核更新了运行自定义内核构建的人员的适用性
reproducible-build

次要内核更新了运行自定义内核构建的人员的适用性

想象一下情况。 您正在运行一个自定义内核,该内核是您使用自己的.config.发布了一个新的小更新,假设5.16.16是昨天发布的,而您已经在运行5.16.15. 你如何确定一定其中5.16.16包含的更改实际上影响你的设置?您应该编译并重新启动它,还是它对您的更改为零并且您可以安全地跳过它? 我在想这个: 应用补丁 将内核版本恢复到您已经运行的版本 构建内核并将其安装到临时目录中 二进制比较结果文件 这会不行。模块可能匹配(我什至不完全确定),但vmlinuz会有所不同,因为它包含构建日期/时间以及标识内核已构建次数的数字,即 Linux localh...

Admin

为什么我不能在全新的 debian 11 上安装几乎相同的内核?
reproducible-build

为什么我不能在全新的 debian 11 上安装几乎相同的内核?

我的总体目标是构建一个我可以修改的 RT_PREEMPT 内核。作为中间步骤,我尝试构建并安装(并作为 grub 条目运行)一个通用的非 RT_PREEMPT 内核。但我认为下面的问题是有效的,即使没有提到 RT_PREEMPT。 这是场景: 从 .iso 全新安装 Debian 11 从 kernel.org 下载我认为与相同内核源代码最接近的内容。 建造, 启动失败并显示: Loading initial ramdisk ... error: out of memory. Press any key to continue ... 如果我按下某个键...

Admin

作为最终用户,如何验证给定的包是否以可重现的方式构建?
reproducible-build

作为最终用户,如何验证给定的包是否以可重现的方式构建?

我想验证一下是否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) 如何使这些校验和匹配? ...

Admin

如何列出 Debian 系统上安装了哪些不可复制的软件包?
reproducible-build

如何列出 Debian 系统上安装了哪些不可复制的软件包?

为什么可重复构建很重要,解释如下:可重现的构建.org: 虽然任何人都可以检查免费开源软件的源代码是否存在恶意缺陷,但大多数软件都是预编译分发的,没有方法确认它们是否对应。 这刺激了对发布软件的开发人员的攻击,不仅通过传统的利用方式,而且还以政治影响、勒索甚至暴力威胁的形式进行。 根据isdebianreproducibleyet.comDebian 目前的可重复性只有 94.7%。 列出了buster/amd64 中无法重现构建的软件包这里。 有没有一种简单快速的方法来列出系统上安装的所有不可重现的软件包? 我正在考虑类似的方法...

Admin

如何使用 mkisofs/genisoimage 制作可复制的 iso 文件?
reproducible-build

如何使用 mkisofs/genisoimage 制作可复制的 iso 文件?

在自动化过程中,将使用 .iso 文件创建 ISO 文件mkisofs。甚至,由于原始数据完全相同,因此生成的 iso 文件也不相同(它们的md5sum更改)。因为我的rsync --checksum结果,我不喜欢每次都重新传输“相同的iso”。我预计时间戳是主要区别。 是否有一些内置开关可以通过确实相同的方式libfaketime生成 iso 。mkisofs 我不知道只有时间戳才重要吗?我将生成的 iso 文件与其xxd isofile输出进行了比较,如下所示: diff --side-by-side --suppress-common-line...

Admin

有没有一种实用的方法来制作二进制可复制的 CPIO (initramfs) 存档?
reproducible-build

有没有一种实用的方法来制作二进制可复制的 CPIO (initramfs) 存档?

我希望我的 initramfs 具有相同的哈希值,无论我何时何地构建它,如果文件的内容相同(并且由 root 拥有并具有相同的权限)。我在 GNU cpio 中没有看到任何选项来删除或设置存档中文件的时间戳。是否有一种相对标准的方法来处理 cpio 和其他存档程序的输入,以便您可以获得可重现的产品? 除此之外,是否有一个传统的“我们没有给出日期”时间戳?大多数软件都不会注意到什么?例如 0 纪元秒? 例如,如果我对 initramfs 的输入目录进行查找并手动将所有时间戳设置为 0,我可以构建该存档,将其提取到另一个系统上,重复该过程,然后再次构建它并获...

Admin

使用 bzip2 压缩的文件是否具有确定性(可重现)?
reproducible-build

使用 bzip2 压缩的文件是否具有确定性(可重现)?

我正在尝试确定使用bzip2压缩需要 100% 可重现的文件是否存在任何潜在问题。具体来说:元数据(名称/索引节点、lastmod 日期等)或其他任何内容是否会导致相同的文件内容产生不同的校验和在生成的.bz2存档上? 举个例子,gzip 默认情况下不是确定性的除非-n使用。 到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等如何)的情况下,bzip2 确实一致地生成相同的文件,但如果有更多的轶事证据那就太好了。 ...

Admin

制作完全相同的 ext2 文件系统
reproducible-build

制作完全相同的 ext2 文件系统

我正在为Linux系统准备一个镜像文件。我需要能够运行创建图像的脚本,并使输出每次都逐位相同。 我执行正常的过程,创建一个大的二进制文件,对其进行分区,使用该分区创建一个循环设备,然后创建 I 文件系统。然后我mount将文件系统复制到系统Linux和初始化程序东西结束,卸载分区,删除循环设备,我就有了我的图像文件。我可以dd将它复制到磁盘上,并且 linux 系统可以正确启动。所以我正在正确地制作文件系统。 我运行执行上述步骤的脚本,但每次输出都不同。其中一些是时间戳外部2数据结构。我写了一个程序,读取外部2结构并可以清除时间戳,并且tune2fs可以...

Admin

将 makefile 中编码的依赖关系可视化为图表
reproducible-build

将 makefile 中编码的依赖关系可视化为图表

密切相关如何将 makefile 中给出的依赖关系显示为树?但那里给出的答案并不令人满意(即不起作用)。 是否有工具可以可视化标准 Makefile 中编码的有向无环图 (DAG)?例如,通过 Unix 管道进行后处理的 shell 脚本也可以是一个可接受的解决方案(也许有一个 pandoc 过滤器可以将 MakeFiles 转换为 graphviz 或 LaTeX)。 我并不严格需要直接排版此图形可视化的工具?只需将 makefile 的常见文件格式转换为图形可视化文件或类似文件就足够了。 ...

Admin

是否有没有文件元数据的标准存档格式?
reproducible-build

是否有没有文件元数据的标准存档格式?

对于某些上下文,我正在开发一个类似包管理器的实用程序,它支持以非 root 用户身份构建包。我想确保 root 用户构建的包和非 root 用户构建的包绝对无法区分,而不是使用存档tar并忽略元数据。 是否有一种格式/实用程序有点类似于tar存档内的文件和目录不(并且理想情况下不能)包含权限位、时间戳和所有权相关信息等元数据?我希望存档能够由其中存在的目录和文件以及文件内容来完整描述(因此它也无法存储符号链接或硬链接)。 我也可以接受无法区分绝对路径和相对路径的存档格式(即/a/b映射a/b到同一事物,因为存档的路径概念与 Unix 路径不同)。 ...

Admin

Dockerfile、Docker 镜像和可重现环境
reproducible-build

Dockerfile、Docker 镜像和可重现环境

关于 docker 的常用文档和注释提到了版本控制和共享Dockerfile,这应该让任何人都可以构建相同的图像。这听起来不错,但是,我们通常有这样的命令。 RUN apt-get update pip install.. 这可能会根据运行时间安装不同的东西/版本/补丁,并使调试变得困难。 另一方面,共享 docker 镜像并不能给您带来诸如版本控制和查看两个镜像之间到底有什么不同之类的好处。 其中哪一个(dockerfile 与 image)应该作为开发和部署使用的参考? Dockerfile 是否应该提供有关确切更新的更多详细信息?即使这样,...

Admin