Как работают бинарные установщики Linux (.bin,.sh)?

Некоторое программное обеспечение (например, NetBeans IDE) отправляет установщиков Linux в файлы .sh. Любопытно, как именно они "упаковывают" всю IDE в "оболочку script", я открыл файл в редакторе. Я видел некоторый простой текстовый код сценария оболочки, а затем некоторую случайную тарабарщину, которую я считаю "двоичным" или не-открытым текстом.

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

Любое понимание этого?

Ответ 1

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

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

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

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

Тогда:

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 и запустит установку script.

Ответ 2

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

Из примечаний авторов.

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

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

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

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

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

Ответ 4

GNU sharutils:

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

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

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

Ответ 5

Есть и другие/коммерческие разработчики установщика программного обеспечения (например, InstallAnywhere), у них в основном есть своя собственная версия shar/makeelf.

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

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