Основы программирования в Linux
Group: Applications/MediaЭту секция RPM-файла spec часто называют заголовком. В ней содержатся наиболее важные параметры
,NameиVersion. В нашем примере имя — myapp, номер версии — 1.0 и номер выпуска или сборки RPM-пакета — 1, т.к. эта ваша первая попытка создания RPM-пакета.ReleaseПараметр
применяется для облегчения графической инсталляции программ, сортируя тысячи приложений для системы Linux по типам. ЭлементGroupважен, если вы создаете пакет для одного дистрибутива Linux, например, Red Hat или SUSE Linux.DistributionНеплохо добавить в ваш файл spec комментарии. Как и сценарии командной оболочки, и make-файлы, команда
считает комментарием любую строку, начинающуюся с символаrpmbuild. Например:## Это строка комментария.Для того чтобы помочь пользователям решить, нужно ли им устанавливать ваш пакет, предоставьте секции
иSummary(обратите внимание на несогласованность RPM-синтаксиса, применяющего знак процента перед обозначением секции описания). Например, свой пакет вы можете описать следующим образом:%descriptionSummary: Trivial application%descriptionMyApp Trivial ApplicationA trivial application used to demonstrate development tools.This version pretends it requires MySQL at or above 3.23.Authors: Neil Matthew and Richard StonesСекция
может состоять (и обычно состоит) из нескольких строк.%descriptionФайл spec может содержать сопутствующую информацию и о том, какие возможности предоставляет ваш пакет, и о том, от чего он зависит. (Вы также можете определить, от чего зависит пакет исходных файлов, например, указать специальные заголовочные файлы, необходимые для компиляции.)
Параметр
определяет возможности, предоставляемые вашей системой. Например:ProvidesProvides: goodnessВ примере утверждается, что пакет предоставляет вымышленную функциональную возможность, именуемую
(ценные свойства). RPM-система также автоматически добавляет элементgoodnessк имени пакета, в данном случае myapp. Параметры Provides полезны в случае множественных пакетов, предоставляющих одну и ту же функциональную возможность. Например, пакет Web-сервера Apache предоставляет средство webserver. Другие пакеты, например Thy, могут предоставлять то же средство. (Для облегчения работы с конфликтующими пакетами RPM-система позволяет задавать также информацию с помощью элементов Conflicts и Obsoletes.)ProvidesНаиболее важная сопутствующая информация определяется в параметрах
. Вы можете указать все пакеты, необходимые для функционирования вашего пакета. Например, Web-серверу требуется сетевой пакет и пакет безопасности. В нашем примере вы задаете необходимость СУРБД MySQL версии 3.23 или более свежей. Синтаксическая запись приведена далее:RequiresRequires: mysql >= 3.23Если вам нужна СУРБД MySQL любой версии, можно задать параметр следующим образом:
Requires: mysqlRPM-система не разрешит пользователям устанавливать пакеты, если не установлены пакеты, необходимые для их работы. (Правда, пользователи могут переопределить это поведение.)
RPM-система автоматически добавляет зависимые элементы, например /bin/sh для сценариев командной оболочки, интерпретатор Perl для сценариев на языке Perl и любые совместно используемые библиотеки (файлы с расширением so), которые вызывает ваше приложение. Каждая новая версия RPM-системы включает все новые средства для автоматической проверки зависимостей.
После задания требований необходимо определить исходные файлы, формирующие ваше приложение. Для большинства приложений можно просто скопировать следующую строку:
source: %{name}-%{version}.tar.gzСинтаксическая запись
ссылается на RPM-макрос, в данном случае имя пакета. Поскольку ранее вы задали имя myapp, команда%{name}заменитrpmbuildна%{name}и аналогично заменитmyappна%{version}, для того чтобы использовать для построения файл с именем myapp-1.0.tar.gz. Искать этот файл она будет в каталоге SOURCES, описанном ранее.1.0В примере задается параметр
, определяющий место установки пакета. Вы можете скопировать в ваши пакеты следующую строку:BuildrootBuildroot: %{_tmppath}/%{name}-%{version}-rootПосле того как параметр
задан, устанавливайте ваши приложения в каталог из параметраBuildroot. Можно использовать удобную переменнуюBuildroot, которая задается для всех сценариев командной оболочки в файле spec.$RPM_BUILD_ROOTПосле задания всех этих характеристик пакета далее нужно определить, как собирать пакет. Для этого есть четыре основные секции:
,%prep,%buildи%install.%cleanСудя по имени, секция
предназначена для подготовки сборки. В большинстве случаев вы можете выполнить приведенный далее макрос%prepс параметром%setupдля перевода его в режим без вывода сообщений:-q%prep%setup -qСекция
собирает ваше приложение. В большинстве случаев можно применять простую команду%build. Например:make%buildmakeЭто один из способов, которым RPM-система использует уже проделанную вами работу по созданию make-файла.
Секция
устанавливает ваше приложение, интерактивное справочное руководство и любые файлы поддержки. Вы можете применить RPM-макрос%install, который вызывает задание%makeinstallmake-файла. Тем не менее, в данном случае установим файлы вручную, чтобы продемонстрировать дополнительные RPM-макросы:install%installmkdir -р $RPM_BUILD_ROOT%{_bindir}mkdir -p $RPM_BUILD_ROOT%{_mandir}install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myappinstall -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1