
Сборка и перекомпиляция бинарных пакетов из src.rpm в rpm для CentOS
Поставим репозиторий Epel:
Epel
Поставим пакет с тулсами:
# yum install -y rpmdevtools
Также нам необходимо получить SRС RPM пакеты из репозитория для пересборки, нам поможет прога — yumdownloader:
# yum -y install yum-utils
Если нужно можно создать пользователя который будет собирать пакеты:
# /usr/sbin/useradd rpmbuild
Войдем в систему из под раннее созданного юзера rpmbuild:
# su - rpmbuild
Проинициализируем структуру директорий для сборки RPM:
# rpmdev-setuptree
Если у Вас есть уже готовый пакет — package.src.rpm (пример: php4.x.x.src.rpm), то перейдите сразу к шагу 2.
1. В качестве примера я возьму пакет php4.x.x, скачиваю SRC RPM пакет:
# yumdownloader --enablerepo=epel-source --source php
Собираем для пхп4 бинарный RPM пакет.
От рутовского пользователя в папке /home/rpmbuild выполним:
# yumdownloader --enablerepo=epel-source --source php
И так, залогинимся из под юзера rpmbuild и видим в домашней папке следующий файл php4.x.x.src.rpm
2. Если у Вас есть готовый .src.rpm, то необходимо его распаковать:
# rpm -ihv php4.x.x.src.rpm
Ставим все пакеты которые необходимы для нашей сборки пакета (выполняются от root):
# yum-builddep php4.x.x.src.rpm
После чего появляется исходный код пакета и SPEC файл, описывающий как его собрать в бинарный вид.
Перейдем в директорию с SPEC файлами:
# cd rpmbuild/SPECS/
Запустим сборку пакета:
# rpmbuild -bb nginx.spec
Если необходимо только наложить патчи, но не собирать пакет,то выполняем:
# rpmbuild -bp nginx.spec
Если выдаст список пакетов с надписью «error: Failed build dependencies», то их придется поставить от root-а.
Ну вот и все, в случае успешной сборки мы получим бинарные файлы в папке:
ls ~/rpmbuild/RPMS/x86_64/ php4.x.x.x86_64.rpm php-debuginfo-x.x.x86_64.rpm
Пересборка бинарных пакетов из src.rpm в rpm
Нет нужды инсталить пакет с исходниками в систему, для того чтобы пересобрать из него же бинарник. За место этого логичней собрать пакет непосредственно, с опции —rebuild .
Если Вы находитесь в каталоге где и src.rpm, то команда будет такова (на примере php-4.x.x.src.rpm):
# rpmbuild --rebuild php-4.x.x.src.rpm
Перекомпиляция бинарных пакетов из src.rpm
Если вы хотите только перекомпилировать файлы в src.rpm-пакете, можно использовать опцию —recompile , для примера(на примере php-4.x.x.src.rpm):
# rpmbuild --recompile php-4.x.x.src.rpm
Выполняются те же процессы, что и при установке пакета с исходным кодом в систему и последующем выполнении команды:
# rpmbuild -bc --clean package.spec
Сборка или пересборка, компиляция или перекомпиляция бинарных пакетов из src.rpm в rpm для CentOS закончена. Запутано, но попробовав 1 раз, разобравшись до конца, Вы поймете что не так уж это и сложно было)
А как же линковка и перелинковка?
есть!