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

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

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

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

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

答案1

较新版本的 GNUcpio有一个--reproducible标志,可以在一定程度上满足您的要求。我的理解是剥离非决定论工具将在事后处理时间戳要求。touch当然,您可以在打包前设置时间。

答案2

您可以使用它来完成此操作star,它是find基于libfind.

致电例如:

star -c H=cpio -find somedir -chmtime 2020-05-20T12:10:12 > archive.cpio

当然,find如果您愿意,您可以对不同的时间戳使用复杂的规则。

查看http://sourceforge.net/projects/schilytools/files/star获取最新 tarball 中的最新源代码schilytools

顺便说一句:我相信以下内容可能看起来像广告,但已请求提供这些信息,并且从一开始就是开源的。star应该是众所周知的,UNIX因为它是最古老的免费tar实现 - 它始于 1982 年,到 2020 年已有 38 岁了。

startar是我所知道的最成熟、功能最完整的实现。其他实现通常从 中复制存档格式增强的概念,它也由其他人引入和使用的属性前缀star来标识。SCHILY.*star

32 年来,它分成两个进程,共享一个可配置的 FIFO 以获得最大速度。star -copy比任何其他已知的 UNIX 树复制方法都要快。

30 年来,它支持并自动检测各种存档格式。

17 年来,它是一个通用的归档工具,实现了对各种 UNIX 归档器的命令行兼容性tarcpio pax甚至是不兼容的GNU tar

自 16 年来,它包括find通过libfind.这有助于避免学习不必要的新使用概念,因为每个人都应该知道如何使用find.

两年以来,它完全消除了路径名长度限制。

http://cdrtools.sourceforge.net/private/star.htmlhttp://schilytools.sourceforge.net/man/man1/star.1.html了解更多信息。

相关内容