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


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

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

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

5 62

5 ответов:

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

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

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

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

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

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

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

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

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

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

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

GNU sharutils:

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

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

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

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

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

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