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

Изящное обновление с php53u до php54

Мы запускаем узел CentOS 6 с использованием репозитория iuscommunity и хотим обновить ранее установленный php53u до php54.

Однако это приводит к конфликту зависимостей между php53u и php54. У кого-нибудь есть идеи по этой проблеме?

--> Running transaction check
---> Package php54-fpm.i686 0:5.4.5-1.ius.el6 will be installed
--> Processing Dependency: php-common = 5.4.5-1.ius.el6 for package: php54-fpm-5.4.5-1.ius.el6.i686
---> Package php54-gd.i686 0:5.4.5-1.ius.el6 will be installed
---> Package php54-mbstring.i686 0:5.4.5-1.ius.el6 will be installed
---> Package php54-pecl-apc.i686 0:3.1.11-2.ius.el6 will be installed
--> Processing Dependency: php54 >= 5.3.5-1 for package: php54-pecl-apc-3.1.11-2.ius.el6.i686
--> Running transaction check
---> Package php54.i686 0:5.4.5-1.ius.el6 will be installed
--> Processing Dependency: php54-cli = 5.4.5-1.ius.el6 for package: php54-5.4.5-1.ius.el6.i686
---> Package php54-common.i686 0:5.4.5-1.ius.el6 will be installed
--> Running transaction check
---> Package php54-cli.i686 0:5.4.5-1.ius.el6 will be installed
--> Processing Conflict: php54-5.4.5-1.ius.el6.i686 conflicts php53u
--> Processing Conflict: php54-5.4.5-1.ius.el6.i686 conflicts php < 5.4
--> Finished Dependency Resolution
Error: php54 conflicts with php53u
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Вы пробовали удалить php53u? Простой:

yum remove php53u

С последующим:

yum install php54

Должно быть сделано за вас. Если это не так, вы можете попробовать удалить пакеты php53u с помощью инструмента rpm, оставив зависимости нетронутыми, но сначала проверьте список установленных пакетов, чтобы вы могли позже переустановить их из нового репозитория php54:

rpm -qa | grep ^php53u.* > /root/php-packages.log

Сохраните копию подготовленного списка. На одном из моих серверов этот список выглядит так:

$ rpm -qa | grep ^php54*
php54-common-5.4.4-1.ius.el6.x86_64
php54-pdo-5.4.4-1.ius.el6.x86_64
php54-mysql-5.4.4-1.ius.el6.x86_64
php54-fpm-5.4.4-1.ius.el6.x86_64
php54-gd-5.4.4-1.ius.el6.x86_64
php54-cli-5.4.4-1.ius.el6.x86_64
php54-5.4.4-1.ius.el6.x86_64
php54-mbstring-5.4.4-1.ius.el6.x86_64

Затем я могу удалить их, не удаляя зависимости как таковые:

for p in $( cat /root/php-packages.log ); do rpm -e --nodeps $p; done

(Обратите внимание, что здесь я использую php54, вам нужно будет использовать php53u).

Как только вы это сделаете, просто установите пакет (ы) php54 через yum:

yum install php54

ИЛИ вы можете кое-что автоматизировать переустановку всего:

yum install $( cat /root/php-packages.log | sed 's/php53u/php54/g' )

Готово.

Вот один вкладыш на все:

rpm -qa | grep ^php53u.* > /root/php-packages.log; for p in $( cat /root/php-packages.log ); do rpm -e --nodeps $p; done; yum install $( cat /root/php-packages.log | sed 's/php53u/php54' ) -y

Надеюсь, это поможет :-)

Другой способ сделать это - использовать плагин yum. yum-plugin-replace (как описано на http://iuscommunity.org/pages/IUSClientUsageGuide.html).

yum install yum-plugin-replace

После этого вы можете заменить его через:

yum replace php53u --replace-with php54

Этот способ рекомендуется ius, поскольку он также попытается найти замену для всех установленных зависимостей, если это необходимо.