Red Hat Training
A Red Hat training course is available for Red Hat Satellite
Глава 8. RPM
В ходе автоматической установки систем, возможно, потребуется установить дополнительные программы, не принадлежащие Red Hat. Они должны предоставляться в виде пакетов RPM. В свою очередь, пакеты должны создаваться в окружении Red Hat Enterprise Linux. Так, сборка пакетов для установки в Red Hat Enterprise Linux 5 должна осуществляться в Red Hat Enterprise Linux 5.
В системе, где будет осуществляться сборка пакетов, надо будет заранее установить
rpm-build
. Дополнительно могут потребоваться другие компиляторы и библиотеки.
Готовые пакеты должны быть подписаны при помощи ключа GPG, что позволит проверить его подлинность. Парольная фраза ключа GPG должна быть известна только администраторам.
Процедура 8.1. Создание ключа GPG
Важно
Ниже приведены команды для создания ключа GPG и его экспорта в подходящий формат. В целях безопасности рекомендуется создать резервную копию ключа.
- Создайте каталог для хранения ключей:
mkdir -p ~/.gnupg
- Создайте пару ключей:
gpg --gen-key
Потребуется определить тип ключа, его размер и срок действия. Чтобы принять предложенные значения, нажмите Enter. Дополнительно можно ввести имя, комментарий и электронный адрес.Real name: rpmbuild Email address: rpmbuild@example.com Comment: this is a comment You selected this USER-ID: "rpmbuild (this is a comment) <rpmbuild@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Нажмите O, чтобы принять предложенные значения. - Выполните команду просмотра ключей и их отпечатков:
gpg --list-keys --fingerprint
- Выполните экспорт ключей:
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
- Добавьте ключ в базу данных RPM с целью проверки его целостности. Для этого все клиенты должны будут выполнить следующую команду в режиме root:
rpm --import EXAMPLE-RPM-GPG-KEY
Эта операция будет выполняться автоматически во время установки клиентов. - После создания RPM его можно подписать при помощи ключа GPG и добавить в канал:
rpm --resign package.rpm rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=channel-name
- Выполните проверку пакета:
rpm –qip package.rpm rpm -K package.rpm
Процедура 8.2. Сборка RPM
- Создайте пользователя с именем
rpmbuild
. Это позволит администраторам использовать одно и то же окружение и GPG-ключ при выполнении сборки пакетов. - В его домашнем каталоге создайте файл
.rpmmacros
:touch /home/rpmbuild/.rpmmacros
- В созданный файл добавьте:
%_topdir %(echo $HOME)/rpmbuild %_signature %gpg %_gpg_name rpmbuild <rpmbuild@example.com>
Каталог/home/rpmbuild/rpmbuild
должен иметь ту же структуру что и/usr/src/redhat
.
Пример 8.1. Файл спецификации RPM
Ниже приведен пример файла спецификации. Он должен быть размещен в каталоге
SPECS
, который должен быть расположен в каталоге, заданном с помощью _topdir
в файле .rpmmacros
Name: foo Summary: The foo package does foo Version: 1.0 Release: 1 License: GPL Group: Applications/Internet URL: http://www.example.org/ Source0 : foo-1.0.tar.gz Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root Requires: pam BuildPrereq: coreutils %description This package performs the foo operation. %prep %setup -q %build %install mkdir -p %{buildroot}/%{_datadir}/%{name} cp -p foo.spec %{buildroot}/%{_datadir}/%{name} %clean rm -fr %{buildroot} %pre # Add user/group here if needed %post /sbin/chkconfig --add food %preun if [ $1 = 0 ]; then # package is being erased, not upgraded /sbin/service food stop > /dev/null 2>&1 /sbin/chkconfig --del food fi %postun if [ $1 = 0 ]; then # package is being erased # Any needed actions here on uninstalls else # Upgrade /sbin/service food condrestart > /dev/null 2>&1 fi %files %defattr(-,root,root) %{_datadir}/%{name} %changelog * Mon Jun 16 2003 Some One <one@example.com> - fixed the broken frobber (#86434)