Authtor:
Posted at:
A. Semenov
04 Apr 2014
NAME

Сборка ПО из SOURCE rpm пакета на сервере CentOS 6 (nginx+LDAP)

Description

Правильная сборка пакетов на сервере под rpm-based системами. Никаких "make install".

Подготовка сервера к сборке

1. Для начала нужно установить пакеты:

yum install -y rpmdevtools gcc make yum-utils sudo tar # Дописать пакеты, необходимые для сборки

2. Добавляем в систему пользователя, от которого будет выполняться сборка:

useradd -m rpmbuild

3. Готовим дерево сборки для пакетов:

sudo -u rpmbuild -i
rpmdev-setuptree
tree -L 1 rpmbuild/
rpmbuild/
├── BUILD # Директория сборки
├── BUILDROOT # Директория сборки
├── RPMS # Содержит готовые rpm-пакеты
├── SOURCES # Исходные коды
├── SPECS # Файлы описаний (SPEC)
└── SRPMS # Исходные srpm-пакеты

Сборка собственного пакета на примере nginx+ldap

внимание: не выполняй сборку от имени root!!!

1. Все операции выполняются от пользователя rpmbuild (чтобы не нанести вред системе)

sudo -u rpmbuild -i 

2. Качаем необходимые исходники/пачи/файлы Для nginx я взял SRC пакет из официального репозитория nginx для CentOS. Модуль для авторизации с официального репозитория GIT

cd ~/rpmbuild/SRPMS/
VERSION_NG="1.2.5"
wget -nd -r -l 1 -A "nginx-${VERSION_NG}*src.rpm"  http://nginx.org/packages/centos/6/SRPMS/ 2>/dev/null
cd ~/rpmbuild/SOURCES/
git clone https://github.com/kvspb/nginx-auth-ldap 

3. Устанавливаем необходимые для сборки пакеты

yum-builddep nginx-${VERSION_NG}-*.ngx.src.rpm --nogpgcheck 

4. Устанавливаем пакет (он будет распакован в предварительно подготовленное дерево каталогов /home/rpmbuild/rpmbuild)

rpm -ivh nginx-${VERSION_NG}-*.ngx.src.rpm

5. Вносим изменения в файл сборки

vim ~/rpmbuild/SPECS/nginx.spec

6. Меняем в строке номер релиза (чтобы пакет обновился при установке)

---
Release: 4%{?dist}.wil
---  

ЗАМЕЧАНИЕ: Я также указал суффикс wil для уникальности пакета

7. Добавляем строку описания источника с исходными текстами модуля

---
Source1001: nginx-auth-ldap
--- 

8. Добавляем модуль в параметры сборки nginx (так же как при обычной сборке)

---
./configure \
--add-module=%{SOURCE1001} \
---  

ЗАМЕЧАНИЕ: Возможно потребуется добавить параметры сборки дважды для debug и original версий пакета

9. Теперь можем приступить к сборке нашего пакета

cd ~/rpmbuild/SPECS/
rpmbuild -bb nginx.spec 

10. После сборки будет примерно следующая запись:

Записан: /home/rpmbuild/rpmbuild/RPMS/x86_64/nginx-1.bla.bla.rpm
Записан: /home/rpmbuild/rpmbuild/RPMS/x86_64/nginx-debug-1.bla.bla.rpm 

11. Это наши готовые для установки пакеты, теперь можно установить через rpm или использовать локальный репозиторий для установки через yum 12. Так же рекомендую создать srpm-пакет, чтобы не потерять ваши изменения и можно было развернуть его на любом сервере

rpmbuild -bs nginx.spec

13. Файл будет тут

Записан: /home/rpmbuild/rpmbuild/SRPMS/nginx-1.bla.bla.src.rpm

14. PROFIT?