
Estou tentando extrair um gcc-4.9.0.tar.gz baixado de um site espelho do gcc. Para verificar a assinatura md5 nele antes de compactar, eu fiz
digest -a md5 -v gcc-4.9.0.tar.gz
que deu
md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8
Isso corresponde ao md5.sum no diretório baixado da fonte.
Então eu fiz
gzip -dc gcc-4.9.0.tar.gz | tar xvf -
A extração começou, mas logo terminou com uma
tar: directory checksum error
Eu também tentei compactar e descompactar separadamente assim
gunzip gcc-4.9.0.tar.gz
Então
tar -xvf gcc-4.9.0.tar
mas também terminou com um erro de soma de verificação.
Por favor, como resolvo isso?
Responder1
Parece que o arquivo tar está com defeito ou não é compatível com o padrão.
Observe que busquei o arquivo como imagem bz2 e não tive problemas ao usar o arquivo bzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -
.
O arquivo descompactado possui a soma de verificação md5: 6b8f599053a52e7c2076485d1ad3e747.
Agora estou buscando o arquivo .gz, vamos ver o que consigo...
OK, aqui está a soma de verificação md5 de gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8, que é a mesma que você vê.
Observe que o seu problema geralmente acontece quando o arquivo foi criado por gtar
, mas em casos raros resulta em um arquivo directory checksum error
.
Se você quiser entender melhor o que está acontecendo, recomendo que você use o tartest
programa que acompanha o star
.
Obtenha as últimas novidades schilytools
em:
http://sourceforge.net/projects/schilytools/files/
compile e execute o programa tartest/OBJ/*/tartest < gcc-4.9.0.tar
.
Eu fiz isso e descobri que o motivo é que o arquivo usa um "tipo de arquivo" 'L' específico do fornecedor GNU em um cabeçalho tar.
IMPORTANTE: se o GNU tar fosse parcialmente compatível com o padrão ou pelo menos parcialmente livre de erros, esse problema não acontecia porque o nome do arquivo em questão se encaixava perfeitamente no esquema de nomes POSIX.1-1988 100+255. Portanto, esta é outra dica de por que as pessoas deveriam evitar usar o GNU tar.
Eu recomendo usar star
.
Cada recurso star
está totalmente sob controle de uma estrutura de descrição de propriedade. Se você especificar um formato de arquivo, star
nunca criará conteúdo de arquivo relacionado a um formato de arquivo diferente.
Se você, por exemplo, ligar:
star -c -f out.tar -Hustar somedir
star
usará um formato de arquivo 100% compatível com POSIX.1-1988 e caso haja um arquivo que não caiba nesse formato de arquivo, star
grava um aviso em vez de arquivar o arquivo usando métodos não padrão.
A propósito: aqui está o conjunto de alterações, onde a Sun adicionou suporte para este recurso exclusivo do fornecedor:
changeset: 11995:caff1bd711f5
user: Rich Burridge <[email protected]>
date: Thu Mar 25 13:21:39 2010 -0700
description:
6202362 Solaris tar can't unpack files created with GNU tar
modified:
usr/src/cmd/tar/tar.c
Responder2
Você precisa usar o gtar, geralmente vem pré-instalado com o pacote SUNWgtar:
gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0
O tar sem patch do Native Solaris pode ter problemas com arquivos criados com o tar GNU. Veja a resposta de @schily por quê.