はじめに:私たちは複雑なビルドプロセスを持っていて、1つのシステムでは動作しましたが、別のシステムでは失敗したことを発見しました(残念ながら/ Murphyの場合はJenkinsビルドサーバーで動作していたため、長い間問題は検出されませんでした)。エラーの原因は、tar
一部の外部コンポーネントがハードリンクされたファイルをファイルに配置した順序で判明しました。
a
b
ハードリンクされていて赤で、tar
後でtarファイルを抽出するときにのみa
抽出されました。もちろん、a
最初にアーカイブするときはうまく機能しますが、b
tarから初めてアーカイブする場合はCannot hard link
典型的なエラーが発生します。
もちろん、tar cf
使用することも--hard-dereference
できますが、これは外部ツールでスクリプトを変更することを意味するので(避けるべきです)、質問は異なります。
質問:私たちの基本的な目標は、システム独立して再現可能な結果を得ることです。現在のtar
リング順序は、あるシステムで再現可能ですが、他のシステムではランダムに異なる場合があります。tar
オプションを指定したり、呼び出しを複数の呼び出しに分割せずにtar
ファイルtar
の順序を強制することはできますか?
現在のシステムはすべてLinuxですが、時にはFreeBSDまたはMacOSかもしれません。
ベストアンサー1
簡単なアプローチは、stdinのファイルリストをtarに提供することで制御できることです(最初にソート)。
しかし、tar呼び出しを制御できないと言ったので、ディレクトリエントリの順序を制御する方法が必要です。
ls -u
ディレクトリエントリの順序を実行または確認することでこれを実行できますfind
。
目的の方法でアイテムが並べ替えられたディレクトリを作成するには、新しいディレクトリを作成し、必要な順序で一度に1つずつファイルをコピーまたは移動します。
find
動作していることを確認してください。スクリプトを使用して自動化し、再帰的に作成します。
最後にツールを実行します。