从 php53u 优雅升级到 php54

从 php53u 优雅升级到 php54

我们正在使用 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 推荐的方式,因为它还会根据需要尝试为所有已安装的依赖项寻找替代品。

相关内容