Сборка пакетов под различные дистрибутивы имеет свои особенности. Речь не только про отличия типов пакетов, но и про детали сборки в родственных по формату пакетов дистрибутивах. В этом материале изложен опыт сборки простого rpm-пакета в системе ALT Linux. Материал может быть удобен как справочная страница при изучении темы сборки rpm-пакета инструментом rpmbuild в ОС «Альт».
Пакет
Пакет в Linux — это архив с программой или набором файлов, готовых для установки в системе Для работы с пакетами используется система управления пакетами. В системе «Альт» — это RPM (на низком уровне) и apt-get как обвязка над RPM.
Что находится в RPM-пакете?
Файлы программы — то, что будет установлено (например, изображения, конфигурация, библиотеки, исполняемые файлы).
Метаданные — информация о пакете:
-
Имя программы.
-
Версия программы.
-
Зависимости — указания на программы, необходимые для установки приложения (Requires), и программы для сборки пакета (BuildRequires).
Скрипты — команды, которые выполняются до или после установки, обновления или удаления пакета.
Зачем понадобились пакеты?
Пакеты в Linux упрощают установку и удаление программ. Вместо ручного копирования файлов в нужные каталоги удобнее установить пакет одной командой, которая автоматически разложит все составляющие по каталогам. Также пакет удобен как единица хранения. Хранилище пакетов ещё называется репозиторием пакетов.
Что нужно делать по шагам
Чтобы собрать пакет, понадобится:
-
проверить, если возможно, работоспособность кода;
-
установить набор инструментов для сборки;
-
подготовить рабочее пространство сборки;
-
подготовить исходные данные;
-
составить spec-файл;
-
проверить сборку с подготовленным spec-файлом;
-
собрать пакет инструментом rpmbuild.
Локальная сборка изображений инструментом rpmbuild
Соберём для примера пакет с каталогом изображений для обоев рабочего стола.
1) Создадим рабочее пространство.
$ mkdir -p ~/RPM/{BUILD,SRPMS,RPMS,SOURCES,SPECS}
$ su-
# apt-get install rpm-build
2) Выберем название для нашего пакета и spec’а wallpaper-moon25. Spec рекомендовано называть так же как пакет. Создадим spec-файл проекта и внесём инструкции. Или заполним секции spec-файла для нашего пакета по образцу.
$ touch wallpaper-moon25.spec
В секциях тела spec-файла описан процесс сборки и установки пакета. Для удобства команды записывают с помощью макросов. Макросы сокращают объём указанных команд, упрощают восприятие spec-файла и взаимодействие разработчиков при работе с одним пакетом. Расшифровать макросы можно в терминале.
$ rpm —eval %buildroot
-
В первой секции %prep производится распаковка архива с исходным кодом и формируется директория с исходными данными. Макросы %setup и %patch значительно упрощают эти функции. Макрос %setup переходит в каталог ~/RPM/BUILD/ и сначала чистит каталог от предыдущей сборки, затем распаковывает архив с исходными данными.
-
В секции %build выполняются команды, необходимые для сборки. В некоторых случаях, например, когда проект состоит из изображений, компиляция не нужна, поэтому эту секцию можно опустить.
-
Скрипт %install отвечает за выполнение всего необходимого для фактической установки нового программного обеспечения, здесь используется макрос %buildroot.
-
Секция %files содержит список путей и файлов, которые будут упакованы в rpm-пакет и в дальнейшем установлены в систему.
-
Секцию журнала изменений заполним датой, своими данными и кратким описанием сделанного. Для редактирования подойдут редакторы vim, mc.
Макрос %buildroot секции %install даёт возможность проверить корректность расположения файлов программы в системе до этапа формирования пакета. Как если бы файлы, необходимые для запуска и работы приложения, были распределены в файловой системе компьютера по инструкции spec. Только раcпределение файлов происходит во временном каталоге, процессы в котором изолированы от основной системы.
Технически %buildroot станет корнем для файловой структуры, которая будет содержаться в готовом RPM-пакете. То есть файл конфигурации, который необходимо скопировать в /etc/folder/, будет временно размещен в /tmp/.private/user/%{name}-buildroot/etc/folder.
По завершении сборки директория %buildroot очищается. А файлы с указанием путей упаковываются в пакет.
3) Сформируем архив из исходных данных — имя архива должно соответствовать инструкциям в spec-файле:
Source: %name-%version.tar
Имя архива должно соответствовать названию каталога исходных данных. Поэтому переименуем каталог по типу «имя-версия» и создадим архив.
$ mv wallpaper-moon25/ wallpaper-moon25-1.0
$ tar cvf wallpaper-moon25-1.0.tar wallpaper-moon25-1.0
Разместим подготовленный архив в директории для исходных данных и spec — в каталоге для инструкций в базовой структуре RPM.
$ cp wallpaper-moon25-1.0.tar ~/RPM/SOURCES/
$ cp wallpaper-moon25.spec ~/RPM/SPECS/
И запустим сборку.
$ rpmbuild -ba wallpaper-moon25.spec
Процесс сборки завершился успешно. Пакет, собранный на отдельной рабочей станции, подойдёт для установки в данной локальной среде.
Итого
В этом материале мы разобрали в общих чертах устройство пакетов типа rpm в системе ALT Linux, установили необходимые утилиты. Посмотрели, из каких компонент собирается пакет — tar‑архив, spec‑файл. И выполнили простой пример — собрали пакет с коллекцией изображений.
Благодарю за помощь в создании материала @Soviet_Anton
ссылка на оригинал статьи https://habr.com/ru/articles/861746/
Добавить комментарий