web-dev-qa-db-ja.com

内容のタイムスタンプを省略したtarファイルを作成するにはどうすればよいですか?

ファイル/ディレクトリのatime/ctime/mtimeの値を省略した.tarファイルを作成する方法はありますか?

なぜこれをしたいのですか?

ビルドプロセスには、tarfileにパッケージ化されるアーティファクトのディレクトリを生成するステップがあります。ビルドステップはべき等であると予想されます-同じ入力が与えられると、毎回同じファイル/出力を正確に生成します。

理想的には、ステップがクリーンビルド全体でビット単位でべき等になるようにし、連続するビルドのハッシュを使用して何も変更されていないことを確認できるようにします。 。ただし、tarファイルには各エントリのタイムスタンプ(atime/ctime/mtime)が含まれているため、そのビルドステップで作成されたtarファイルは、アーカイブ内のすべてのファイルの内容areビット単位で同一です。

エントリのタイムスタンプを省略したtarfileを生成して、アーカイブを生成するステップがビット単位でべき等になるようにする方法はありますか? (ファイルモードビットやシンボリックリンクなど、tarが保持する他のファイルメタデータを活用したいと考えています。)

15
Mickalot

真にべき等のtarを使用するには、mtimeは良いステップですが、十分ではありません。また、並べ替え順序、所有者とグループ(およびそれらのマッピング)、およびmtimeの適切なタイムゾーンを設定する必要があります(そうしないと、MacとLinuxの間でも問題が発生するため)。

私は

tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 2019-01-01' ... | gzip -n
1
Adracus

GNUtarには--mtime引数があり、ファイルの実際のmtimeではなく、アーカイブに固定日付を格納するために使用できます。

tar --mtime='1970-01-01' input ...

Gzipでtarballを圧縮する場合は、tarアーカイブの名前とタイムスタンプが保存されないように-nを指定する必要もあります。

tar --mtime='1970-01-01' input ... | gzip -n >input.tar.gz
15
Charles Duffy