Всех категорически приветствую! :)
Хочу поделиться опытом сборки 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
Потом из Axivo:
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-deve --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
Сюда BUILD будут распаковываться файлы из архива с исходниками. В RPMS будут Ваши rpm-пакеты. Здесь SOURCES располагайте все исходники с конфигами. SPECS — содержит spec-файл у которого есть инструкции для сборки. Это самая важная часть для сборки пакета. SRPM — содержит файл *.src.rpm — исходники rpm-пакета. Его мы можем распространять вместе с rpm-пакетами, это кому нужно что-то дополнить/удалить из будущего пакета. Содержит spec-файл, исходники для сборки.
Весь spec-файл сюда выкладывать не буду, ибо аж 1200 с лишним строк, поэтому предлагаю скачать архив скачать тут
Я думал что можно просто переделать spec-файл из исходников rpm-пакета php-5.4, но не тут-то было! Очень много подводных камней, которые решить самому сложно. Нашел в репозиториях Remi нужный src.rpm версии 5.5, и переделывал под новую версию. И всё получилось.
Итак, предположим, что все исходники вы скачали, распаковали в свой домашний каталог. Затем переходим в каталог SPEC и выполняем такую команду для сборки rpm-пакета вместе с src.rpm:
rpmbuild -ba php55.spec
Пошла сборка. Будет идти долго, в зависимости от мощности компьютера. У меня ушло где-то 40 минут.
Если выйдет новая версия PHP (допустим 5.5.*), то скачиваем bz2-архив в папку с исходниками (напомню, это SOURCES), редактируем файл SPECS/php55.spec. Меняем «Version: 5.5.4» на нужную версию. И можно собирать новую.
Уже собранные пакеты можно скачать тут
P.S. Обновив на одном из серверов с версии 5.4 до 5.5.4, ничего страшного не случилось. Единственно, у клиента возникло «Depraceted: preg_replace() /e», которое починилось легко заменив preg_replace() /e на preg_replace_callback().
Всем творческих узбеков :)
Автор: dimitrius86