从 php53u 到 php54 的优雅升级

spa*_*oid 5 php centos php-fpm alternative-php-cache

我们正在使用 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
Run Code Online (Sandbox Code Playgroud)

小智 5

您是否尝试过删除 php53u?一个简单的:

yum remove php53u
Run Code Online (Sandbox Code Playgroud)

其次是:

yum install php54
Run Code Online (Sandbox Code Playgroud)

应该为你做的伎俩。如果没有,那么您可以尝试使用“rpm”工具删除 php53u 包,保持依赖项不变,但首先检查已安装的包列表,以便稍后从新的 php54 存储库中重新安装它们:

rpm -qa | grep ^php53u.* > /root/php-packages.log
Run Code Online (Sandbox Code Playgroud)

保留一份清单的副本。在我的一台服务器上,此列表如下所示:

$ 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
Run Code Online (Sandbox Code Playgroud)

然后我可以删除这些,而不删除依赖项,例如:

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

(请注意,我在这里使用的是“php54”,您需要使用“php53u”)。

完成此操作后,只需通过 yum 安装 php54 包:

yum install php54
Run Code Online (Sandbox Code Playgroud)

或者你可以自动重新安装所有东西:

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

完毕。

这是整个事情的一个班轮:

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
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助 :-)