标签: reproducible-build

压缩两个相同的文件夹会产生不同的结果

我有两个相同的文件夹,具有相同的结构和内容,如下所示:

folder_1
  hello.txt
  subfolder
    byebye.txt

folder_2
  hello.txt
  subfolder
    byebye.txt
Run Code Online (Sandbox Code Playgroud)

如果我将它们压缩为 tar.xz 格式,我会得到两个具有两种不同文件大小的不同存档(只有几个字节,但它们并不相同)。

$ cd folder_1 && tar -Jcf archive.tar.xz *
$ cd folder_2 && tar -Jcf archive.tar.xz *
Run Code Online (Sandbox Code Playgroud)

我得到:

folder_1/archive.tar.xz != folder_2/archive.tar.xz
Run Code Online (Sandbox Code Playgroud)

当然,如果我md5sumsha1sum他们我会得到两个不同的哈希值

这就是我的问题......我需要检查提供的档案是否与我存储中的档案相同。我不能使用散列,也不能只检查文件大小。

使用 zip 而不是 tar.xz 可以工作,因为 zip 总是从相同的文件产生相同的 achives。为什么会这样?有什么办法可以预防吗?

tar files reproducible-build

8
推荐指数
1
解决办法
2878
查看次数

将生成文件中编码的依赖关系可视化为图形

如何将 makefile 中给出的依赖关系显示为树密切相关但是那里给出的答案并不令人满意(即不起作用)。

是否有工具可以将标准 Makefile 中编码的有向无环图 (DAG) 可视化?例如,用于通过 Unix 管道进行后处理的 shell 脚本也是一个可接受的解决方案(也许有一个 pandoc 过滤器可以将 MakeFiles 转换为 graphviz 或 LaTeX)。

我并不严格需要直接排版此图形可视化的工具?只需将 makefile 的常见文件格式转换为图形可视化文件或类似文件就足够了。

make gnu-make plotting graphviz reproducible-build

8
推荐指数
1
解决办法
2637
查看次数

可以依赖使用 bzip2 压缩的文件是确定性的(可重现的)吗?

我试图确定使用bzip2压缩需要 100% 可重现的文件是否存在任何潜在问题。具体做法是:罐的元数据(名称/索引节点,的lastmod日期等)或任何其他原因相同的文件内容,以产生不同的校验和对所得.bz2的存档?

例如,除非使用gzip,否则默认情况下不是确定性的-n

到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等)的情况下,bzip2 确实始终如一地生成相同的文件,但如果有更多轶事证据就更好了。

checksum bzip2 reproducible-build

7
推荐指数
1
解决办法
348
查看次数

Dockerfile、Docker 镜像和可重现环境

有关 docker 的常见文档和注释提到了版本控制和共享 Dockerfile 这应该让任何人都可以构建相同的映像。这听起来不错,但是,我们通常有这样的命令。

RUN apt-get update
pip install..
Run Code Online (Sandbox Code Playgroud)

这可能会根据运行时间安装不同的东西/版本/补丁,并使调试变得困难。

另一方面,共享 docker 镜像并不能给您带来诸如版本控制和查看两个镜像之间到底有什么不同之类的好处。

  • 其中哪一个(dockerfile 与 image)应该作为开发和部署使用的参考?
  • Dockerfile 是否应该提供有关确切更新的更多详细信息?即使这样,基础映像也可能会根据您运行的时间而有所不同。

desktop-environment docker reproducible-build

5
推荐指数
1
解决办法
627
查看次数

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

在自动化过程中,将使用 .iso 文件创建 ISO 文件mkisofs。甚至,由于原始数据完全相同,因此生成的 iso 文件也不相同(它们的md5sum更改)。因为我的rsync --checksum结果,我不喜欢每次都重新传输“相同的iso”。我预计时间戳是主要区别。

是否有一些内置开关可以通过确实相同的libfaketime方式生成 iso 。mkisofs

我不知道只有时间戳才重要吗?我将生成的 iso 文件与其xxd isofile输出进行了比较,如下所示:

diff --side-by-side  --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
Run Code Online (Sandbox Code Playgroud)

在其他完全相同的文件中似乎只有 51 行代表 16 字节(大约有 800 字节的差异)。

用于生成该 iso 的命令大致如下:

genisoimage -o "file.iso" -b isolinux/isolinux.bin \
    -c isolinux/boot.cat -no-emul-boot \
    -boot-load-size 4 -boot-info-table \
    -J -R -v -T -V 'CDLABEL' "datadir/"
Run Code Online (Sandbox Code Playgroud)

BS:我是否缺少一个命令行参数开关,rsync它可以对大约 1MB 的大文件块进行校验和,以防止在我的情况下只有大约 800 字节不同时重新传输?

rsync mkisofs reproducible-build

5
推荐指数
2
解决办法
5575
查看次数

“Debian 有望证明二进制文件的起源”是什么意思?

我在 The Register of the UK 上找到了一篇关于 Debian 中可复制构建的文章。我不能从中了解很多。任何人都可以为我简单地做这个吗?这是链接:可重现的构建

packaging debian reproducible-build

1
推荐指数
1
解决办法
96
查看次数

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

我希望我的 initramfs 具有相同的哈希值,无论我何时何地构建它,如果文件的内容相同(并且由 root 拥有并具有相同的权限)。我在 GNU cpio 中没有看到任何选项来删除或设置存档中文件的时间戳。是否有一种相对标准的方法来处理 cpio 和其他存档程序的输入,以便您可以获得可重现的产品?

除此之外,是否有一个传统的“我们没有给出日期”时间戳?大多数软件都不会注意到什么?例如 0 纪元秒?

例如,如果我对 initramfs 的输入目录进行查找并手动将所有时间戳设置为 0,我可以构建该存档,将其提取到另一个系统上,重复该过程,然后再次构建它并获得位相同文件?

linux shell cpio reproducible-build

1
推荐指数
1
解决办法
869
查看次数