バイナリ再現可能な CPIO (initramfs) アーカイブを作成する実用的な方法はありますか?

バイナリ再現可能な CPIO (initramfs) アーカイブを作成する実用的な方法はありますか?

ファイルの内容が同じ (かつ、ルートが所有し、同じ権限を持つ) 場合、いつ、どこでビルドしても、initramfs に同じハッシュを持たせたいのですが。GNU cpio には、アーカイブ内のファイルのタイムスタンプを削除したり設定したりするオプションがありません。cpio やその他のアーカイブ プログラムへの入力を調整して、再現可能な製品を取得するための比較的標準的な方法はありますか?

これに関連して、従来の「日付は指定しません」というタイムスタンプはありますか? ほとんどのソフトウェアが気にしないようなものでしょうか? たとえば、0 エポック秒などでしょうか?

たとえば、initramfs の入力ディレクトリで find パスを実行し、すべてのタイムスタンプを手動で 0 に設定した場合、そのアーカイブをビルドし、別のシステムで抽出し、プロセスを繰り返して再度ビルドし、ビットが同一のファイルを取得できますか?

答え1

GNUの新しいバージョンには、あなたの要件にある程度適合するフラグcpioがあります。私の理解では、--reproducibleストリップ非決定性ツール事後にタイムスタンプの要件を処理します。touchもちろん、パッケージ化する前に時間を設定することができます。

答え2

これは を使用して実行でき、に基づいてstar組み込まれています。findlibfind

電話例:

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よく知られているはずです。 1982年に開始され、2020年には38年目になります。UNIXtar

startarは、私が知る限り最も成熟しており、最も機能が充実した実装です。他の実装は通常、 からアーカイブ形式の拡張機能の概念をコピーします。これは、 によって導入され、他の によっても使用されるプロパティ プレフィックスstarによって識別されます。SCHILY.*star

32 年以来、最大速度を実現するために構成可能な FIFO を共有する 2 つのプロセスにフォークしています。star -copy他の既知の UNIX ツリー コピー方法よりも高速です。

30 年以来、さまざまなアーカイブ形式をサポートし、自動検出しています。

tar17 年以来、 は、cpio paxや 、さらには互換性のない などのさまざまな UNIX アーカイバとのコマンド ライン互換性を実装する汎用アーカイバ ツールですGNU tar

16 年以来、 による拡張findコマンドライン構文のサポートが含まれていますlibfind。 誰もが の使い方を知っているはずなので、これにより、不必要な新しい使用概念を学習する必要がなくなりますfind

2 年以来、パス名の長さの制限は完全に削除されました。

見るhttp://cdrtools.sourceforge.net/private/star.htmlそしてhttp://schilytools.sourceforge.net/man/man1/star.1.html詳細については。

関連情報