Назад | Перейти на главную страницу

Установка PHP на чистый Amazon Linux AMI

Я пытаюсь заставить скрипт запускать новые экземпляры Amazon Linux EC2 с php55 и Amazon PHP sdk. Однако я столкнулся с проблемой, которая, как мне кажется, вызвана конфликтами версий PHP. Думаю, мне кое-что не хватает в том, как работает yum в этом случае.

Чтобы свести это к простейшему случаю, если я запускаю:

yum install -y httpd24 php55 php-amazon-sdk2

Я получил "Ошибка: php55-common конфликтует с php-common-5.3.29-1.7.amzn1.x86_64"

Однако, если я бегу:

yum install -y httpd24 php55

А потом отдельно запустить:

yum install -y php-amazon-sdk2

Работает отлично. Чтобы было ясно, когда я запускаю эти команды, в системе вообще нет версии PHP, поэтому она не конфликтует с тем, что уже есть.

Я не очень хорошо знаком с тем, как работают зависимости yum, но похоже, что это указывает на то, что php-amazon-sdk2 подходит для php55, но по какой-то причине он пытается принудительно запустить php53, если я установлю его все одновременно. Что правильный способ исправить это (то есть я не хочу просто принудительно устанавливать его, игнорируя зависимости, но я также не хочу, чтобы это делалось отдельными шагами)?

Это связано с ограничением RPM / YUM в Amazon Linux и способом упаковки нескольких версий php. Одна из особенностей Amazon Linux заключается в том, что существует несколько версий для нескольких языков и других программных пакетов с открытым исходным кодом. Во многих случаях эти пакеты должны конфликтовать друг с другом, поскольку программное обеспечение не предназначено для одновременной установки.

В этом случае происходит то, что каждый из пакетов php имеет общие предоставляемые (т.е. php, php54 и php55 все предоставляют php). Для php-amazon-sdk2 требуется просто php, для чего нужно указать пакет php55 в командной строке yum. Ошибка конфликта исходит из пакета php-guzzle-Guzzle, для которого требуется php-common. В этом случае, если вы добавите php55-common к вашей команде yum при установке пакета php-amazon-sdk2, это будет успешно.

yum install -y httpd24 php55 php55-common php-amazon-sdk2

Как правило, в AMI Amazon Linux, если вы получаете ошибки конфликта с php, временным решением является добавление правильного версионного пакета в командную строку yum. В этом случае сообщаемый конфликт был php-common. Вы знали, что хотите установить php55, поэтому оставалось просто сказать yum, что именно вы хотите (т.е. мне нужен php55-common, а не php-common). Если вы устанавливаете пакет, для которого требуется php, и вы не указываете другие пакеты php, тогда yum выберет общие пакеты php, и будет установлен PHP 5.3. Эти конфликтные ошибки обычно возникают в пакетах php54 и php55.

Я согласен с тем, что этот способ не является интуитивно понятным, и эта проблема была отмечена командой Amazon Linux AMI. Они изучают несколько различных решений этой проблемы. Они очень открыты для отзывов об упаковке php и об AMI Amazon Linux в целом. Они следят за форумами aws, так что это лучшее место для сообщений о проблемах. Если у вас есть AWS Premium Support, вы можете открыть с ними дело, и оно будет отправлено команде Amazon Linux AMI.

Спасибо, Хит

У меня была аналогичная проблема с пакетом php-mbstring. Для тех из вас, кого сюда прислал Google, решением для меня было установить php55-mbstring (на моем экземпляре EC2 был php 5.5). Узнайте, какая версия php установлена ​​на вашем компьютере (команда php -v), затем добавьте эту версию рядом с вашим PHP-пакетом, как я сделал выше. Надеюсь, это вам поможет.