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
для конкретного пакета:
$ 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-файл используется для сборки множества пакетов.