我想将我的 CentOS 6.4 服务器从 php53 (epel 存储库) 升级到 php53u (ius 存储库)。我已经启用了 ius 存储库,但由于服务器上有生产网站,所以不太想尝试一下。
(因为生产站点使用的是 Drupal 7,所以我想继续使用 5.3 轨道,但我还想安装一个 Drupal 8 开发站点,这需要最低 5.3.10 - epel 只给了我 5.3.3)
有人能给我提示一下最安全的方法吗:
- 删除 php53 (epel) 并安装 php53u
- 只需安装 php53u 并看看会发生什么
- 您的其他推荐
几分钟的停机时间是可以接受的,但不能更多。
答案1
我假设您的命令应该放在两行上。我对其进行了编辑以反映这一点。
这里的问题是“yum eras php”也会删除依赖项。这意味着您将丢失所有依赖 PHP 的软件包。有一个名为replace
. 的 yum 命令,但它并不总是存在,有时... 会让人感到意外。而且不是好事。
因此,我更喜欢 break out yum shell
。完成操作的命令如下:
yum shell
erase php
install php53u php53u-common php53u-xml php53u-devel php53u-mysql php53u-pecl php53u-gd
ts
run
按顺序,我们是:
- 发射
yum shell
- 告诉它删除 PHP(注意它实际上不会做那还没有
- 要求它安装列出的软件包(同样,这只会将它们添加到列表中)
- 请求“transaction-show”;即要求 yum 告诉我们它要做什么。实际上,这只是一次健全性检查,因为我们将在下一步中再次看到这一点。
- 告诉 yum 按照列表运行事务。它将检查依赖项并生成要执行的完整操作列表,并
y/n
在继续之前向您显示传统的 yum 提示以获得批准。
为了确保我真正理解了所有内容,我编写了一些快速的 bash。例如:
rpm -qa --queryformat '%{NAME}-%{VERSION}.%{ARCH}\n' | grep -E '^php53[^u].*5\.3' | tr '\n' ' '
rpm -qa --queryformat '%{NAME}-%{VERSION}.%{ARCH}\n' | grep -E '^php53[^u].*5\.3' | sed 's/php53/php53u/;s/-5\.3\..*//'
erase
第一行给出了我放在后面的软件包列表yum shell
。第二行给出了要放在 后面的软件包列表install
。请注意,您可能必须手动处理一些辅助软件包(例如来自 PECL 的软件包)。使用一些变体来rpm -qa | grep php | grep -vE '^php53.*5\.3'
追踪它们。不过,它们应该很少见。
答案2
好的,这就是我所做的,什么有效,什么无效:
三种情况:
只需安装 php53u 并查看会发生什么,它会替换 php,但会抱怨依赖关系
删除 php 并安装 php53u
这是一个非常有效的方法:
yum erase php
yum install php53u php53u-common php53u-xml php53u-devel php53u-mysql php53u-pecl php53u-gd
评论者的建议是,先在测试服务器上测试一下(谢谢您的鼓励!)。我在一台运行 Drupal 7 开发站点(以及一大堆与 php 无关的东西)的 CentOS 5.9 服务器上进行了测试。该服务器运行 mysql 5.6 服务器,需要使用 --nodeps 手动安装 php53u-mysql rpm 才能使其正常工作 - 只是为了完整性才在这里添加它。
最后,没有出现停机,只是顺利地重新加载了 httpd。
答案3
我的问题围绕着“php53-common 与 php-common 冲突”问题。这台机器是一台旧服务器,我打算在将其放到生产机器上之前测试一些代码。它运行的是 Centos 5,以前是生产机器,但现在降级为测试机器。它太旧了,无法在没有新内核的情况下升级到 Centos 6x,所以我现在只能使用它了。
所以...几乎没有什么办法可行,直到我在网上偶然发现了这个想法:
安装 epel 和 ius 存储库。删除所有 php 包按照上述答案安装所有 php53u 包。
我根本没有使用“yum eras”。
答案4
在 centOS 6.x 中,我通常将默认 php 从 5.x 升级到 ius php53u 的操作是:
rpm -Uhv https://centos6.iuscommunity.org/ius-release.rpm
yum -y install yum-utils yum-plugin-replace
yum -y install libtidy
yum -y --enablerepo=ius-archive replace php --replace-with php53u
yum -y --enablerepo=ius-archive install php53u php53u-common php53u-imap php53u-bcmath php53u-gd php53u-dba php53u-mbstring php53u-mcrypt php53u-mysql php53u-soap php53u-xml php53u-tidy
php -v