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