2010-07-25 5 views
16

После запуска make distcheck Получаю сообщение, что я успешно построил пакет и готов к распространению. Если я разорву tar.gz с tar -zxvf hello-0.2.tar.gz, он успешно извлекает все его содержимое. Однако, когда я пытаюсь извлечь их на разных машинах, я получаю:Autotools - tar Это не похоже на архив tar

tar: This does not look like a tar archive 
tar: Skipping to next header 
tar: Exiting with failure status due to previous errors 

Странно, что он работал раньше.

На машине я пытаюсь создать пакет, я обновил свой automake 1.10.1, autoconf 2.61, and tar 1.20 to automake 1.11.1, autoconf 2.65, and tar 1.23 и по-прежнему ту же проблему.

Любые идеи в чем проблема?

+8

Работает ли это: 'gzip -d hello-0.2.tar.gz', за которым следует:' tar -xf hello-0.2.tar' – SiggyF

+1

@SyggyF: Он действительно работает. Любые идеи, почему этот способ работает, а не другой? – denim69

ответ

14

Проблема не в сборке; проблема на целевых машинах.

Не все версии tar автоматически распознают декомпрессию для применения к сжатому файлу tar. Учитывая, что gunzip, за которым следует tar, действительно работает, то tar на вашей целевой машине является одним из таких. Версии tar в основных системах Unix (AIX, HP-UX, Solaris) не распознают сжатые tar-файлы автоматически. Те, что на Linux и MacOS X, делают.

Обратите внимание, что вы можете использовать:

gzip -dc hello-0.2.tar.gz | tar -xf - 

, чтобы избежать создания промежуточного несжатого файла.

+0

1. Является ли дефисом, в конце концов, только опечатка, или он что-то делает? 2. С помощью этого метода я получаю ошибку «tar: Архив сжат. Использовать -z option' 'tar: Ошибка не восстанавливается: выходить сейчас'. Если я добавлю «-z», он даст мне «tar: -z: Невозможно открыть: нет такого файла или каталога». – lindhe

+0

(1) Дефис в конце указывает, что входной файл является стандартным вводом ('-f -'). (2) У вас может быть сжатый файл, хотя это немного маловероятно. Вы можете попробовать «gunzip hello-0.2.tar.gz», а затем использовать «файл hello-0.2.tar», чтобы узнать, какой тип файла он считает. Какую версию «tar» вы используете, которая распознает, что архив сжат, но не распаковывает его? Если вы используете 'tar -xzf -', может быть, все в порядке. Если вы используете 'tar -xf -z', то вы говорите' tar', что файл для извлечения из '-z'. –

4

На самом деле это может произойти, когда сервер, который вы загружаете, применяет другой раунд GZip, а клиент, который вы использовали для загрузки файла, не читает/не уважает заголовок HTTP Content-Encoding и сохраняет полезную нагрузку HTTP, как это было на проводе.

Хотя файл имеет только расширение .tar.gz, это фактически .tar.gz.gz. после того, как вы запустите gunzip, как только файл получит расширение .tar, но все же на этот раз запуск команды tar. tar xf hello-0.2.tar распознает формат GZip и неявно запускает файл через gunzip еще раз перед извлечением.

Вы можете проверить это, выполнив head hello-02.tar.gz и head hello-02.tar. GZip - очень двоичный формат, тогда как tar - вполне читаемый человеком. Если файл .tar выглядит «слишком двоичным», у вас есть двукратно закодированный файл на ваших руках.

+1

Точно моя проблема. Большое спасибо :) – franzlorenzon