%20%E5%AD%98%E6%AA%94%EF%BC%9F.png)
我希望我的 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 歲了。
star
tar
是我所知道的最成熟、功能最完整的實作。其他實作通常從 複製存檔格式增強的概念,它也由其他人引入和使用的屬性前綴star
來標識。SCHILY.*
star
32 年來,它分成兩個進程,共享一個可設定的 FIFO 以獲得最大速度。star -copy
比任何其他已知的 UNIX 樹複製方法都要快。
30 年來,它支援並自動偵測各種存檔格式。
17 年來,它是一個通用的歸檔工具,實現了對各種 UNIX 歸檔器的命令列相容性tar
,cpio
pax
甚至是不相容的GNU tar
。
自 16 年來,它包括find
通過libfind
.這有助於避免學習不必要的新使用概念,因為每個人都應該知道如何使用find
.
兩年以來,它完全消除了路徑名長度限制。
看http://cdrtools.sourceforge.net/private/star.html和http://schilytools.sourceforge.net/man/man1/star.1.html了解更多。