Публикации
Последние новости:
 
Высокие технологии
Technology
Компьютерное железо
Программное обеспечение
Компьютерная безопасность
Операционные системы
Компьютерный справочник
БД
Интернет сегодня
AudioТехника
Средства связи
Весь спектр цифровой техники
Мир авто
Бизнес-финансы
Всё о культуре
ПроСпорт
Всё о компьютерах
Детское чтение
Мировые телекоммуникации
Пресс-релизы
 
Статьи
Мир культуры
Интересно о спорте
Покупаем:
ТурТранс
Для прекрасных дам
Усадьба, дом
 

Платный хостинг от провайдера 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. Этой инструкц...
     
    При любом использовании материалов сайта ссылка на сайт www.archive.com.ua обязательна.
    Rambler's Top100 Рейтинг@Mail.ru