tar cfに再現可能な結果を​​得るにはどうすればよいですか?

tar cfに再現可能な結果を​​得るにはどうすればよいですか?

はじめに:私たちは複雑なビルドプロセスを持っていて、1つのシステムでは動作しましたが、別のシステムでは失敗したことを発見しました(残念ながら/ Murphyの場合はJenkinsビルドサーバーで動作していたため、長い間問題は検出されませんでした)。エラーの原因は、tar一部の外部コンポーネントがハードリンクされたファイルをファイルに配置した順序で判明しました。

abハードリンクされていて赤で、tar後でtarファイルを抽出するときにのみa抽出されました。もちろん、a最初にアーカイブするときはうまく機能しますが、btarから初めてアーカイブする場合はCannot hard link典型的なエラーが発生します。

もちろん、tar cf使用することも--hard-dereferenceできますが、これは外部ツールでスクリプトを変更することを意味するので(避けるべきです)、質問は異なります。

質問:私たちの基本的な目標は、システム独立して再現可能な結果を​​得ることです。現在のtarリング順序は、あるシステムで再現可能ですが、他のシステムではランダムに異なる場合があります。tarオプションを指定したり、呼び出しを複数の呼び出しに分割せずにtarファイルtarの順序を強制することはできますか?

現在のシステムはすべてLinuxですが、時にはFreeBSDまたはMacOSかもしれません。

ベストアンサー1

簡単なアプローチは、stdinのファイルリストをtarに提供することで制御できることです(最初にソート)。

しかし、tar呼び出しを制御できないと言ったので、ディレクトリエントリの順序を制御する方法が必要です。

ls -uディレクトリエントリの順序を実行または確認することでこれを実行できますfind

目的の方法でアイテムが並べ替えられたディレクトリを作成するには、新しいディレクトリを作成し、必要な順序で一度に1つずつファイルをコピーまたは移動します。

find動作していることを確認してください。スクリプトを使用して自動化し、再帰的に作成します。

最後にツールを実行します。

おすすめ記事