CentOS - 尝试降级 php

CentOS - 尝试降级 php

我需要将 PHP 5.3 降级到 5.2,我使用的是 CentOS 5.5 x86_64 机器,运行 Apache 2.2.3 和 MySQL 5.1.54。我遇到了一些问题,现在完全不知所措了……不确定具体要包括哪些步骤/什么的,所以我只是试着分解一下我做了什么让我到了崩溃的边缘……

以下是我迄今为止采取的步骤:

(1)我尝试使用以下命令卸载 PHP 5.3:

rpm -e --nodeps php-devel php php-cli php-common php-mcrypt php-mysql 
php-pdo php-ldap php-mbstring php-xml php-xmlrpc php-odbc php-imap 
php-snmp php-gd

//Yielded:
warning: /etc/php.ini saved as /etc/php.ini.rpmsave

(2)然后我尝试安装php:

yum install php-devel php php-cli php-common php-mcrypt php-mysql php-pdo php-ldap php-mbstring php-xml php-xmlrpc php-odbc php-imap php-snmp php-gd

但是,愚蠢的是,我(后来)意识到我没有指定 repo 或 php 版本。幸运的是(?),什么都没有安装,因为它产生了以下结果:

Transaction Check Error:
  package libmcrypt-2.5.8-4.el5.centos.x86_64 (which is newer than libmcrypt-2.5.7-5.el5.i386) is already installed

(3)虽然一开始我并没有注意到,所以我重新启动了 apache,然后运行:yum upgrade

一切都运行顺利。

(4)编辑 /etc/my.cnf,将 skip-bdb 放入其中,并启动 mysqld

