В конечном счете, этот вопрос касается Yum и AMI Amazon Linux (см. Конец этой части), но сначала я расскажу немного о том, как я попал в свою ситуацию.
Я работаю над настройкой нового PHP-приложения на веб-сервере, размещенном на Amazon Web Services. Экземпляр EC2 работает под управлением Amazon Linux AMI release 2012.09 (согласно / etc / issue). Я не являюсь основным администратором этого сервера, поэтому я хотел бы ограничить влияние вносимых мной изменений.
На этом сервере уже запущено несколько приложений PHP. Мне нужна более новая версия PHP, чем они используют. Они используют версию из дистрибутива 5.3, слишком старую для моих целей.
Я решил загрузить исходный код PHP, собрать его сам и запустить вместе с другой версией. (Как я собираюсь это настроить - это другой вопрос, и я не буду здесь вдаваться в подробности.)
Я настроил свою сборку PHP со следующими параметрами:
--prefix=/opt/php-5.5.9
--with-openssl
--with-mcrypt
--with-mysql
--with-pdo-mysql
--enable-fpm
--with-apxs2=/usr/sbin/apxs
Затем я переключился на root и запустил make install
. (Оглядываясь назад, сделать это как root было ошибкой, я должен был установить права пользователя на запись в установочном каталоге и установить его как мой пользователь, чтобы я мог быть уверен, что ни один из файлов не помещается за пределы установочного каталога. .)
Затем я заметил, что веб-сервер не отвечает. После перезапуска все заработало. Я немного покопался и заметил, что для phpversion
, сервер теперь сообщает о новой версии, которую я только что установил в /opt
, а не версию дистрибутива, которую я намеревался оставить. Оказывается, что make install
пошли дальше и заменили существующие libphp5.so
. Отчеты RPM:
[root@xxxx etc]# rpm -V php
S.5....T. /usr/lib64/httpd/modules/libphp5.so
Насколько мне известно, в новой версии все работает нормально, так что, скорее всего, никакого вреда не было. Однако я бы предпочел оставить старую версию PHP на месте, чтобы пакетами по-прежнему можно было управлять с помощью диспетчера пакетов. Это было моим намерением поместить новую версию в /opt
.
Я попытался восстановить старую версию libphp5.so
с участием yum reinstall
. Вот результат:
[root@xxxx etc]# yum reinstall php
Loaded plugins: fastestmirror, local, priorities, security, update-motd, upgrade-helper
Setting up Reinstall Process
Loading mirror speeds from cached hostfile
* amzn-main: packages.us-east-1.amazonaws.com
* amzn-updates: packages.us-east-1.amazonaws.com
amzn-main | 2.1 kB 00:00
amzn-updates | 2.3 kB 00:00
265 packages excluded due to repository priority protections
Installed package php-5.3.20-1.29.amzn1.x86_64 (from amzn-updates) not available.
Nothing to do
Из этого сообщения я не понимаю, в чем проблема. Не удается найти пакет на сервере обновлений? Сам сервер недоступен (надеюсь, временно)? Или это исключение пакета из-за приоритетной защиты и отказ переустановить его?
Как лучше всего решить эту проблему, которая позволит мне восстановить старую версию PHP и вернуть ее под управление диспетчера пакетов?
Amazon заменил пакет PHP 5.3.20 более новым выпуском (для исправлений безопасности и т. Д.). Вместо этого просто обновите его:
yum update php
И ради Пита, не делайте этого в продакшене! Запустите новый экземпляр и проведите там свои эксперименты.