Я хочу обновить свой сервер CentOS 6.4 с php53 (репозиторий epel) до php53u (репозиторий ius). Я уже включил репозиторий ius, но не решаюсь просто поиграть, потому что на сервере есть производственные веб-сайты.
(Поскольку производственные сайты находятся в Drupal 7, я хочу остаться на треке 5.3, но я также хочу установить сайт разработки Drupal 8, для которого требуется минимум 5.3.10 - epel дает мне только 5.3.3)
Может ли кто-нибудь подсказать мне, какой подход будет наиболее безопасным:
Пара минут простоя вполне приемлема, но не более.
Я предполагаю, что ваши команды должны быть на двух отдельных строках. Я отредактировал его, чтобы отразить это.
Проблема здесь в том, что «yum erase php» также извлекает зависимости. Это означает, что вы потеряете все установленные вами пакеты, зависящие от PHP. Существует команда yum под названием replace
. но это не всегда присутствует и иногда ... удивляет. И не в лучшую сторону.
Таким образом, я предпочитаю вырваться yum shell
. Команды для завершения вашей операции будут выглядеть так:
yum shell
erase php
install php53u php53u-common php53u-xml php53u-devel php53u-mysql php53u-pecl php53u-gd
ts
run
По порядку мы:
yum shell
y/n
запросить одобрение перед продолжением.Чтобы убедиться, что я действительно все понял, я, как известно, написал небольшую часть bash. Что-то вроде:
rpm -qa --queryformat '%{NAME}-%{VERSION}.%{ARCH}\n' | grep -E '^php53[^u].*5\.3' | tr '\n' ' '
rpm -qa --queryformat '%{NAME}-%{VERSION}.%{ARCH}\n' | grep -E '^php53[^u].*5\.3' | sed 's/php53/php53u/;s/-5\.3\..*//'
Первая строка дает мне список пакетов, которые я поставил после erase
Внутри yum shell
. Вторая строка дает мне список пакетов, которые нужно поставить после install
. Обратите внимание, что вам, возможно, придется обрабатывать некоторые вспомогательные пакеты (например, из PECL) вручную. Используйте какой-нибудь вариант на rpm -qa | grep php | grep -vE '^php53.*5\.3'
чтобы выследить их. Однако они должны быть редкими.
Что я обычно делаю в CentOS 6.x для обновления php по умолчанию с 5.x до ius php53u:
rpm -Uhv https://centos6.iuscommunity.org/ius-release.rpm
yum -y install yum-utils yum-plugin-replace
yum -y install libtidy
yum -y --enablerepo=ius-archive replace php --replace-with php53u
yum -y --enablerepo=ius-archive install php53u php53u-common php53u-imap php53u-bcmath php53u-gd php53u-dba php53u-mbstring php53u-mcrypt php53u-mysql php53u-soap php53u-xml php53u-tidy
php -v
Моя проблема вращалась вокруг проблемы "общие конфликты php53 с общими php". Коробка - старый сервер, и я собирался протестировать код, прежде чем поместить его на производственную машину. Он работает под управлением Centos 5 и раньше был производственным, но теперь его отправили на тестирование. Он слишком стар, чтобы переходить на Centos 6x без новых внутренностей, поэтому я пока не могу его использовать.
Итак ... практически ничего не работало, пока я не наткнулся на эту идею в сети:
Установите репозитории epel и ius. Удалите все пакеты php. Установите все пакеты php53u, как указано в ответе выше.
Я вообще не использовал "yum erase".
Хорошо, вот что я сделал, что сработало, а что нет:
Три сценария:
просто установите php53u и посмотрите, что произойдет, заменяет php, но жалуется на зависимости
удалите php и установите php53u
Вот тот, который сработал как шарм:
yum erase php
yum install php53u php53u-common php53u-xml php53u-devel php53u-mysql php53u-pecl php53u-gd
Комментаторы рекомендовали сначала протестировать это на тестовом сервере (спасибо, что подбадривали меня!). Я тестировал его на сервере CentOS 5.9, на котором запущен сайт разработки Drupal 7 (и целая куча вещей, не связанных с php). На этом сервере работает сервер mysql 5.6, который требует установки rpm php53u-mysql вручную с помощью --nodeps, чтобы заставить его работать - просто добавив это здесь для полноты картины.
В конце концов, простоя не было, просто была аккуратная перезагрузка httpd.