Предварительная настройка операционной системы

Первым делом нужно установить несколько важных пакетов:

С помощью одной лишь этой команды мы загружаем в систему утилиту для скачивания файлов по сети, софт для сборки установочного пакета, компилятор СИ, утилиту для сборки исходников, а также программу для создания рабочей среды в виде каталогов. Всё это нам потребуется дальше.

Все указанные в команде пакеты нужны для нашего варианта RPM сборки. В вашем случае могут потребоваться и другие зависимости, просто пропишите их через пробел. Если нужных пакетов в системе не окажется, вы получите сообщение об ошибке при первой же попытке выполнить сборку.

Последний шаг предварительной настройки операционной системы – создание отдельного пользователя. Делать это от имени пользователя с правами доступа уровня root не стоит, так как любая ошибка при указании путей может привести к тому, что какие-то файлы или даже целые директории будут потеряны. Итак, выполните команду:

Таким образом мы создали пользователя creator и отдельный домашний каталог для него. Чтобы все дальнейшие действия будем совершать от его имени, пропишите:

Настройка окружения пользователя

Убедитесь, что находитесь в нужном каталоге. В качестве этого каталога может выступать абсолютно любая папка, созданная для этой цели. В рассматриваемом примере используем домашнюю директорию пользователя creator, которую создали ранее.

Чтобы удостовериться, что находитесь в нужной директории, пропишите команду:

Если консоль выдаст вам сообщение «/home/creator», вы в правильном месте. Если видите что-то другое, просто перейдите в домашний каталог с помощью команды:

И затем создайте структуру каталогов для сборки:

Теперь в нашем домашнем каталоге пользователя creator появится папка rpmbuild, содержащая такую структуру:

  • BUILD — здесь расположены файлы, появляющиеся в процессе создания RPM-пакета.
  • RPMS — здесь будут лежать готовые пакеты.
  • SOURCES — содержит исходники для сборки RPM-пакетов.
  • SPECS — здесь содержатся файлы с описанием сборки.
  • SRPMS — содержит исходники RPM-файлов.

Теперь мы с вами готовы к загрузке исходника и его подготовке к дальнейшим процессам.

 

test

2.2. Создание двоичного файла из .sh

 

Shell Script Compiler, или SHC, — это инструмент, который кодирует или шифрует скрипты. Таким образом он предотвращает нежелательные изменения и скрывает исходный код. В нашем примере мы будем использовать универсальный компилятор оболочки. Существует множество других инструментов для компиляции или обфускации скриптов.

Прежде всего давайте создадим скрипт sum.sh, который будет возвращать сумму введенных чисел:

 

Прежде чем запускать его, нам нужно изменить права доступа, чтобы его можно было запустить:

Далее давайте загрузим и установим последнюю версию SHC. Затем скомпилируем скрипт и преобразуем его в двоичный файл:

Будут созданы два новых файла: sum.sh.x.c, версия скрипта на языке C, и sum.sh.x, двоичная версия. Теперь мы можем запустить sum.sh.x как двоичный файл:

3. Самораспаковывающийся установщик

 

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

Однако это не единственный способ управления установкой. Добавление двоичной полезной нагрузки или архивного файла в сценарий оболочки — один из способов распространения пакета. Самораспаковывающийся установщик извлекает эту полезную нагрузку и копирует содержимое в соответствующее место.

 

В этой статье мы рассмотрим, как использовать файлы .sh в качестве установщика. Для примера создадим исходный пакет:

Затем соберите и заархивируйте демонстрационный пакет:

Теперь давайте создадим сценарий установки installer.sh:

Затем добавьте архив в installer.sh:

Теперь сделайте его исполняемым:

И наконец, наш установщик готов. Мы можем запустить его, чтобы установить наш пакет в ~/:

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

3.1. Использование makeself

 

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

 

Синтаксис:

В этом примере у нас есть исходный пакет /demo-app, и мы собираемся создать установщик под названием demo-pkg.run:

Мы можем заменить echo «Извлечение выполнено» нашим сценарием запуска. Этот сценарий запуска может делать всё, что может делать любой сценарий оболочки с файлами пакета на диске; он может переместить пакет в соответствующую директорию.