Как работают бинарные установщики 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
.
Ответ 3
Добавить двоичную полезную нагрузку в сценарии командной оболочки
Ответ 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. Вы также можете использовать этот инструмент для своих собственных проектов.