Основы программирования в Linux
В этом примере при необходимости создаются каталоги для файлов, а затем устанавливаются исполняемый файл myapp и интерактивное справочное руководство myapp.1. Переменная окружения
содержит местоположение$RPM_BUILD_ROOT, заданное ранее. МакросыBuildrootи%{_bindir}замещаются текущим каталогом двоичных файлов и каталогом страниц интерактивного справочного руководства соответственно.%{_mandir}ПримечаниеЕсли вы пользуетесь сценарием configure для создания make-файла, все разнообразные каталоги в нем будут заданы должным образом. В большинстве случаев вам не придется задать все команды установки вручную, как. показано в предыдущем примере.
Задание
удаляет файлы, созданные командой%clean. Например:rpmbuild%cleanrm -rf $RPM_BUILD_ROOTПосле описания построения пакета следует задать все файлы, которые будут устанавливаться. RPM-система очень строга на этот счет. Она и должна быть строгой для того, чтобы иметь возможность отследить должным образом каждый файл в каждом пакете. В секции
перечисляются имена всех файлов, включаемых в пакет. В данном случае у нас только два файла предназначены для распространения в двоичном пакете: исполняемый файл myapp и страница интерактивного справочного руководства myapp.1. Например:%files%files%{_bindir}/myapp%{_mandir}/myapp.1RPM-система может выполнять сценарий до и после установки вашего пакета. Например, если ваш пакет — процесс-демон, для его запуска, возможно, нужна корректировка сценариев установки системы. Сделайте это с помощью сценария
. Далее приведен простой пример, отправляющий сообщение по электронной почте:%post%postmail root -s "myapp installed — please register" </dev/nullПоищите примеры в серверных RPM-файлах spec.
Далее приводится полный файл spec для вашего простого приложения.
## spec file for package myapp (Version 1.0)#Vendor: Wrox PressDistribution: AnyName: myappVersion: 1.0Release: 1Packager: [email protected]License: Copyright 2007 Wiley Publishing, Inc.Group: Applications/MediaProvides: goodnessRequires: mysql >=3.23Buildroot: %{_tmppath}/%{name}-%{version}-rootsource: %{name}-%{version}.tar.gzSummary: 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%prep%setup -q%buildmake%installmkdir -p $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%cleanrm -rf $RPM_BUILD_ROOT%postmail root -s "myapp installed — please register" </dev/null%files%{_bindir}/myapp%{_mandir}/myapp.1Теперь вы готовы к формированию RPM-пакета.
Создание RPM-пакета с помощью rpmbuildСоздаются пакеты с помощью команды
со следующей синтаксической записью:rpmbuildrpmbuild -b<i>BuildStage spec_file</i>Опция
заставляет-bсоздать RPM-пакет. Дополнительная опцияrpmbuild— специальный код, информирующий командуBuildStageо том, как далеко она может зайти в процессе создания. В табл. 9.5 перечислены опции команды.rpmbuildТаблица 9.5
Опция Описание -baСоздавать и двоичный, и исходный RPM-пакет -bbСоздавать двоичный RPM-пакет -bcКомпилировать программу, но не создавать полный RPM-пакет -bpПодготовиться к созданию двоичного RPM-пакета -biСоздать двоичный RPM-пакет и установить его -blПроверить список файлов RPM-пакета -bsСоздать только RPM-пакет исходных файлов Для создания двоичного RPM-пакета и пакета исходных файлов используйте опцию
. RPM-пакет исходных файлов позволит создать повторно двоичный RPM- пакет.-baСкопируйте RPM-файл spec в корректный каталог SOURCES, поместив его рядом с исходным файлом приложения:
$ <b>cp myapp.spec /usr/src/redhat/SOURCES</b>Далее приведен вывод, сопровождающий создание пакета в системе SUSE Linux, пакеты в которой создаются из каталога /usr/src/packages/SOURCES: