FastNetMon

Monday 7 December 2009

Как собирать RPM под CentOS 5?

Ставим репозиторий Epel:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm


Для начала ставим необходимые пакеты:
yum install -y rpmdevtools


Также нам необходимо получвть SRС RPM пакеты из репозитория для пересборки, для этого нам понадобится программа yumdownloader:
yum -y install yum-utils



Создаем пользователя, под которым будем собирать пакеты:
/usr/sbin/useradd rpmbuild


Входим в систему под именем нового пользователя:

su - rpmbuild


Переходим в домашнюю папку:
cd


Инициализируем структуру каталогов для сборки RPM:
rpmdev-setuptree


Теперь скачиваем SRC RPM пакет интересующего нас модуля:

yumdownloader --enablerepo=epel-source --source nginx


А если требуется пересобрать пакет не из EPEL, а из основного репозитория CentOS? Тут возникает небольшая проблема - репозиторий с SRC RPM пакетами стандартно не добавлен в систему. Поэтому его придется установить:


wget http://fastvps.googlecode.com/svn/trunk/configs/CentOS-SRPMS.repo -O/etc/yum.repos.d/CentOS-SRPMS.repo
yum update


А скачивание с него выглядит так (либо update-SRPMS, если требуется самая новая версия пакета):
yumdownloader --enablerepo=base-SRPMS --source mysql


Итак, вернемся к nginx, попробуем собрать для него бинарный RPM пакет.

От имени рута в папке /home/rpmbuild выполняем команду:
yumdownloader --enablerepo=epel-source --source nginx



После чего, входим в систему под именем rpmbuild и обнаруживаем в домашней папке следующий файл:
nginx-0.6.39-1.el5.src.rpm


Теперь распаковываем его командой:
rpm -ihv nginx-0.6.39-1.el5.src.rpm


Далее нам необходимо поставить все пакеты, требуемые для сборки нашего пакета (запускаем от рута):
yum-builddep nginx-0.6.39-1.el5.src.rpm


После вышеописанных операций, у нас имеются исходный код пакета и SPEC файл, описывающий как его собирать в бинарник.

Переходим в папку со SPEC файлами:

cd rpmbuild/SPECS/


Запускаем сборку пакета:

rpmbuild -bb nginx.spec


Если же требуется только наложить патчи, но не билдить пэкадж, команда такая:
rpmbuild -bp nginx.spec


Если в ответ на это, будет выдан список пакетов с надписью "error: Failed build dependencies", то их придется поставить от имени рута.

Ну вот и все, в случае успешной сборки мы получим бинарные файлы в папке:

ls ~/rpmbuild/RPMS/x86_64/
nginx-0.6.39-1.x86_64.rpm nginx-debuginfo-0.6.39-1.x86_64.rpm

No comments :

Post a Comment

Note: only a member of this blog may post a comment.