Как работают бинарные установщики Linux (.bin, .sh)? - PullRequest
62 голосов
/ 05 июня 2009

Некоторое программное обеспечение (например, IDE NetBeans ) содержит установщики Linux в файлах .sh. Заинтересовавшись, как именно они «упаковывают» целую IDE в «скрипт оболочки», я открыл файл в редакторе. Я видел какой-то код сценария оболочки в виде простого текста, а затем какой-то случайный бред, который я считаю «бинарным» или непростым текстом.

Мне интересно, как они смешивают простые сценарии оболочки, а затем, вероятно, называют «не читаемые» вещи, которые будут двоичными файлами.

Есть идеи по этому поводу?

Ответы [ 5 ]

86 голосов
/ 05 июня 2009

По сути, это сценарий оболочки, добавленный к какому-либо сжатому архиву, такому как архив tar. Вы используете команду tail или sed на себе (переменная $0 в оболочке Bourne), чтобы удалить сценарий оболочки спереди и передать остальное unarchiver.

Например, создайте следующий скрипт как self-extracting:

#!/bin/sh -e
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup
exit

Команда sed, приведенная выше, удаляет все строки от первой строки файла до первой, которая начинается с «exit», а затем пропускает остальные. Если то, что начинается сразу после строки «exit», является файлом tar, команда tar извлечет его. Если это успешно, файл ./project/Setup (предположительно извлеченный из архива) будет выполнен.

Тогда:

mkdir project
echo "#!/bin/sh" > project/Setup
echo "echo This is the setup script!" >> project/Setup
chmod +x project/Setup
tar czf - project >> self-extracting

Теперь, если вы избавитесь от старого каталога project, вы можете запустить self-extracting, и он извлечет этот tar-файл и запустит скрипт установки.

52 голосов
/ 05 июня 2009

Возможно, вы захотите проверить makeself.sh

Из заметок авторов.

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

Архивы Makeself также включают контрольные суммы для самопроверки целостности (контрольные суммы CRC и / или MD5).

Сам скрипт makeself.sh используется только для создания архивов из каталога файлов. Результирующий архив фактически представляет собой сжатый (с использованием gzip, bzip2 или compress) TAR-архив с небольшой заглушкой сценария оболочки в начале. Эта небольшая заглушка выполняет все этапы извлечения файлов, запуска встроенной команды и удаления временных файлов, когда все закончится. Все, что пользователь должен сделать для установки программного обеспечения, содержащегося в таком архиве, - это «запустить» архив [то есть выполнить скрипт]

Я пытаюсь сделать код этого скрипта максимально переносимым, т. Е. Он не опирается на какие-либо специфические для bash функции, а вызывает только те команды, которые установлены в любой работающей UNIX-совместимой системе. Этот сценарий, а также создаваемые им архивы должны работать с любым вариантом Unix с любой совместимой оболочкой Bourne, при условии, конечно, что программы сжатия доступны.

Наконец, сам пакет makeself поставляется как самораспаковывающийся скрипт с именем makeself.run.

11 голосов
4 голосов
/ 05 июня 2009

GNU sharutils:

http://www.gnu.org/software/sharutils/

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

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

0 голосов
/ 15 мая 2013

Существуют также другие / коммерческие программы установки программного обеспечения (например, InstallAnywhere), у которых в основном есть своя собственная версия shar / makeself.

Netbeans имеет свой собственный механизм установки, и часть его, которая выполняет распаковку и запуск, выполняется в компоненте собственного запуска NBI: http://wiki.netbeans.org/NBINativeLaunchers

Создает архив оболочки (скрипта) для Linux / Unix / MacOS и собственный исполняемый файл для Windows. Вы также можете использовать этот инструмент для своих собственных проектов.

...