Сборка rpm пакета с помощью rpmbuild
Содержание
Подготовка к сборке rpm-пакетов
Для сборки rpm-пакета в системе должен быть установлен rpm-build. Проверить его наличие можно следующей командой:
# rpmbuild --version
Если система возвращает: rpmbuild: команда не найдена, значит rpm-build не установлен. Для установки необходимо выполнить следующую команду:
# sudo yum install rpm-build
Структура команды для сборки должна выглядеть так:
rpmbuild [ПАРАМЕТР…]
Основные параметры сборки:
• -ba – Сборка исходного(.src.rpm) и двоичного(.rpm) пакетов
• -bb – Сборка только двоичного пакета(.rpm)
• -bs – Сборка только пакета с исходниками(.src.rpm)
Остальные параметры можно посмотреть с помощью команды:
$ rpmbuild --help
Подготовка структуры каталогов
Для сборки пакетов в домашнем каталоге пользователя необходимо создать каталог rpmbuild, в которой должны быть следующие подкаталоги: BUILD, RPMS, SOURCES, SPECS, SRPMS. Это можно сделать вручную или командой:
# rpmdev-setuptree
В итоге должна получиться следующая структура:
/home/user/rpmbuild/
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
Подготовка spec-файла
Следующий необходимый элемент — это spec-файл, своего рода инструкция, по которой rpm-build производит сборку пакета.
Структура spec-файла подразделяется на заголовки и секции тела.
Name — базовое имя собираемого пакета, которое должно совпадать с именем spec-файла.
Version — номер версии пакета.
Release — релиз-номер пакета. Обычно устанавливают начальное значение в 1% {? Dist} и увеличивают его с каждым новым выпуском пакета.
Summary — краткое однострочное описание пакета.
License — лицензия, согласно которой распространяется пакет.
URL — полный URL для получения дополнительной информации о программе. Чаще всего это веб-сайт исходного проекта.
Source0 — путь или URL-адрес заархивированных файлов исходного кода (тарболов). При необходимости можно добавить дополнительные источники SourceX, увеличивая число каждый раз, например: Source1, Source2, Source3 и т.д.
Patch0 — патчи и исправления для исходного кода. Патчей может быть несколько, как и исходников. Patch1, Patch2, Patch3 и т.д.
BuildArch — архитектура, под которую будет собран пакет. Если пакет не зависит от архитектуры, например, он написан полностью на интерпретируемом языке программирования, необходимо установить значение BuildArch: noarch. Если значение не установлено, то пакет наследует архитектуру системы, в которой он собирается.
BuildRequires — раздел, в котором через пробелы или запятые перечисляются все зависимые пакеты, необходимые для сборки нашего пакета.
%description — полное описание собираемого пакета. Может занимать несколько строк и может быть разбито на абзацы.
%prep — команда или серия команд для подготовки исходного кода к сборке, например, распаковка архива в Source0. Здесь могут находиться bash-скрипты.
%build — команды или серия команд из данной секции отвечают за непосредственную сборку пакета.
%install — команда или серия команд из данной секции отвечают за то, чтобы сделать собранный пакет полностью готовым к установке на пользовательскую систему.
%files — список файлов, необходимых для сборки пакета.
%changelog — журнал изменений, произошедших с пакетом от релиза к релизу.
После того, как spec-файл будет готов, его необходимо переместить в каталог SPECS, а исходные коды собираемого пакета, тарболы, в каталог SOURCES.
Пример spec-файла
Name: example Version: 1.0 Release: 1%{?dist} Summary: Example project License: GPLv3+ URL: https://www.example.com/%{name} Source0: https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz Patch0: example.patch BuildRequires: gcc BuildRequires: make %description The long-tail description for our Example project %prep %setup -q %patch0 %build make %{?_smp_mflags} %install %make_install %files %license LICENSE %{_bindir}/%{name} %changelog * Tue Jan 13 2020 User Name <example@example.org> - 1.0-1 - First example package
Сборка пакета
Теперь можно приступать непосредственно к сборке пакета. Находясь в каталоге SPECS необходимо выполнить следующую команду:
# rpmbuild -ba ваш_spec_файл.spec
Результатом выполнения данной команды (если на предыдущих этапах всё было сделано правильно) будет собранный пакет, и в каталоге RPMS появятся бинарный пакет (ваш_пакет.rpm), а в каталоге SRPMS — исходник (ваш_пакет.src.rpm).
Если на выходе нужно получить только .rpm файл или только .src.rpm, то -ba необходимо заменить на -bb или -bs соответственно.