ファイル/ディレクトリのatime/ctime/mtimeの値を省略した.tar
ファイルを作成する方法はありますか?
ビルドプロセスには、tarfileにパッケージ化されるアーティファクトのディレクトリを生成するステップがあります。ビルドステップはべき等であると予想されます-同じ入力が与えられると、毎回同じファイル/出力を正確に生成します。
理想的には、ステップがクリーンビルド全体でビット単位でべき等になるようにし、連続するビルドのハッシュを使用して何も変更されていないことを確認できるようにします。 。ただし、tarファイルには各エントリのタイムスタンプ(atime/ctime/mtime)が含まれているため、そのビルドステップで作成されたtarファイルは、アーカイブ内のすべてのファイルの内容areビット単位で同一です。
エントリのタイムスタンプを省略したtarfileを生成して、アーカイブを生成するステップがビット単位でべき等になるようにする方法はありますか? (ファイルモードビットやシンボリックリンクなど、tar
が保持する他のファイルメタデータを活用したいと考えています。)
真にべき等のtarを使用するには、mtime
は良いステップですが、十分ではありません。また、並べ替え順序、所有者とグループ(およびそれらのマッピング)、およびmtime
の適切なタイムゾーンを設定する必要があります(そうしないと、MacとLinuxの間でも問題が発生するため)。
私は
tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 2019-01-01' ... | gzip -n
GNUtarには--mtime
引数があり、ファイルの実際のmtimeではなく、アーカイブに固定日付を格納するために使用できます。
tar --mtime='1970-01-01' input ...
Gzipでtarballを圧縮する場合は、tarアーカイブの名前とタイムスタンプが保存されないように-n
を指定する必要もあります。
tar --mtime='1970-01-01' input ... | gzip -n >input.tar.gz