(5)运行:mysql_upgrade -uadmin -pcat /etc/psa/.psa.shadow`

(6)在尝试通过 Google 寻找解决方案后,我偶然发现一篇文章说我需要 yum-allowdowngrade,因此,我运行了这个:yum install yum-allowdowngrade

(7)为了确保我没有安装 php,我运行了:yum remove php

结果如下:

Loaded plugins: allowdowngrade, fastestmirror
Setting up Remove Process
No Match for argument: php
Loading mirror speeds from cached hostfile
 * atomic: www6.atomicorp.com
 * base: mirror.rackspace.com
 * epel: mirror.cogentco.com
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
atomic                                                                                        | 1.9 kB     00:00     
base                                                                                          | 2.1 kB     00:00     
epel                                                                                          | 3.7 kB     00:00     
extras                                                                                        | 2.1 kB     00:00     
rusia-repo                                                                                    |  951 B     00:00     
updates                                                                                       | 1.9 kB     00:00     
Package(s) php available, but not installed.
No Packages marked for removal

(8)然后,我运行:

yum --allow-downgrade --enablerepo=rusia-repo install php-devel-5.2.17-1.el5.x86_64 php-5.2.17-1.el5.x86_64 php-cli-5.2.17-1.el5.x86_64 php-common-5.2.17-1.el5.x86_64 php-mcrypt-5.2.17-1.el5.x86_64 php-mysql-5.2.17-1.el5.x86_64 php-pdo-5.2.17-1.el5.x86_64 php-ldap-5.2.17-1.el5.x86_64 php-mbstring-5.2.17-1.el5.x86_64 php-xml-5.2.17-1.el5.x86_64 php-xmlrpc-5.2.17-1.el5.x86_64 php-odbc-5.2.17-1.el5.x86_64 php-imap-5.2.17-1.el5.x86_64 php-snmp-5.2.17-1.el5.x86_64 php-gd-5.2.17-1.el5.x86_64 

结果如下:

Loaded plugins: allowdowngrade, fastestmirror
Loading mirror speeds from cached hostfile
 * atomic: www6.atomicorp.com
 * base: mirror.rackspace.com
 * epel: mirror.cogentco.com
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
atomic                                                                                        | 1.9 kB     00:00     
base                                                                                          | 2.1 kB     00:00     
epel                                                                                          | 3.7 kB     00:00     
extras                                                                                        | 2.1 kB     00:00     
rusia-repo                                                                                    |  951 B     00:00     
updates                                                                                       | 1.9 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.2.17-1.el5 set to be updated
--> Processing Dependency: php-common = 5.2.17-1.el5 for package: php
--> Processing Dependency: php-cli = 5.2.17-1.el5 for package: php
--> Finished Dependency Resolution
php-5.2.17-1.el5.x86_64 from rusia-repo has depsolving problems
  --> Missing Dependency: php-common = 5.2.17-1.el5 is needed by package php-5.2.17-1.el5.x86_64 (rusia-repo)
php-5.2.17-1.el5.x86_64 from rusia-repo has depsolving problems
  --> Missing Dependency: php-cli = 5.2.17-1.el5 is needed by package php-5.2.17-1.el5.x86_64 (rusia-repo)
Error: Missing Dependency: php-common = 5.2.17-1.el5 is needed by package php-5.2.17-1.el5.x86_64 (rusia-repo)
Error: Missing Dependency: php-cli = 5.2.17-1.el5 is needed by package php-5.2.17-1.el5.x86_64 (rusia-repo)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

我不断收到一系列这些错误,因此决定只运行 yum update,更新回 php 5.3,看看是否可以让它正常工作,直到我弄清楚如何正确降级......

因此,我运行了 yum update 并得到:

yum update
Loaded plugins: allowdowngrade, fastestmirror
Loading mirror speeds from cached hostfile
 * atomic: www6.atomicorp.com
 * base: mirror.rackspace.com
 * epel: mirror.symnds.com
 * extras: mirror.symnds.com
 * updates: mirror.symnds.com
Setting up Update Process
No Packages marked for Update

然后,我运行:

yum install php-devel php php-cli php-common php-mcrypt php-mysql php-pdo php-ldap php-mbstring php-xml php-xmlrpc php-odbc php-imap php-snmp php-gd

但结果是:

Transaction Check Error:
  package libmcrypt-2.5.8-4.el5.centos.x86_64 (which is newer than libmcrypt-2.5.7-5.el5.i386) is already installed
  file /usr/bin/phar.phar from install of php-cli-5.3.6-3.el5.art.i386 conflicts with file from package php-cli-5.3.6-3.el5.art.x86_64
  file /usr/bin/phpize from install of php-cli-5.3.6-3.el5.art.i386 conflicts with file from package php-cli-5.3.6-3.el5.art.x86_64

我尝试了服务 httpd 重启并得到:

Stopping httpd:                                            [FAILED]
Starting httpd: httpd: Syntax error on line 210 of /etc/httpd/conf/httpd.conf: Syntax error on line 6 of /etc/httpd/conf.d/php.conf: Cannot load /etc/httpd/modules/libphp5.so into server: /etc/httpd/modules/libphp5.so: cannot open shared object file: No such file or directory

所以,现在,我完全困惑了,真的真的需要一些帮助......

答案1

每当我遇到这样的事情时(需要比 repo 中更旧的副本,或者更新的副本),我发现从源代码构建自己的 RPM 更容易,我建议这样做。

它并不太难,只是稍微耗费一些时间,并且您可以确保在您的系统上使用最新的所有其他内容,以及旧版本(或新版本)的 PHP。

http://www.imminentweb.com/technologies/create-centos-php-rpm

应该可以帮助您掌握在 CentOS 上构建自己的 PHP RPM 的基础知识。

如果您继续沿着这条路走下去,您可能会遇到我所说的“依赖地狱”旧 PHP 需要旧版本的 X,而新版本的 Y 又需要旧版本的 X,如果您想要旧版本的 X,您还需要降级 Y,依此类推。10-15 个依赖项之后,您将运行一个相当不安全的环境,因为您的系统中很大一部分正在运行旧代码。

答案2

“缺少依赖项”错误通常是由混合存储库引起的。我建议您禁用atomicepel存储库,然后重试CentOS 测试基于指南或杰森·利特卡回購。

答案3

您可能想尝试:yum downgrade php

在执行此操作之前,请禁用所有附加存储库。您将面临的一个主要问题是,某些附加存储库可能会安装 PHP 5.3 所需的依赖项,但 PHP 5.2 不需要(例如不同的 sqlite 版本)。

在这种情况下,您可能必须强制删除模块:

rpm -e --nodeps 软件包名称

然后尝试降级。

如果其他方法都失败了,请使用 rpm -e --nodeps 删除所有 php 5.3 包,然后使用 centOS 源重新安装。

相关内容