tarball과 sha1sum 비교

tarball과 sha1sum 비교

.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 파일의 내용을 변경했기 때문에 예상된 것입니다.

내 문제에는 세 가지 레이어가 있습니다.

  1. .tgz 파일의 sha1sum을 생성할 때 npm pack이것이 올바른 접근 방식입니까 ? tar 파일을 생성한 후 sha1sum을 생성하시겠습니까?

  2. tarball의 내용이 동일하다면 sha1sum도 동일할 것이라고 가정합니다. 파일이 서로 다른 시점에 생성/수정된 경우, 동일한 내용을 가지고 있어도 파일이 달라지나요?

  3. 두 개의 타르볼에 동일한 내용이 있는지 확인하는 더 좋은 방법이 있습니까? 그것이 내가 하고 싶은 전부입니다.

답변1

NPM 레지스트리에서 제공하는 체크섬은 두 가지 기능을 제공합니다. 즉, 다운로드한 파일이 손상되지 않았는지 확인할 수 있고, 대역 외 체크섬을 확인할 수 있는 경우 다운로드한 파일이 변경되지 않았는지 확인할 수 있습니다. NPM 아카이브가 재현 가능하게 구축되지 않는 한 체크섬을 사용하면 사용 중인 아카이브에 npm pack필요한 내용이 포함되어 있는지 확인할 수 없습니다 .

타르볼의 문제점은 메타데이터(저장되는 파일의 소유권, 권한 및 타임스탬프)가 포함되어 있다는 것입니다 tar. 그리고 가장 중요한 것은메타데이터 압축. 이러한 값이 모두 사전 합의된 경우 파일 시스템에서 얻은 값을 재정의하도록 지정할 수 있지만 이는 사전 합의가 필요합니다.

두 임의의 타르볼의 내용을 비교하는 신뢰할 수 있는 유일한 방법은 해당 내용을 추출하여 비교하는 것입니다.

답변2

이 체크섬 비교가 적합한지 여부는 사용하는 tar 명령과 사용하는 tar 아카이브 유형에 따라 다릅니다.

star예를 들어, 1986년 이후 세 개의 타임스탬프를 모두 포함하면 tar 아카이브가 서로 다른 시간에 마지막으로 액세스되었기 때문에 동일한 콘텐츠라도 달라집니다.

2001년에 새로운 POSIX tar 향상 기능을 사용하면 tar 구현이 원래 표준을 구현하는지 아니면 이후 변경 사항을 구현하는지에 따라 세 가지 타임스탬프도 모두 제공됩니다.

타임스탬프에 관심이 없다면 아카이브 체크섬을 비교하는 것은 올바른 접근 방식이 아닙니다.

따라서 두 개의 tar 아카이브를 비교하고 그로부터 설명을 작성하는 것이 종종 불가능합니다.

그러나 두 아카이브 중 하나의 압축을 풀 수 있는 경우 비교를 위해 구성 가능한 메타데이터 세트를 사용하여 콘텐츠와 메타데이터를 비교할 수 있는 좋은 방법이 있습니다. 사용 star -diff, 참조http://schilytools.sourceforge.net/man/man1/star.1.html

예를 들어 전화하는 경우:

star -diff -v diffopts=!times < archive.tar.gz

모든 타임스탬프를 제외한 모든 메타데이터와 파일 콘텐츠를 비교합니다.

관련 정보