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

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

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

それ以外にも、伝統的な「日付が与えられませんでした」タイムスタンプはありますか?ほとんどのソフトウェアが気づいていないものは何ですか?例えば、第0世代初め?

たとえば、initramfsの入力ディレクトリを検索し、すべてのタイムスタンプを手動で0に設定した場合、アーカイブを構築し、別のシステムから抽出した後、プロセスを繰り返して再構築して同じファイルを取得できますか?

答え1

最新バージョンのGNUには、必要な操作をある程度実行するフラグがcpioあります。--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れている必要があります。 1982年に始まり、2020年現在38年になりました。UNIXtar

startar私が知っていることの中で、最も成熟した完全な機能を備えた実装です。他の実装では、アーカイブ形式の拡張の概念をコピーすることがよくあり、これは他の人が導入して使用する属性プレフィックスとして識別されますstarSCHILY.*star

32では、最高速度のために構成可能なFIFOを共有する2つのプロセスに分割される。star -copy他の既知のUNIXツリーのコピー方法よりも高速です。

30年間、さまざまなアーカイブ形式をサポートし、自動的に検出してきました。

tar17年間、これはさまざまなUNIXアーカイバー、cpio paxさらには互換性のないアーカイバーとのコマンドライン互換性を可能にする汎用アーカイブツールでしたGNU tar

16年以降findからlibfindfind

2年間、パス名の長さの制限は完全に消えました。

バラよりhttp://cdrtools.sourceforge.net/private/star.htmlそしてhttp://schilytools.sourceforge.net/man/man1/star.1.htmlより多くの情報を知りたいです。

関連情報