2011-01-21 2 views
1

Я пытаюсь создать самораспаковывающийся скрипт, используя метод обсуждается здесь: http://www.linuxjournal.com/node/1005818Создание самораспаковывающийся Баш скрипт для Linux с помощью Ant на Windows,

Использование ANT (на окнах) Я создаю архив полезной нагрузки с помощью задачи TAR (сжатие gzip), и concat скрипт и tar, используя следующую задачу CONCAT.

<concat destfile="${output}/selfextract.bsx" 
      append="true" 
      eol="lf"> 
    <fileset file="${installer}/decompress"/> 
    <fileset file="${output}/payload.tar.gz"/> 
</concat> 

Файл создается, и, как представляется, содержат архивные данные, но при запуске на нашем Red Hat машины Gzip жалуется на «недействительные сжатые данные --format нарушенных».

Неужели кому-то это удалось?

+0

Мой первый инстинкт, когда проблема включает в себя смесь Windows, и Linux является то, что линия окончаний являются неправильными. Вы пытались запустить 'dos2unix' в файле сценария? Параметр 'eol' влияет на все строки во всех файлах или только на грани конкатенации? –

ответ

1

Если вы не используете аргумент fixlastline (выключено по умолчанию), то eol не используется.

Вероятно, у вас есть дополнительная строка в конце вашего сценария «распаковать» после строки __ARCHIVE_BELOW__. У вас не может быть никаких лишних (даже пустых) строк, или вы будете передавать эти байты в tar. Это может быть вызвано, по словам Денниса, проблемами с eol, но у вас должен быть awk, который не является GNU, чтобы решить эту проблему.

Простой способ подтверждения - изменить tail на перенаправление на файл вместо tar, затем шестнадцатеричный ввод первых нескольких байтов исходного tar и выходного tar, чтобы увидеть, какие дополнительные (или отсутствующие) байты туда попадают.

Последнее, что нужно проверить - вам нужно установить binary в concat.

+0

Спасибо за помощь - в конце концов, речь шла о eol в скрипте распаковки, что было хорошим советом. Также двоичный вариант. –

1

Решенный.

Более высокий в сценарии ANT, я использовал задачу FixCRLF с eol="unix" на распаковке.sh. По умолчанию эта задача добавляет дополнительную строку новой строки в конец файла, если вы не добавите fixlast="false".

Я также добавил атрибут binary="yes" к concat.

Моя ошибка не включает остальную часть сценария и спасибо за помощь.

Final Код:

<concat destfile="${output}/selfextract.bsx" 
     binary="yes"> 
    <fileset file="${installer}/decompress"/> 
    <fileset file="${output}/payload.tar.gz"/> 
</concat> 

 Смежные вопросы

  • Нет связанных вопросов^_^