我们正在使用 iuscommunity repo 运行 CentOS 6 节点,并希望将之前安装的 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
答案1
您是否尝试过删除 php53u?一个简单的方法:
yum remove php53u
其次是:
yum install php54
应该可以帮你解决问题。如果没有,那么你可以尝试使用“rpm”工具删除 php53u 包,保持依赖关系不变,但首先检查已安装包的列表,以便以后可以从新的 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”)。
完成此操作后,只需通过 yum 安装 php54 包:
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
我希望这有帮助 :-)
答案2
另一种方法是使用 yum 插件yum-plugin-replace
(如http://iuscommunity.org/pages/IUSClientUsageGuide.html)。
yum install yum-plugin-replace
之后您可以通过以下方式替换它:
yum replace php53u --replace-with php54
这是 ius 推荐的方式,因为它还会根据需要尝试为所有已安装的依赖项寻找替代品。