Skip to content

Spec-файл

Что такое Spec-файл

Spec-файл можно рассматривать как сценарий, который утилита rpmbuild использует для сборки RPM-пакета. Он сообщает системе сборки, что делать, определяя инструкции в разделах.

Разделы определены в Преамбуле (метаданные) и Основной части (тело сценария)

Пример Spec-файла

Данный пример взять из ALT Linux Wiki.

Name: sampleprog
Version: 1.0
Release: alt1

Summary: Sample program specfile
Summary(ru_RU.UTF-8): Пример спек-файла для программы

License: GPLv2+
Group: Development/Other
Url: http://www.altlinux.org/SampleSpecs/program

Packager: Sample Packager <sample@altlinux.org>

Source: %name-%version.tar
Patch0: %name-1.0-alt-makefile-fixes.patch

%description
This specfile is provided as sample specfile for packages with programs.
It contains most of usual tags and constructions used in such specfiles.

%description -l ru_RU.UTF-8
Этот спек-файл является примером спек-файла для пакета с программой. Он содержит
основные теги и конструкции, используемые в подобных спек-файлах.

%prep
%setup
%patch0 -p1

%build
%configure
%make_build

%install
%makeinstall_std
%find_lang %name

%files -f %name.lang
%doc AUTHORS ChangeLog NEWS README THANKS TODO contrib/ manual/
%_bindir/*
%_man1dir/*

%changelog
* Sat Sep 33 3001 Sample Packager <sample@altlinux.org> 1.0-alt1
- initial build

Разделы преамбулы

В этой таблице перечислены элементы, используемые в разделе преамбулы файла спецификации RPM:

ДирективаОпределение
NameБазовое имя пакета, которое должно совпадать с именем Spec-файла.
VersionВерсия upstream-кода.
ReleaseУказание номера сборки пакета при данной версии upstream-кода. Как правило, имя релиза начинается с alt1, а номер инкрементируется с каждым новым выпуском, например: alt1, alt2, alt3 и так далее. Сбросьте значение до alt1 при создании новой версии программного обеспечения.
SummaryКраткое, в одну строку, описание пакета.
LicenseЛицензия на собираемое программное обеспечение.
GroupКатегории, к которым относится пакет. Группа должна быть взята из файла /usr/lib/rpm/GROUPS, поставляемого вместе с пакетом rpm.
URLПолный URL-адрес для получения дополнительной информации о программе. Чаще всего это ссылка на GitHub upstream-проекта для собираемого программного обеспечения.
Source0Путь или URL-адрес к сжатому архиву исходного кода (не исправленный, исправления обрабатываются в другом месте). Должен указывать на доступное и надежное хранилище архива, например, на upstream-страницу, а не локальное хранилище сборщика. Можно указывать дополнительные директивы, инкрементируя индекс: Source1, Source2, Source3 и так далее.
Patch0Название патча, который при необходимости будет применён к исходному коду. Можно указывать дополнительные директивы, инкрементируя индекс: Patch1, Patch2, Patch3 и так далее.
BuildArchЕсли пакет не зависит от архитектуры, например, если он полностью написан на интерпретируемом языке программирования, установите для этого значение noarch. Если этот параметр не задан, пакет автоматически наследует архитектуру компьютера, на котором он собран, например x86_64.
BuildRequiresРазделённый запятыми или пробелами список пакетов, необходимых для сборки программы. Может быть несколько записей, каждая в отдельной строке в Spec-файле.
RequiresРазделённый запятыми или пробелами список пакетов, необходимых программному обеспечению для запуска после установки. Это его зависимости. Может быть несколько записей, каждая в отдельной строке в Spec-файле.
ExcludeArchЕсли часть программного обеспечения не может работать на определенной архитектуре процессора, данную архитектуру можно исключить

Директивы Name, Version и Release являются частями имени RPM-пакета. Эти директивы часто называют N-V-R или NVR, поскольку имена RPM-пакетов имеют формат NAME-VERSION-RELEASE.

Получить пример NAME-VERSION-RELEASE, выполнив запрос с использованием rpm для конкретного пакета:

shell
$ rpm -q rpmdevtools
rpmdevtools-8.10-alt2.noarch

Информация

rpmdevtools - это имя пакета, 8.10 - версия, alt2 - релиз. Последний маркер noarch - сведения об архитектуре.

В отличие от NVR, маркер архитектуры не находится под прямым управлением сборщика, а определяется средой сборки rpmbuild. Исключением является архитектурно-независимый пакет — noarch.

Составляющие основной части

В этой таблице перечислены элементы, используемые в теле файла спецификации RPM-пакета:

ДирективаОпределение
%descriptionПолное описание программного обеспечения. Это описание может занимать несколько строк и может быть разбито на абзацы.
%prepОдна или несколько команд для подготовки программного обеспечения к сборке, например, распаковка архива из Source0. Эта директива может содержать сценарий оболочки (bash-скрипт).
%buildОдна или несколько команд для трансляции программного обеспечения в машинный код (для компилируемых языков) или байт-код (для некоторых интерпретируемых языков).
%installРаздел, который во время сборки пакета эмулирует конечные пути установки файлов в систему. Одна или несколько команд для копирования требуемых артефактов сборки из %builddir (место сборка) в %buildroot (структура каталогов с файлами, подлежащими сборке). Обычно это означает копирование файлов из ~/rpmbuild/BUILD в ~/rpmbuild/BUILDROOT и создание необходимых подкаталогов. Выполняется только при создании (не при установке) пакета.
%checkОдна или несколько команд для тестирования программного обеспечения. Обычно включает модульные и другие тесты.
%filesСписок файлов, которые будут установлены в системе конечного пользователя.
%changelogСписок изменений для версии или релиза пакета.

Информация

Директива %setup в Sisyphus RPM использует флаг -q по умолчанию, поэтому %setup -q и %setup — полностью идентичны.

Если использовать конструкцию с флагом -v, то будет выведена дополнительная информация в логах сборки

Пример Spec-файла
Name: mypackage
Version: 1.0
Release: 1
Summary: Однострочное описание пакета.

%description
Общее описание пакета. Примерно 1 абзац.

%prep
# Подготовка исходных файлов для сборки

%build
# Компиляция и сборка пакета

%install
# Установка файлов в директорию сборки
install -D -m 0644 %{SOURCE1} %{buildroot}/путь/к/файлу/example.txt

%files
# Перечисление файлов и директорий, которые будут включены в пакет
%{buildroot}/путь/к/файлу/example.txt

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

Авторы

The avatar of contributor named as Valentin Sokolov Valentin Sokolov
The avatar of contributor named as x1z53 x1z53
The avatar of contributor named as Олег Щавелев Олег Щавелев

История изменений