Compare tarballs com sha1sum

2

Eu crio um .tgz / tarball com $(npm pack) .

Eu então corro:

sha1sum oresoftware-npp-0.0.1001.tgz 

e eu recebo:

77c58da68593dcdcd14bb16a37f5f63ef42bab63  oresoftware-npp-0.0.1001.tgz

Eu quero comparar esse shasum com outro tarball em um servidor remoto. Eu posso consultar um shasum para um tarball no registro NPM, com:

 npm view @oresoftware/npp@latest dist.shasum

que produz:

3c2e7328110ba57e530c9938708b35bde941c419

esse shasum é diferente do outro acima, mas isso é esperado, já que eu mudei o conteúdo do arquivo .tgz do tarball.

minha pergunta é 3 vezes:

  1. Quando eu gero um sha1sum do arquivo .tgz resultante de npm pack , esse é o jeito certo de fazer isso? Para gerar o sha1sum depois que o arquivo tar é criado?

  2. Eu suponho que o sha1sum seria idêntico se os tarballs tivessem conteúdo idêntico? Eles difeririam se os arquivos fossem criados / modificados em momentos diferentes, mesmo que tenham o mesmo conteúdo?

  3. Existe uma maneira melhor de verificar se duas tarballs têm o mesmo conteúdo? É tudo o que estou tentando fazer.

por Alexander Mills 04.08.2018 / 20:13

2 respostas

2

As somas de verificação disponíveis no registro do NPM fornecem dois recursos: elas permitem que você verifique se o download não está corrompido e, se for possível verificar as somas de verificação fora da banda, se os arquivos baixados não foram alterados. A menos que os arquivos do NPM sejam criados de forma reproduzível, as verificações não permitem que você verifique se um arquivo criado por você mesmo usando npm pack contém o que deveria.

O problema com os tarballs é que eles contêm metadados: a propriedade, as permissões e os registros de data e hora dos arquivos armazenados, conforme armazenados por tar e, além disso, metadados de compactação . Se os valores para todos eles forem pré-acordados, eles podem ser especificados para substituir os valores obtidos do sistema de arquivos, mas isso requer um pré-contrato.

Para comparar o conteúdo de duas tarballs arbitrárias, a única forma confiável é extrair seu conteúdo e comparar isso.

    
por 04.08.2018 / 20:59
0

Se essa comparação de soma de verificação é útil para você, depende do comando tar que você está usando e de que tipo de arquivo tar é usado.

star , por ex. inclui todos os três carimbos de data / hora desde 1986 e isso faz com que os arquivos tar sejam diferentes mesmo com o mesmo conteúdo, pois o horário do último acesso é diferente.

Com os novos aprimoramentos do tar POSIX de 2001, também há todos os três registros de data e hora - dependendo se a implementação do tar implementa o padrão original ou a alteração posterior.

Se você não se importa com carimbos de data / hora, comparar as somas de verificação de arquivos não é o caminho certo a seguir.

Comparar dois arquivos tar e fazer declarações a partir disso é geralmente impossível.

Se, no entanto, você puder descompactar um dos dois arquivos, há uma maneira interessante de comparar conteúdo e metadados com um conjunto configurável de metadados que é usado para a comparação. Use star -diff , consulte o link

Se você, por exemplo, ligar:

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

o conteúdo do arquivo e todos os metadados, exceto todos os registros de data e hora, são comparados.

    
por 04.08.2018 / 23:22

Tags