Executei um teste criando dois alcatrões do mesmo diretório (seus arquivos permaneceram inalterados) e descobri que os md5sums deles eram diferentes. Suponho que haja algum carimbo de data / hora sendo incluído no cabeçalho do alcatrão, mas não encontrei o caminho para substituí-lo. Meu sistema operacional é o Ubuntu 9.1. Alguma ideia ?
Obrigado.
touch filename
que altera a hora modificada de um arquivo é suficiente para alterar a soma de verificação.Respostas:
Como Dennis apontou acima, é gzip. Parte do cabeçalho gzip é um tempo de modificação para o que estiver compactado no arquivo. Se você precisar do gzip, poderá compactar o arquivo tar como uma etapa extra fora do tar, em vez de usar o gzip interno do tar. O comando gzip possui um sinalizador para suprimir a economia desse tempo de modificação.
Isso não afetará os tempos dentro do arquivo tar, apenas o do cabeçalho gzip.
fonte
GZIP=-n tar -cz ...
Para criar um arquivo tar com uma soma de verificação consistente, basta acrescentar
GZIP=-n
assim:Como isso funciona: O Tar pode aceitar opções gzip usando uma
GZIP
variável de ambiente temporária , como acima. Como Valter disse, o tar usa gzip, que por padrão coloca um carimbo de data e hora no arquivo. Isso significa que você obtém uma soma de verificação diferente ao compactar os mesmos arquivos. A-n
opção desativa esse carimbo de data / hora.fonte
Eu também tive esse problema, para fazer o gzip não alterar o carimbo de data e hora, use
gzip -n
-n, --no-name não salva ou restaura o nome e a data e hora originais
Exemplo:
fonte
Desci na toca do coelho depois que as outras respostas falharam e consegui descobrir que minha versão do tar (1.27.1 do repositório openSUSE 42.3 OSS) estava usando o
pax
formato de arquivo não determinístico por padrão, o que significa que mesmo sem compactação (e até mesmo definindo o mtime explicitamente) os arquivos criados com tar dos mesmos arquivos seriam diferentes:Observe que a saída acima difere, mesmo que nenhuma compactação esteja sendo usada ; o conteúdo do arquivo descompactado (gerado pela execução do tar duas vezes no mesmo conteúdo) é diferente; portanto, o conteúdo compactado também será diferente mesmo quando usado
GZIP=-n
como outras respostas sugeremPara contornar isso, você pode especificar
--format gnu
:Isso funciona com a sugestão sobre o gzip acima:
No entanto, além de razões válidas para preferir melhores formatos de compactação do que o gzip , você pode considerar usar o xz (que tar também suporta com os sinalizadores
--xz
ou em-J
vez de-z
), porque você economiza um passo aqui; o comportamento padrão dexz
é gerar a mesma saída compactada quando o conteúdo não compactado for o mesmo; portanto, não há necessidade de especificar uma opção comoGZIP=-n
:fonte