Spec-файл, сокращение от "файл спецификации", определяет все действия утилиты rpmbuild, которые должны быть выполнены при построении приложения, так же как и все действия, необходимые при установке/удалении приложения. Каждый src.rpm-пакет имеет в своем составе spec-файл для последующей пересборки пакета.
Spec-файл - это текстовый файл. Соглашение об именовании предлагает называть spec-файл таким образом: имя_пакета.spec.
Текст внутри spec-файла имеет специальный синтаксис. Синтаксические определения имеют значения, задающие порядок сборки, номер версии, информацию о зависимостях и вообще всю информацию о пакете, которая может быть впоследствии запрошена из БД RPM.
8.2.3.1 Секция общей информации (introduction)
Секция общей информации содержит сведения о пакете, которые после его установки могут быть запрошены командой rpm -qi имя_пакета. Например:
Summary: java source to bytecode compiler Summary(ru): Исходный код компилятора байт-кода java %define version 1.17 Copyright: IBM Public License, http://ibm.com/developerworks/oss/license10.html Group: Development/Languages Name: jikes Prefix: /usr Provides: jikes Release: 1 Source: jikes-%{version}.tar.gz URL: http://ibm.com/developerworks/opensource/jikes Version: %{version} Buildroot: /tmp/jikesrpm %description The IBM Jikes compiler translates Java source files to bytecode. It also supports incremental compilation and automatic makefile generation, and is maintained by the Jikes Project: http://ibm.com/developerworks/opensource/jikes/ %description -l ru Компилятор Java производства IBM Jikes осуществляет преобразование исходного кода Java в байт-код. Он поддерживает инкрементную компиляцию и автоматическую генерацию Makefile. Мантейнер - Jikes Project: http://ibm.com/developerworks/opensource/jikes/ |
Из этого примера, в общем, понятно, как устроена секция общей информации. Этот пример не следует всем требованиям RPM. Например, тэг Copyright в настоящее время утратил значение и не используется, номер версии можно задать непосредственно, в примере задается через определение макроса.
Для отслеживания изменений требований от версии к версии rpm можно проанализировать spec-файлы пакетов современных сборок и сравнить их с прежними сборками.
8.2.3.2 Секция prep
Секция подготовки отвечает за команды, необходимые для начала сборки. Например, если в SOURCES положен тарболл проекта, его необходимо распаковать. В секции указываются для этого соответствующие макросы rpm:
%prep %setup -q |
Секция начинается со строки %prep. Этот пример использует макрос %setup, который умеет распаковывать компрессированные архивы. Как правило, это единственная строка в данной секции.
8.2.3.3 Секция build
Секция build содержит команды сборки ПО. Обычно здесь присутствует всего несколько команд, например:
%build ./configure CXXFLAGS=-O3 \ --prefix=$RPM_BUILD_ROOT/usr make |
В данном примере задействованы два параметра скрипта configure (флаги оптимизации компилятора и имя временного каталога сборки) и команда make (без параметра, то есть для цели all). Секция начинается строкой %build.
8.2.3.4 Секция install
Секция содержит команды установки файлов пакета в систему. Например:
%install rm -rf $RPM_BUILD_ROOT make install |
На данной стадии очищаем каталог сборки и копируем файлы пакета в каталог, определенный опцией --prefix. Если не очистить каталог сборки, файлы от прежних сборок могут нарушить чистоту установки. Секция начинается строкой %install.
8.2.3.5 Секция clean
Команды в этой секции вычищают файлы, созданные на других стадиях:
%clean rm -rf $RPM_BUILD_ROOT |
Секция начинается строкой %clean.
8.2.3.6 Секция files
И, наконец, команды в секции files задают списки файлов и каталогов, которые с соответствующими атрибутами должны быть скопированы из дерева сборки в rpm-пакет и затем будут копироваться в целевую систему при установке этого пакета. Например:
%files %defattr(-,root,root) /usr/bin/jikes %doc /usr/doc/jikes-%{version}/license.htm %doc /usr/man/man1/jikes.1* |
Секция начинается строкой %files. Макрос %doc отмечает файлы документации. Это позволяет составить документацию из подходящих файлов проекта.
После окончания редактирования spec-файла осталось поместить его в каталог SPECS под /usr/src/redhat, а тарболл с исходным кодом в SOURCES. Все готово для сборки rpm.
Далее - Сборка пакета с помощью утилиты rpmbuild
Назад - Размещение исходного кода в дереве сборки
Содержание