Я успешно настроил и скомпилировал php на своем сервере разработки и отлично работает, но после разговора с приятелем системного администратора он сообщил, что пользовательские компиляции последних сборок не рекомендуются для производственных (или даже разрабатываемых) систем. Он отметил ситуацию, когда они настраивали и скомпилировали PHP 5.3.6 только для того, чтобы обнаружить, что была некоторая проблема с драйвером Postgres низкого уровня, поэтому им пришлось вернуться к 5.3.3.
Поэтому я подумываю вернуться к yum для установки PHP, однако у меня есть несколько пользовательских настроек конфигурации, и мне было интересно, можно ли передать или настроить, как PHP будет компилироваться через YUM?
Моя текущая строка конфигурации:
Configure Command => './configure' '--with-libdir=lib64' '--prefix=/usr/local/_custom/app/php' '--with-config-file-path=/usr/local/_custom/app/php/etc' '--with-config-file-scan-dir=/usr/local/_custom/app/php/etc/modules' '--disable-all' '--with-apxs2=/usr/sbin/apxs' '--with-curl=/usr/sbin/curl' '--with-gd' '--with-iconv' '--with-jpeg-dir=/usr/lib' '--with-mcrypt=/usr/bin' '--with-pcre-regex' '--with-pdo-mysql=mysqlnd' '--with-png-dir=/usr/lib' '--with-zlib' '--enable-ctype' '--enable-dom' '--enable-hash' '--enable-json' '--enable-libxml' '--enable-mbstring' '--enable-mbregex' '--enable-pdo' '--enable-session' '--enable-simplexml' '--enable-xml' '--enable-xmlreader' '--enable-xmlwriter'
Загрузите src.rpm для пакета, он содержит ОРИГИНАЛЬНЫЙ исходный код и все файлы, необходимые для компиляции пользовательских rpm:
Для сборки rpm вам понадобится пакет rpm-build, который содержит программу rpmbuild.
Это также можно сделать с помощью yumdownloader (из пакета yum-utils):
yum install yum-utils rpm-build
yumdownloader --source php
Установите src.rpm:
rpm -Uvh *.src.rpm
cd в каталог SPEC rpmbuild;
RHEL5, старая Fedora
cd /usr/src/redhat/SPEC/
Suse:
cd /usr/src/packages/SPEC/
RHEL6, более новая Fedora:
cd ~/rpmbuild/SPEC/
Файл php.spec содержит подробную информацию о том, как создается пакет и какие компоненты будут включены. Он также содержит данные о зависимостях и необходимых пакетах для правильной сборки новых пакетов. Таким образом, rpmbuild напомнит вам о любых недостающих пакетах.
Вам потребуется:
запустить rpmbuild:
rpmbuild --target x86_64 -ba php.spec
--target x86_64 - указывает платформу (может быть i386, x86_64, amd64 и т. д.)
-ba - "build all", будет собирать как окончательный .rpm, так и новые пакеты src.rpm
Вы можете найти встроенные пакеты в каталогах ../RPM/ и ../SRPM/.
Этот метод гарантирует, что в каталог включены исправления поставщика. Иерархия файловой структуры такая же, компонент совместим, зависимости соблюдены, старая версия будет безопасно заменена. Кроме того, вы гарантируете свои будущие обновления.
p.s. Я не согласен со строкой «новая производимая версия - плохая». Я оказываю услуги поддержки десяткам компаний, у меня есть виртуальный хостинг, и я всегда предпочитаю иметь свежую версию. Единственная проблема с php заключается в переходе от одной подверсии к другой (например, с 5.1.x на 5.2.x, с 5.2.x на 5.3.x) - есть некоторые общие изменения и устаревшие / удаленные функции. Но чем новее, тем быстрее, безопаснее и лучше обслуживается.
p.s.s. Я никогда в жизни ничего не компилирую вручную и не помещаю файлы в / usr / local /, я выучил rpm, так как мне это было нужно за несколько дней, теперь все работает гладко.
Нет, к сожалению, вы не можете указать пользовательские команды настройки с помощью yum. Программное обеспечение, предоставляемое yum и другими подобными установщиками пакетов, предварительно создано в соответствии со спецификациями поставщика.
Я также рекомендовал бы не использовать последнюю сборку чего-либо только потому, что это доступно, особенно в производственных системах. Я столкнулся с аналогичными проблемами, как и ваш приятель, когда какая-то странная ошибка подняла свою уродливую голову, и я потратил часы, дни, недели, отслеживая ее ... или просто вернулся к старой сборке.
Я бы сделал кастомную сборку php, как вы, что мы и делаем в моей компании. Когда выходит новая стабильная версия php, мы собираем ее в /usr/local/php-x.x.x, тестируем, затем обновляем двоичные символические ссылки и общие библиотеки в /etc/ld.so.conf.d
и у нас все хорошо. У разработчиков всегда есть запросы на конкретные функции, поэтому нам необходимо иметь свободу и гибкость настраиваемой сборки. Вы можете следить за тем, какую версию php CentOS рекомендует / распространять, и обновлять в это время.
Yum не компилятор
Вы можете попробовать скомпилировать PHP вручную:
cd /tmp;
wget http://ua.php.net/get/php-5.2.17.tar.gz/from/ua2.php.net/mirror; # latest 5.2
tar -xzvf php-YOU_VER.tar.gz;
cd php-YOU_VER;
./configure --enable-cgi --disable-cli --with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-gd --enable-ftp --with-curl --with-zlib --enable-zip --with-iconv --enable-mbstring --with-mysql --with-freetype-dir=/usr/local --with-ttf --enable-gd-native-ttf --with-mysqli --with-libdir=lib64;
make;
make install;
как сказал GioMac и добавил к нему. Для этого нужно взять исходный rpm версии php, которую вы скомпилировали, из репозиториев yum, извлечь src rpm и добавить в него свою настройку. Увеличьте обороты и сделайте
yum localinstall <rpm>
Тем не менее, это оставляет без ответа первоначальное беспокойство системного администратора. В вашей настройке на php может быть ошибка, которая не отображалась в вашем окне разработчика. Таким образом, один из способов решить эту проблему - протестировать его в тестовой среде и, когда он будет удовлетворен, запустить его в производство.
yum не является компилятором. Таким образом, установка через yum не решает никаких проблем, присутствующих в коде. yum просто упрощает решение зависимостей пакетов. Одно из преимуществ, которое я вижу, заключается в том, что пакеты в некоторой степени тестируются перед выпуском в стабильную ветку репо. Поэтому, если вы хотите скомпилировать его самостоятельно, вы потеряете преимущества стабильной ветки. Если вы хотите внести только изменения в конфигурацию, вы можете выполнить эту пост-установку, отредактировав файл php.ini.