Как правильно извлечь .tar.gz с md5.sum на Solaris 10

Как правильно извлечь .tar.gz с md5.sum на Solaris 10

Я пытаюсь извлечь gcc-4.9.0.tar.gz, скачанный с одного из зеркал gcc. Чтобы проверить подпись md5 перед тем, как я его распакую, я сделал

digest -a md5 -v gcc-4.9.0.tar.gz

который дал

md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8

Это совпадает с md5.sum в каталоге, загруженном из источника.

Тогда я сделал

gzip -dc gcc-4.9.0.tar.gz | tar xvf -

Добыча началась, но вскоре прекратилась

 tar: directory checksum error

Я также пробовал сжимать и распаковывать архивы по отдельности, вот так

 gunzip gcc-4.9.0.tar.gz

Затем

tar -xvf gcc-4.9.0.tar

но он также завершился ошибкой контрольной суммы.

Пожалуйста, как мне решить эту проблему?

решение1

Похоже, что архив tar поврежден или не соответствует стандарту.

Обратите внимание, что я скачал архив как образ bz2 и не испытал никаких проблем с его использованием bzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -.

Распакованный архив имеет контрольную сумму md5: 6b8f599053a52e7c2076485d1ad3e747.

Сейчас я извлекаю файл .gz, посмотрим, что получится...

Хорошо, вот контрольная сумма md5 из gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8, которая совпадает с той, которую вы видите.

Обратите внимание, что проблема обычно возникает, когда архив создается с помощью gtar, но в редких случаях приводит к появлению directory checksum error.

Если вы хотите лучше понять, что происходит, я рекомендую вам использовать программу, tartestкоторая идет в комплекте star.

Последние новости можно найти schilytoolsздесь:

http://sourceforge.net/projects/schilytools/files/

скомпилируйте и запустите программу tartest/OBJ/*/tartest < gcc-4.9.0.tar.

Я сделал это и обнаружил, что причина в том, что архив использует специфичный для поставщика GNU «тип файла» «L» в заголовке tar.

ВАЖНО: если бы GNU tar был наполовину стандартно совместимым или хотя бы наполовину безошибочным, эта проблема не возникала бы, поскольку имя файла в вопросе идеально вписывалось в схему имен POSIX.1-1988 100+255. Так что это еще один намек на то, почему людям следует избегать использования GNU tar вообще.

Рекомендую использовать star.

Каждая отдельная функция starполностью контролируется структурой описания свойств. Если вы укажете формат архива, starникогда не будет создано содержимое архива, связанное с другим форматом архива.

Если вы, например, позвоните:

star -c -f out.tar -Hustar somedir

starбудет использовать формат архива, полностью соответствующий POSIX.1-1988, и в случае, если файл не помещается в этот формат архива, starвыведет предупреждение вместо того, чтобы архивировать файл нестандартными методами.

Кстати: Вот набор изменений, в который Sun добавила поддержку этой уникальной функции поставщика:

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 

решение2

Вам необходимо использовать gtar, он обычно предустановлен вместе с пакетом SUNWgtar:

gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0

У родного Solaris unpatched tar могут быть проблемы с файлами, созданными с помощью GNU tar. Смотрите ответ @schily, почему.

Связанный контент