
Estoy intentando extraer un gcc-4.9.0.tar.gz descargado de uno de los sitios espejo de gcc. Para verificar la firma md5 antes de comprimirlo, lo hice
digest -a md5 -v gcc-4.9.0.tar.gz
que dio
md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8
Esto coincide con md5.sum en el directorio descargado de la fuente.
entonces lo hice
gzip -dc gcc-4.9.0.tar.gz | tar xvf -
La extracción comenzó pero pronto terminó con un
tar: directory checksum error
También intenté comprimir y descomprimir por separado así.
gunzip gcc-4.9.0.tar.gz
Entonces
tar -xvf gcc-4.9.0.tar
pero también terminó con un error de suma de comprobación.
Por favor ¿Cómo soluciono esto?
Respuesta1
Parece que el archivo tar está defectuoso o no cumple con el estándar.
Tenga en cuenta que obtuve el archivo como imagen bz2 y no tuve problemas con el uso bzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -
.
El archivo descomprimido tiene la suma de comprobación md5: 6b8f599053a52e7c2076485d1ad3e747.
Ahora estoy recuperando el archivo .gz, veamos qué obtengo...
Bien, aquí está la suma de comprobación md5 de gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8 que es la misma que ves.
Tenga en cuenta que el problema suele ocurrir cuando el archivo ha sido creado por gtar
, pero en casos excepcionales resulta en un archivo directory checksum error
.
Si desea comprender mejor lo que está pasando, le recomiendo que utilice el tartest
programa que viene con star
.
Obtenga lo último schilytools
de:
http://sourceforge.net/projects/schilytools/files/
compilar y luego ejecutar el programa tartest/OBJ/*/tartest < gcc-4.9.0.tar
.
Hice esto y descubrí que la razón es que el archivo utiliza un "tipo de archivo" 'L' específico del proveedor GNU en un encabezado tar.
IMPORTANTE: si GNU tar cumplía la mitad del estándar o al menos estaba libre de errores, este problema no ocurría ya que el nombre del archivo en cuestión encajaba perfectamente en el esquema de nombres POSIX.1-1988 100+255. Así que esta es otra pista de por qué la gente debería evitar el uso de GNU tar.
Recomiendo usar star
.
Cada característica star
está completamente bajo el control de una estructura de descripción de propiedad. Si especifica un formato de archivo, star
nunca creará contenido de archivo relacionado con un formato de archivo diferente.
Si llama, por ejemplo:
star -c -f out.tar -Hustar somedir
star
utilizará un formato de archivo POSIX.1-1988 100% compatible y, en caso de que haya un archivo que no quepa en ese formato de archivo, star
escribirá una advertencia en lugar de archivar el archivo utilizando métodos no estándar.
Por cierto: aquí está el conjunto de cambios, donde Sun agregó soporte para esta característica única del proveedor:
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
Respuesta2
Necesitas usar gtar, generalmente viene preinstalado con el paquete SUNWgtar:
gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0
El tar nativo de Solaris sin parches puede tener problemas con los archivos creados con GNU tar. Ver la respuesta de @schily por qué.