为什么 yum 在 CentOS 上安装了过时的软件包?(特别是 PHP 5.1)如何修复?

为什么 yum 在 CentOS 上安装了过时的软件包?(特别是 PHP 5.1)如何修复?

我正在一台全新的 CentOS 服务器上工作,非常恼火地发现 yum 的运行不如 Ubuntu 上的“apt-get install”那么顺畅和出色。

安装 LAMP 堆栈后,我运行了以下命令:

$ yum install php
$ yum install mysql

此外:

$ yum install mysql-server
$ yum install mysql-devel
$ yum install php-mysql

現在運行:

$ rpm -qa | grep php

...显示我安装了各种 php 5.1.6 软件包,并且至少需要 5.2。此外,我看到它安装了 mysql 5.0.77,尽管当前版本是 5.5.20。但希望 mysql 5.0 可以工作。PHP 5.1 不行。

因此真正的问题是:

我该如何修复我的 PHP 以使其成为最新的稳定版本(根据 PHP.net 为 5.3.9)?我该如何让我的 CentOS 机器更像 Ubuntu 那样工作,这样我就不必再处理这个问题了?

非常感谢。

编辑:上周一家托管公司安装了 CentOS 5.7,所以我不知道他们为什么要安装旧版本的 CentOS,而不是最新版本。我至少需要 PHP 3.2,所以我很感激关于如何做到这一点的建议。我不太熟悉软件包和存储库,但似乎任何人都可以启动存储库,所以我担心从某个随机存储库安装东西可能会感染服务器。

答案1

CentOS 是极为保守的 Red Hat Enterprise Linux 的衍生产品,因此软件包更新通常会比 RHEL 延迟更久。这两个发行版中的软件包都会稍微老一些。

如果您正在运行 CentOS 5,您应该尝试 CentOS 6 以看看它是否适合您的需求。

如果您需要比 CentOS 6 更先进的东西,您应该研究一下 Fedora。

后续问题:CentOS 已被“内部化”,并且集成得更加紧密。较新的 CentOS 版本将受益于更紧密的发布周期,但对于较旧的版本,此答案仍然适用。

答案2

它们并没有过时;它们是 CentOS 5 存储库中的最新版本。

为了稳定起见,Red Hat(以及 Ubuntu)从来不会将新的主要版本软件发布到给定操作系统版本的软件包存储库中 - 您不希望运行升级后突然发现您的配置不起作用。

相反,他们将安全修复和重要的错误修复移植到操作系统发布时“稳定”的软件版本中,避免引入新功能(及其错误)。

由于您使用的是 CentOS 5,因此官方存储库中有一些相当老的版本。但不用担心 - 您可能可以轻松找到包含所需软件版本的第三方存储库。

或者,为什么不升级到 6?

答案3

如果您想使用 Ubuntu,我建议您卸载 CentOS 并安装它。但您使用的必须是较旧版本的 CentOS。CentOS 6.2 使用 PHP 5.3 和 MySQL 5.1。

您可以使用Remi 存储库获取 Apache/PHP/MySQL 的较新版本

你不会让你的 CentOS 机器更像 Ubuntu,因为它不是Ubuntu。这就像问“如何才能让我的克莱斯勒驾驶起来更像福特”。


更新后的回应:

我对此投了一些反对票,所以我认为我的意图被误解了,让我尝试纠正它。

我已经在我们的环境中设置了一个 VPS 并安装了软件包,所以我应该在你所处的位置:

[root@centos5 /]# cat /etc/issue
CentOS release 5.7 (Final)
Kernel \r on an \m

[root@centos5 /]# rpm -qa |grep php
php-common-5.1.6-27.el5_7.4
php-mysql-5.1.6-27.el5_7.4
php-cli-5.1.6-27.el5_7.4
php-pdo-5.1.6-27.el5_7.4
php-5.1.6-27.el5_7.4

在我的第一个回复中,我假设您想要最新版本,那么您应该使用 Remi 存储库,正如我上面所述。但是,如果 centOS 中的 PHP 5.3 版本没问题(5.3.3),那么请继续阅读。

尝试安装 php53 时,系统会提示存在冲突,因为此包将涵盖与 PHP 5.1 包相同的内容。要解决此问题,您需要首先删除所有与 PHP 相关的包:

[root@centos5 /]# yum remove php*
[root@centos5 /]# rpm -qa |grep php
[root@centos5 /]# 

接下来要做的是使用 php53 安装等效软件包:

[root@centos5 /]# yum install php53 php53-cli php53-mysql
[root@centos5 /]# rpm -qa |grep php
php53-common-5.3.3-1.el5_7.5
php53-cli-5.3.3-1.el5_7.5
php53-pdo-5.3.3-1.el5_7.5
php53-5.3.3-1.el5_7.5
php53-mysql-5.3.3-1.el5_7.5

所以,PHP 相当简单。但 MySQL 则是另一回事,因为 MySQL 5.0 是默认 CentOS 存储库中唯一的 MySQL。我运行的是 64 位版本的 CentOS,如果你没有,则需要调整以下内容以适应 32 位。

有几种方法可以做到这一点,但我将使用 Remi 存储库。它已经存在多年,使用存储库比使用普通 RPM 文件更容易维护。

Remi 需要EPEL 存储库因此首先安装:

[root@centos5 /]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Retrieving http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
warning: /var/tmp/rpm-xfer.lvLBMJ: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]

接下来,安装 Remi repo RPM

[root@centos5 /]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
warning: /var/tmp/rpm-xfer.ztjinG: Header V3 DSA signature: NOKEY, key ID 00f97f56
Preparing...                ########################################### [100%]
   1:remi-release           ########################################### [100%]

接下来删除当前的 MySQL 服务器(否则在尝试安装新的服务器时会发生冲突)。笔记!如果您有数据库,请在执行此操作之前进行备份!

[root@centos5 /]# yum remove mysql*

然后您可以继续从 Remi 存储库安装 MySQL:

[root@centos5 /]# yum --enablerepo=remi install mysql.x86_64 mysql-server.x86_64

现在,当您尝试启动 MySQL 时,可能会失败,因为旧的 mysql 留下了一些东西,而这些东西很难清除。就我的情况而言,我需要删除一些东西才能让它正常工作。这些方法对我有用:

# rm -rf /usr/share/mysql
# rm -rf /var/lib/mysql
# yum --enablerepo=remi reinstall mysql-libs
# /usr/libexec/mysqld --skip-grant &
# mysql_install_db
# /etc/init.d/mysqld stop
# /etc/init.d/mysqld start

相关内容