Платный
хостинг от провайдера HostSpace.com.ua - хостинг, регистрация доменов.
Поддержка PHP, MySQL, почта - в каждом тарифном плане.
Создание RPM-пакетов
Программа RPM предназначена для произведения всех видов
операций с программным обеспечением, в том числе и для создания пакетов для
установки (RPM-пакетов).
Прежде, чем описать много сухих фактов, взятых из документации, рассмотрим
простой пример создания небольшого RPM-пакета. Я создал этот пакет для своей
программки, которая контролирует состояние указанного последовательного порта.
Будем считать, что программа уже откомпилирована и все файлы, необходимые для
ее работы, уже подготовлены. Нам нужны следующие файлы: port -
откомпилированный бинарный файл README - файл, который будет помещен в
каталог /usr/doc/port-1.0-99 port.1 - файл для справочной системы man
Все эти файлы я поместил в каталог /root/port. Конечно, это не совсем
корректно, но об этом будет сказано немного позже.
Для создания пакета нам нужно создать файл спецификаций. В файле спецификаций
указывается вся информация о создаваемом пакете: название, версия, файлы
программ, файлы документации, действия, выполняемые при установке пакета и при
его удалении.
Вот мой файл спецификаций для программы port Листинг 1. # /root/port/port.spec
# Файл спецификаций для программы port
# Общее описание программы
Summary: Program to control your serial device
# Название пакета
Name: port
# Его версия
Version: 1.0
# Релиз
Release: 99
# Группа программного обеспечения. Группы (или категории) используются многими
# программами для манипуляции пакетами, например gnorpm, которая строит дерево
# категорий установленного программного обеспечения
Group: Monitoring
# Если хотите, можете указать свое имя, но обычно указывается GPL
License: GPL
# Можно также указать и copyleft
# Copyright: GPL
# Наш пакет ни с чем не кофликтует
# Conflicts:
# Менеджер сам заполнит это поле при необходимости (только для создания двоичных пакетов!)
# Require:
# Информация о создателе пакета
Packager: Denis Kolisnichenko [dhsilabs@mail.ru]
URL: http://dkws.narod.ru
# Тэги Summary, Name, Version, Release, Group, License явлются обязательными
# Из вышеуказанной информации видно, что будет создан пакет:
# port-1.0-99.i686.rpm
# Архитектура у вас может отличаться
# Полное описание пакета
%description
Программа port предназначена для мониторинга состояния последовательного
порта. При получении сигнала (1) на какой-нибудь контакт указанного порта,
port отправляет сообщение запустившему ее пользователю на указанный email
# Файлы, которые будут помещены в пакет
%files
/root/port/port
/root/port/port.1
# Файлы, которые будут помещены в каталог /usr/doc/port-1.0-99
%doc /root/port/README
# Действия, выполняемые при установке пакета
%install
# Файл port копируется в каталог /usr/bin (права доступа 555)
install -s -m 555 -o 0 -g 0 /root/port/port /usr/bin
# Файл port.1 копируется в каталог /usr/man/man1 (права доступа 444)
install -m 444 -o 0 -g 0 /root/port/port.1 /usr/man/man1
Для построения пакета нужно ввести команду: # rpm -bb /root/port/port.spec
Если вы не допустили никаких ошибок при создании файла спецификаций, на
экране вы увидите примерно такое сообщение: Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.33439
Processing files: port-1.0-99
Finding Provides: (using /usr/lib/rpm/find-provides)...
Finding Requires: (using /usr/lib/rpm/find-requires)...
Requires: ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0)
Записан: /usr/src/RPM/RPMS/i686/port-1.0-99.i686.rpm
При этом будет создан пакет 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-пакета
Первые два этапа можно пропустить, что мы и сделали при создании нашего
пакета. Это можно сделать только в случае, если программа уже откомпилирована из
исходных текстов.
Программа RPM использует файл конфигурации rpmrc. Поиск этого файла
происходит в каталогах /usr/lib/rpm, /etc, $HOME. Просмотреть этот файл можно с
помощью команды: # rpm --showrc
Запись topdir файла конфигурации rpmrc содержит название каталога, в котором
находится дерево подкаталогов, которое используется менеджером RPM для
постороения пакетов. Введите команду: # rpm --showrc | grep topdir
-14: _builddir %{_topdir}/BUILD
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir %{_usrsrc}/RPM
У меня эти подкаталоги находятся в каталоге /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.
| Макрокоманда |
Описание |
| %description | Полное описание пакета
| %prep |
Подготовка архива. Здесь задаются команды для извлечения исходного
текста программы и его распаковки, дополнительная подготовка исходного
текста. После макрокоманды %prep задаются обычные команды shell. |
| %setup |
Макрокоманда извлечения файлов из архивов. Опция -n возволяет указать
каталог, в котором будет создаваться новый пакет. Обычно распаковывается
архив, расположенный в каталоге SOURCES в каталог BUILD |
| %build |
Макрокоманда компилирования. Обычно здесь запускается программа make с
необходимыми параметрами |
| %files |
Задает список файлов, входящих в состав пакета. При указании имен
файлов должен быть указан полный, а не относительный путь. Для указания
полного пути можно использовать переменную окружения $RPM_BUILD_ROOT.
Необходимые файлы уже должны быть помещены в каталог BUILD. Этого можно
достичь с помощью макрокоманды %setup или с помощью %pre (см. ниже) |
| %config список |
Задает список файлов, которые будут помещены в каталог /etc |
| %doc список |
Задает список файлов, которые будут помещены в каталог
/usr/doc/[package]-[ver]-[release]. |
| %install |
Этап установки программного обеспечения. Здесь нужно записать команды,
которые будут устанавливать файлы, входящие в состав пакета. Удобнее
использовать команду install, которую я использовал в листинге 1 |
| %pre |
Действия, которые будут выполнены до инсталляции пакета |
| %post |
Действия, которые будут выполнены после инсталляции пакета |
| %preun |
Действия, которые будут выполнены перед удалением пакета |
| %postun |
Действия, которые будут выполнены после удаления пакета |
| %clean |
Удаление дерева BUILD. Используется вместо опции --clean программы
rpm. Обычно содержит одну команду: rm -rf
$RPM_BUILD_ROOT |
Нужно сделать небольшое замечание относительно макрокоманд %config и %doc. В
этом случае список задается не так, как в макрокоманде %files. Если после
макрокоманды %files можно было просто указать по одному файлу в каждой строке,
то в макрокоманде %doc каждому файлу (или каждому списку) должна предшествовать
команда %doc. Например, %doc README TODO Changes
%doc Install
а не %doc
README
TODO
Changes
Install
Еще раз отмечу, что наличие всех макрокоманд в файле спецификаций не является
обязательным.
При создании пакета мы использовали опцию -bb программы rpm. При указании
этой опции создается только двоичный RPM-пакет, если вы хотите создать также
пакет, содержащий исходный текст проргаммы, используйте опцию -ba. Созданный
пакет помещается в каталог SRPMS и будет иметь имя port-1.0-99.src.rpm. То есть
вместо названия архитектуры будет указано, что данный пакет содержит исходный
текст программы. Для создания такого пакета в каталоге SOURCES должны находиться
исходные тексты программы.
Для полноты картины осталось рассмотреть опции менеджера rpm, которые
используются для создания пакетов.
Таблица 2.
| -ba |
Создаются два пакета: двоичный и содержащий исходный текст. При этом
не пропускается ни один этап установки, указанный в файле
спецификаций |
| -bb |
Создается только двоичный пакет. Не пропускается ни один этап
установки, указанный в файле спецификаций |
| -bc |
Выполняются этапы %pre и %build. При этом пакет распаковывается и
компилируется |
| -bi |
Выполняются этапы %pre, %build, %install |
| -bl |
Выполянется проверка списка файлов, указанных в макрокоманде
%files |
| -bp |
Выполянется только этап %pre, то есть распаковывается архив |
| --recompile package.src.rpm |
Указаный пакет, содержащий исходные тексты, сначала устанавливается, а
потом компилируется |
| --rebuild package.src.rpm |
Устанавливает и компилируется пакет исходных текстов, а затем
создается новый двоичный пакет |
| --test |
Проверка файла спецификаций |
| --clean |
Удаление дерева каталогов BUILD после создания пакета |
--showrc |
Выводит файл конфигурации |
www.dkws.org.ua
Операционные системы 11-09-2006
Возможности нового Планировщика заданий в Windows Server 2008 28-07-2008 Операционные системы Планировщик заданий (Task scheduler) в Windows Server 2008 подвергся значительной модификации по сравнению с предыдущими версиями Windows Server. Теперь ключевыми элементами запланированных заданий стали триггеры (Triggers), действия (Actions), условия (Conditions) и параметры (Settings).Набор настроек триггеров и действий запланированного задания в Windows Server 2008 значительно расширился. Среди стандартных триггеров – возможность начинать зад...
Как намертво заблокировать процедуру входа в Windows Vista 02-07-2008 Операционные системы Недавно в одной из статей в рамках серии обзоров возможностей Windows Vista я показал, как можно вручную войти в систему Windows Vista на домашнем компьютере: «Как обойти процедуру входа в Windows Vista». Несмотря на то, что данная там инструкция предназначалась для людей, единолично использующих Windows Vista на домашней машине, множество читателей не разделили мнение о том, что можно оставить систему незащищенной.Основываясь на этих отзывах, я ...
Оптимизация и настройка служб Windows Vista 25-06-2008 Операционные системы По умолчанию окно Диспетчера задач (Task Manager) выглядит так, как показано на этом снимке. В нём отображены только процессы, работающие под вашей пользовательской учётной записью. Чтобы увидеть также и процессы, работающие под служебными учётными записями, нужно нажать кнопку Отображать процессы всех пользователей (Show processes from all users), которая находится в нижнем левом углу окна.Используйте Диспетчер задач для того, чтобы увидеть все ...
Персонализация функции быстрого поиска в меню «Пуск» Vista 19-05-2008 Операционные системы К счастью, функцию быстрого поиска в меню «Пуск» (Start) Vista можно сделать еще удобнее, объединив ее с поиском Google. Для этого придется воспользоваться Редактором локальной групповой политики (Local Group Policy Editor). Чтобы его запустить, нажмите клавиши [Windows]+[R], введите в диалоговом окне «Открыть» (Run) фразу gpedit.msc и нажмите «OK». После этого появится диалоговое окно системы Контроля учетных записей пользователей (UAC), в котор...
Использование утилиты проверки диска Check Disk в системе Windows Vista 13-05-2008 Операционные системы Утилита «Проверка диска» (Check disk) операционной системы Windows Vista позволяет проверить целостность диска, выявить повреждённые сектора и восстановить информацию.Щёлкните правой кнопкой на пиктограмме нужного диска и в раскрывшемся контекстном меню выберите пункт «Свойства» (Properties), как показано на изображениях A и B.Изображение A.Изображение B.В диалоговом окне «Свойства» (Properties) перейдите на вкладку «Сервис» (Tools) и нажмите кно...
Выборочное отключение контроля учетных записей (UAC) для проверенных приложений в Windows Vista 13-05-2008 Операционные системы Недавно я прочёл копию статьи Базы знаний Microsoft «Как отключить Контроль учётных записей пользователей для отдельных приложений» (How To Disable The User Account Control Prompt For Certain Applications), в которой продемонстрировано, как выборочно отключить контроль учётных записей (UAC) для конкретных программ при помощи пятой версии пакета средств обеспечения совместимости приложений Microsoft Application Compatibility Toolkit. Этой инструкц... |