%20%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E5%AE%9F%E7%94%A8%E7%9A%84%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
ファイルの内容が同じ (かつ、ルートが所有し、同じ権限を持つ) 場合、いつ、どこでビルドしても、initramfs に同じハッシュを持たせたいのですが。GNU cpio には、アーカイブ内のファイルのタイムスタンプを削除したり設定したりするオプションがありません。cpio やその他のアーカイブ プログラムへの入力を調整して、再現可能な製品を取得するための比較的標準的な方法はありますか?
これに関連して、従来の「日付は指定しません」というタイムスタンプはありますか? ほとんどのソフトウェアが気にしないようなものでしょうか? たとえば、0 エポック秒などでしょうか?
たとえば、initramfs の入力ディレクトリで find パスを実行し、すべてのタイムスタンプを手動で 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年目になります。UNIX
tar
star
tar
は、私が知る限り最も成熟しており、最も機能が充実した実装です。他の実装は通常、 からアーカイブ形式の拡張機能の概念をコピーします。これは、 によって導入され、他の によっても使用されるプロパティ プレフィックスstar
によって識別されます。SCHILY.*
star
32 年以来、最大速度を実現するために構成可能な FIFO を共有する 2 つのプロセスにフォークしています。star -copy
他の既知の UNIX ツリー コピー方法よりも高速です。
30 年以来、さまざまなアーカイブ形式をサポートし、自動検出しています。
tar
17 年以来、 は、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詳細については。