Создание самораспаковывающегося скрипта bash для linux с использованием Ant в Windows - PullRequest
1 голос
/ 21 января 2011

Я пытаюсь сгенерировать самораспаковывающийся скрипт, используя метод, описанный здесь: http://www.linuxjournal.com/node/1005818

Используя ANT (в Windows), я создаю архив полезной нагрузки, используя задачу TAR (сжатие gzip), и объединяю скрипт и 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 выдает «неверные сжатые данные - формат нарушен».

Кто-нибудь преуспел в этом раньше?

Ответы [ 2 ]

1 голос
/ 21 января 2011

решаемая.

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

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

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

Финальный код:

<concat destfile="${output}/selfextract.bsx" 
        binary="yes">
    <fileset file="${installer}/decompress"/>
    <fileset file="${output}/payload.tar.gz"/>
</concat>
1 голос
/ 21 января 2011

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

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

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

...