.tgz/tarball を使用して .tgz/tarball を作成します$(npm pack)
。
次に、次を実行します。
sha1sum oresoftware-npp-0.0.1001.tgz
私は得る:
77c58da68593dcdcd14bb16a37f5f63ef42bab63 oresoftware-npp-0.0.1001.tgz
このshasumをリモートサーバーの他のtarballと比較したいと思います。以下を使用して、NPMレジストリでtarballのshasumを照会できます。
npm view @oresoftware/npp@latest dist.shasum
生産する:
3c2e7328110ba57e530c9938708b35bde941c419
このshasumは上記の他のshasumとは異なりますが、.tgz tarballファイルの内容を変更したために予想されます。
私の問題には3つの層があります。
.tgzファイルのsha1sumを生成するときに
npm pack
これが正しい方法ですか? tarファイルを生成した後にsha1sumを生成しますか?tarballの内容が同じであれば、sha1sumも同じであると仮定します。ファイルが異なる時点で作成/変更された場合、同じ内容を持っていてもファイルは異なりますか?
2つのタールボールに同じ内容があるかどうかを確認するより良い方法はありますか?それが私がしたいすべてです。
答え1
NPM レジストリによって提供されるチェックサムは、2 つの機能を提供します。つまり、ダウンロードしたファイルが破損していないことを確認でき、帯域外チェックサムを確認できる場合は、ダウンロードしたファイルが変更されていないことを確認できます。 NPMアーカイブが再現可能に構築されていない限り、チェックサムを使用すると、使用しているアーカイブに必要npm pack
な内容が含まれていることを確認できません。
Tarballの問題は、メタデータ(保存されているファイルの所有権、権限、およびタイムスタンプ)が含まれていることですtar
。そして最も重要なことメタデータ圧縮。これらの値がすべて事前合意されている場合は、ファイルシステムから取得した値を上書きするように指定できますが、これは事前合意が必要です。
2つのランダムターボールの内容を比較する唯一の信頼できる方法は、その内容を抽出して比較することです。
答え2
このチェックサム比較が適切かどうかは、使用する tar コマンドと使用する tar アーカイブのタイプによって異なります。
star
たとえば、1986年以降の3つのタイムスタンプをすべて含めると、tarアーカイブが異なる時間に最後にアクセスされたため、同じコンテンツでも異なります。
2001年に新しいPOSIX tar拡張機能を使用すると、tar実装が元の標準を実装するのか、それ以降の変更を実装するかに応じて、3つのタイムスタンプがすべて提供されます。
タイムスタンプに興味がなければ、アーカイブチェックサムを比較することは正しいアプローチではありません。
したがって、2つのtarアーカイブを比較し、それから説明を書くことはしばしば不可能です。
ただし、2つのアーカイブのいずれかを解凍できる場合は、コンフィギュレーション可能なメタデータセットを使用してコンテンツとメタデータを比較するための優れた方法があります。使用star -diff
、参照http://schilytools.sourceforge.net/man/man1/star.1.html
たとえば、電話する場合:
star -diff -v diffopts=!times < archive.tar.gz
すべてのタイムスタンプを除くすべてのメタデータとファイルの内容を比較します。