| ||||||||||||||||||||||||||||||||||||||||||||||||||
Создание RPM-пакетовПодробное описание процесса создания пакетов в формате RPM. Денис Колисниченко Программа RPM предназначена для произведения всех видов операций с программным обеспечением, в том числе и для создания пакетов для установки (RPM-пакетов). Прежде, чем описать много сухих фактов, взятых из документации, рассмотрим простой пример создания небольшого RPM-пакета. Я создал этот пакет для своей программки, которая контролирует состояние указанного последовательного порта. Будем считать, что программа уже откомпилирована и все файлы, необходимые для ее работы, уже подготовлены. Нам нужны следующие файлы: Все эти файлы я поместил в каталог /root/port. Конечно, это не совсем корректно, но об этом будет сказано немного позже. Для создания пакета нам нужно создать файл спецификаций. В файле спецификаций указывается вся информация о создаваемом пакете: название, версия, файлы программ, файлы документации, действия, выполняемые при установке пакета и при его удалении. Вот мой файл спецификаций для программы port # /root/port/port.spec Для построения пакета нужно ввести команду: # rpm -bb /root/port/port.spec Если вы не допустили никаких ошибок при создании файла спецификаций, на экране вы увидите примерно такое сообщение: Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.33439 При этом будет создан пакет port-1.0-99.i686.rpm. Этот пакет будет помещен в каталог /usr/src/RPM/RPMS/i686 Проведем небольшой эксперимент. Запустите Midhight Commander (mc), перейдите в каталог /usr/src/RPM/RPMS/i686/ и «войдите» в пакет port-1.0-99.i686.rpm как в обычный каталог. В нем будет «подкаталог» INFO, в котором и содержится вся информация о пакете. Что ж, мы успешно разобрались с построением простого пакета, но для создания реальных пакетов установки наших знаний все еще не хватает. Теперь настала очередь той сухой теории, о которой я упомянул в начале статьи. Традиционно, процедура создания RPM-пакетов состоит из следующих этапов:
Первые два этапа можно пропустить, что мы и сделали при создании нашего пакета. Это можно сделать только в случае, если программа уже откомпилирована из исходных текстов. Программа RPM использует файл конфигурации rpmrc. Поиск этого файла происходит в каталогах /usr/lib/rpm, /etc, $HOME. Просмотреть этот файл можно с помощью команды: # rpm --showrc Запись topdir файла конфигурации rpmrc содержит название каталога, в котором находится дерево подкаталогов, которое используется менеджером RPM для постороения пакетов. Введите команду: # rpm --showrc | grep topdir У меня эти подкаталоги находятся в каталоге /usr/src/RPM. Как вы видите, в этом каталоге находятся подкаталоги BUILD, RPMS, SOURCES, SPECS, SRPMS. В каталоге BUILD создается RPM-пакет. В каталоге SOURCES находятся сжатые исходные тексты программы. В каталог RPMS помещаются созданные пакеты. Точнее, они помещаются в один из его подкаталогов, в какой именно – это зависит от архитектуры. В каталог SRPMS помещаются пакеты, содержащие исходные тексты программы. В каталоге SPECS находятся файлы спецификаций. Обычно файл спецификации называется название_программы-версия-релиз.spec. Например, если у вас есть исходный текст программы в архиве, из которого вы хотите создать пакет RPM, скопируйте его в каталог SOURCES # cp source_code-1.0.tar.gz /usr/src/RPM/SOURCES По умолчанию менеджер RPM работает с пакетами, расположенным в каталоге с именем, совпадающем с названием пакета и его версией. Для нашего пакета port это будет каталог port-1.0-99. Менеджер пакетов будет компилировать наш пакет в каталоге /usr/src/RPM/port-1.0-99 Думаю, уже достаточно информации о каталогах RPM. Теперь перейдем к файлу спецификаций. Файл спецификаций состоит из четырех сегментов: заголовка, подготовительного, файлового, установочного. В заголовке указывается общая информация о пакете. В листинге 1 к сегменту заголовка относятся тэги Summary, Name, Version, Release, Group и Licese. На них мы останавливаться не будем, так как их назначение понятно из листинга 1. Есть еще очень полезный тэг: BuildRoot. Он изменяет расположение дерева BUILD. Значением по умолчанию является /usr/src/RPM или другой каталог, задаваемый переменной окружения $RPM_BUILD_ROOT. В целях экономии дискового пространства полезно после установки удалить дерево %RPM_BUILD_ROOT. Но дерево по умолчанию может содержать другие файлы, относящиеся к другим пакетам. Поэтому сначала с помощью тэга BuildRoot нужно задать какой-нибудь временный каталог, а после установки удалить его. В каждом сегменте находятся макрокоманды. С некоторыми мы уже знакомы – это %description, %files, %doc, %install. В таблице 1 приведено полное описание макрокоманд. Таблица 1.
Нужно сделать небольшое замечание относительно макрокоманд %config и %doc. В этом случае список задается не так, как в макрокоманде %files. Если после макрокоманды %files можно было просто указать по одному файлу в каждой строке, то в макрокоманде %doc каждому файлу (или каждому списку) должна предшествовать команда %doc. Например, %doc README TODO Changes %doc Install а не%doc Еще раз отмечу, что наличие всех макрокоманд в файле спецификаций не является обязательным. При создании пакета мы использовали опцию -bb программы rpm. При указании этой опции создается только двоичный RPM-пакет, если вы хотите создать также пакет, содержащий исходный текст программы, используйте опцию -ba. Созданный пакет помещается в каталог SRPMS и будет иметь имя port-1.0-99.src.rpm. То есть вместо названия архитектуры будет указано, что данный пакет содержит исходный текст программы. Для создания такого пакета в каталоге SOURCES должны находиться исходные тексты программы. Для полноты картины осталось рассмотреть опции менеджера rpm, которые используются для создания пакетов. Таблица 2.
Источник - SoftТерра, http://www.softerra.ru
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |