Autotools - tar Это не похоже на tar-архив

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

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 и все еще ту же проблему.

Любые идеи, что может быть проблемой?

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

На самом деле это может произойти, когда сервер, который вы загружаете, применяет другой раунд 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 выглядит "слишком двоичным", у вас есть файл с двойной кодировкой на руках.