Что необходимо для сборки rpm пакета
Содержание
RPM пакет
RPM-пакет — это просто файл, содержащий другие файлы и информацию о них, необходимую для системы. Менеджер пакетов rpm использует эти метаданные для определения зависимостей, места установки файлов и другой информации.
Существует два типа rpm-пакетов:
- SRPM (исходники с расширением .src.rpm)
- RPM (бинарный файл с расширением .rpm)
Они имеют разное содержимое и служат для разных целей.
SRPM обязательно содержит исходный код, опционально — патчи и spec-файл, который описывает, как собрать исходный код в бинарный RPM.
Бинарный RPM содержит бинарные файлы, созданные из исходников и патчей, если таковые имелись.
Сборку rpm-пакетов крайне нежелательно проводить с правами суперпользователя (root). Настоятельно рекомендуется все манипуляции производить с правами непривилегированного пользователя, поскольку при сборке с правами root имеется высокая вероятность повреждения системы.
Сборка пакетов выполняется с помощью утилиты rpmbuild или mock. Также могут потребоваться пакеты gcc/g++ и make (если они ещё не установлены), поэтому для их установки выполняем команду:
$ sudo yum install gcc make
• gcc - компилятор языка программирования Си.
• g++ - компилятор языка программирования C++.
• make - утилита для организации сборки нескольких файлов.
Подготовка структуры каталогов
Для сборки пакетов в домашнем каталоге пользователя необходимо создать каталог rpmbuild, в котором должны быть следующие подкаталоги: BUILD, RPMS, SOURCES, SPECS, SRPMS. Это можно сделать вручную или командой:
$ rpmdev-setuptree
или
$ mkdir ~/rpmbuild $ mkdir ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
В текущем каталоге должна появиться папка rpmbuild — а в ней:
• BUILD — содержит все файлы, появляющиеся при сборке пакета.
• RPMS — здесь появятся готовые бинарные пакеты (расширение .rpm).
• SOURCES — здесь должны находиться исходники, из которых и будут собираться RPM-пакеты.
• SPECS — папка для хранения spec-файла, который описывает процесс сборки.
• SRPMS — здесь находятся пакеты с исходниками (расширение .src.rpm).
Подготовка исходников
Исходники должны находиться в папке SOURCES и содержать тарболы(архивы) и патчи(при необходимости). Тарболы содержат файл с исходным кодом программы (например, код, написанный на языке Си или С++ с соответствующим расширением) и makefile (файл, содержащий инструкцию по компиляции и линковке кода с помощью утилиты make).
Сборка = компиляция (файл с исходным кодом -> объектные файлы) + линковка (объектные файлы -> исполняемый файл).
Исходники также можно взять из открытого источника, указав при этом сайт в spec-файле.
Подготовка spec-файла
Следующий необходимый элемент — это spec-файл(файл конфигурации), инструкция, по которой происходит сборка пакета при помощи утилиты rpm-build или mock. Spec-файл должен находиться в папке SPECS.
Структура 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-файла
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
После того, как spec-файл будет готов, его необходимо переместить в каталог SPECS, а исходные коды собираемого пакета, тарболы, в каталог SOURCES.
Всё готово для сборки пакета. Если вы хотите собрать пакет с помощью rpmbuild, то смотрите здесь