Модуль 2: Анатомия SPEC-файла
Детальный разбор «рецепта» пакета: теги, секции, макросы, зависимости.
SPEC-файл — это «рецепт» пакета. Он описывает что собирать, как собирать и какие файлы должны попасть в итоговый RPM.
Цели модуля
После изучения этого модуля вы будете:
- Понимать структуру SPEC-файла: преамбула и тело
- Знать все основные теги и их назначение
- Правильно указывать источники и патчи
- Грамотно описывать зависимости
- Использовать макросы вместо жёстко заданных значений
- Вести корректный changelog
Структура SPEC-файла
SPEC-файл состоит из двух частей:
┌─────────────────────────────────────┐
│ ПРЕАМБУЛА (Preamble) │
│ Метаданные: Name, Version, ... │
│ Зависимости: BuildRequires, ... │
├─────────────────────────────────────┤
│ ТЕЛО (Body) │
│ %description — описание │
│ %prep — подготовка исходников │
│ %build — компиляция │
│ %install — установка в buildroot │
│ %check — тесты │
│ %files — список файлов пакета │
│ %changelog — история изменений │
└─────────────────────────────────────┘
Содержание модуля
-
Преамбула: все теги с примерами
Name, Version, Release, Summary, License, URL и другие обязательные и опциональные теги. -
Source и Patch: источники и патчи
Откуда брать исходники, как называть, как применять патчи. -
Зависимости: BuildRequires и Requires
Зависимости для сборки и для работы, автоматическое определение, Provides/Conflicts/Obsoletes. -
Секции сборки: %prep, %build, %install, %check
Что происходит на каждом этапе сборки, стандартные макросы секций. -
Секция %files: макросы путей и атрибуты
Как указывать файлы пакета, атрибуты, %doc, %license, %config. -
Макросы: стандартные, системные, свои
Переменные и макросы, условные конструкции, определение собственных макросов. -
Ведение %changelog
Формат записей, что документировать, автоматизация.
Минимальный SPEC-файл
Для понимания общей картины — вот минимальный рабочий SPEC:
Name: hello
Version: 2.12.1
Release: 1%{?dist}
Summary: The classic greeting program
License: GPL-3.0-or-later
URL: https://www.gnu.org/software/hello/
Source0: https://ftp.gnu.org/gnu/hello/hello-%{version}.tar.gz
BuildRequires: gcc
BuildRequires: make
%description
The GNU Hello program produces a familiar, friendly greeting.
%prep
%autosetup
%build
%configure
%make_build
%install
%make_install
%files
%license COPYING
%doc README NEWS
%{_bindir}/hello
%{_mandir}/man1/hello.1*
%{_infodir}/hello.info*
%changelog
* Mon Feb 03 2025 Your Name <your@email.com> - 2.12.1-1
- Initial package
В следующих темах мы детально разберём каждую часть.
Следующий модуль
После освоения SPEC-файла переходите к Модулю 3: Сборочное окружение — там мы настроим рабочее место и соберём первый пакет.
Преамбула: все теги с примерами
Name, Version, Release, Summary, License, URL и другие теги преамбулы SPEC-файла.
Source и Patch: источники и патчи
Откуда брать исходники, как называть архивы, как применять патчи.
Зависимости: BuildRequires и Requires
Зависимости для сборки и работы, автоматическое определение, Provides/Conflicts/Obsoletes.
Секции сборки: %prep, %build, %install, %check
Что происходит на каждом этапе сборки, стандартные макросы секций.
Секция %files: макросы путей и атрибуты
Как указывать файлы пакета, атрибуты, %doc, %license, %config.
Макросы: стандартные, системные, свои
Переменные и макросы RPM, условные конструкции, определение собственных макросов.
Ведение %changelog
Формат записей changelog, что документировать, автоматизация.