Сборка Пакета Rpm Для Centos 6.4 X64

Я горячо приветствую всех! :) Я хотел бы поделиться своим опытом сборки RPM-пакетов в CentOS 6.4 x64. Мне нравится эта система, все просто, информации много.

И на большинстве наших сервисов (небольших хостинговых компаний) он установлен.

Не собирайте пакеты на своем рабочем сервере; зачем вам дополнительные пакеты? Я создал виртуальную машину и делаю это.

Сегодня мы будем собирать PHP-5.5.4, который вышел буквально день назад. Почему PHP? Потому что больше всего я страдал с его сборкой: то ли не было нормального spec-файла, то ли в нем были ошибки (когда я сам что-то добавлял/исправлял).

Короче говоря, я прожил с ним больше недели.

И в муках родилось решение, как правильно собрать пакет для PHP. Ну что, дорогие, приступим к делу! 1. Установил ОС.

Учтем, что все действия по установке и обновлению выполняются от имени пользователя root, поэтому мы не используем sudo. Теперь обновимся и перезагрузимся:

  
  
  
  
  
  
  
  
  
  
   

yum update -y && shutdown -r now

2. Подключаем дополнительные репозитории.

Я использую следующие немногие:



rpm -ivh --nosignature http://rpm.axivo.com/redhat/axivo-release-6-1.noarch.rpm && rpm -ihv http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm

Давай сделаем

yum update -y

3. Теперь мы устанавливаем все хорошее, без чего мы никогда не будем собирать PHP. Сначала от CentALT:

yum install -y libcurl-devel pam-devel sqlite-devel libedit-devel libtool-ltdl-devel libc-client-devel --enablerepo=CentALT

Тогда из Аксиво:

yum -y install postgresql-devel unixODBC-devel net-snmp-devel libxslt-devel libxml2-devel aspell-devel enchant-devel libicu-devel mariadb-server mariadb-devel t1lib-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel freetds-devel recode-devel --enablerepo=axivo

Итак, давайте проверим версию openssl:

openssl version

Если не 1.0.1e, то сделайте так:

yum install -y openssl openssl-devel--enablerepo=axivo

Теперь устанавливаем то, что необходимо для непосредственной сборки:

yum groupinstall -y "Development Tools" && yum install rpmdevtools

4. Теперь создадим необходимую среду для сборки.

Действия, описанные ниже, необходимо выполнять от имени обычного пользователя, а не от имени root, это очень важный момент. Давайте сделаем это следующим образом:

rpmdev-setuptree

Эта команда создаст каталог со следующими подкаталогами:

+ rpmbuild -BUILD -BUILDROOT -RPMS -SOURCES -SPECS -SRPM

Здесь СТРОИТЬ файлы из исходного архива будут распакованы.

В РПМС будут ваши пакеты RPM. Здесь ИСТОЧНИКИ разместите все исходники с конфигами.

СПЕЦИФИКАЦИИ — содержит спецификационный файл с инструкциями по сборке.

Это самая важная часть сборки пакета.

СРПМ — содержит файл *.

src.rpm — исходники пакета rpm. Мы можем распространять его вместе с пакетами rpm, для тех, кому нужно что-то добавить/удалить из будущего пакета.

Содержит файл спецификации и исходники для сборки.

Весь файл спецификации здесь выкладывать не буду, потому что там и так 1200 с лишним строк, поэтому предлагаю скачать архив.

здесь Я думал, что можно просто переделать spec-файл из исходников rpm-пакета php-5.4, но не тут-то было! Есть масса подводных камней, которые сложно решить самостоятельно.

Нашел в репозиториях Реми необходимый src.rpm версии 5.5 и переделал его под новую версию.

И все получилось.

Итак, предположим, что вы скачали все исходники и распаковали их в свой домашний каталог.

Затем перейдите в каталог SPEC и выполните следующую команду, чтобы собрать пакет rpm вместе с src.rpm:

rpmbuild -ba php55.spec

Сбор начался.

Это займет много времени, в зависимости от мощности компьютера.

У меня это заняло около 40 минут. Если выйдет новая версия PHP (скажем 5.5.*), то скачайте архив bz2 в папку с исходниками (напомню, это SOURCES), отредактируйте файл SPECS/php55.spec. Измените «Версия: 5.5.4» на нужную версию.

И можно собрать новый.

Уже собранные пакеты можно скачать здесь P.S. После обновления одного из серверов с версии 5.4 до 5.5.4 ничего страшного не произошло.

Единственная проблема заключалась в том, что у клиента было «Depraceted: preg_replace() /e», что легко исправить заменой preg_replace()/е на preg_replace_callback() .

Всем творческих узбеков :) Теги: #*nix #Системное администрирование #администрирование

Вместе с данным постом часто просматривают: