CentOS 8.3 - 如何将 PHP 安装从 Remi 切换到 AppStream?

CentOS 8.3 - 如何将 PHP 安装从 Remi 切换到 AppStream?

当前运行的是 Remi 的 PHP 7.4。这是一个模块化的 dnf 安装,在 7.2 是 CentOS 上可用的最新 PHP 时,它取代了 PHP 7.2 AppStream 软件包。换句话说,Remi 软件包是系统 PHP使用 /etc/php.ini 配置 - 而不是使用 /opt/remi/PHP74/php.ini 的附加 PHP 安装。

然而,最近 CentOS AppStream 提供了 PHP 7.4,我想用等效的 AppStream 包替换 Remi 包。我该怎么做?

# dnf module list php

CentOS Linux 8 - AppStream
Name             Stream                   Profiles                               Summary
php              7.2 [d]                  common [d], devel, minimal             PHP scripting language
php              7.3                      common [d], devel, minimal             PHP scripting language
php              7.4                      common [d], devel, minimal             PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name             Stream                   Profiles                               Summary
php              remi-7.2                 common [d], devel, minimal             PHP scripting language
php              remi-7.3                 common [d], devel, minimal             PHP scripting language
php              remi-7.4 [e]             common [d], devel, minimal             PHP scripting language
php              remi-8.0                 common [d], devel, minimal             PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

我熟悉dnf 模块化在某种程度上,但我怀疑它是否足够聪明,能够使用任何类型的快捷方法干净地处理所有事情,避免从头开始卸载和重新安装 PHP 及其所有模块。如果能提供阻力最小的路径建议,我将不胜感激。

答案1

(RHEL 8.4+)与将任何其他模块切换到不同流的方式相同:

dnf module switch-to php:7.4

请注意,如果您使用了任何不在新模块流中的 remi 包,此操作将会失败,解决方案是手动从系统中完全删除 PHP,然后切换模块流,然后重新安装 PHP。

答案2

修改后的答案...

dnf 确实有一个令人满意的简短方法,可以避免从头开始删除和重新安装 PHP 的繁琐工作。需要做大量的准备工作,但基本工作涉及三个命令。

dnf module reset php
dnf module install php:7.4
dnf distro-sync

在运行之前请注意dnf distro-sync,保持 remi-modular repo 处于启用状态以保留某些模块,例如php-pecl-redis5php-pecl-msgpackphp-pecl-imagick等等(见下文)。

经过一系列交易后,除了 *.rpmnew 文件保持现有 *.conf 文件完好无损之外没有任何错误,出于好奇,我运行了几个额外的命令。

# dnf upgrade php\*
Last metadata expiration check: 1:09:55 ago on Fri 28 May 2021 02:05:10 PM EDT.
Dependencies resolved.
Nothing to do.
Complete!

# dnf remove --duplicates
Last metadata expiration check: 1:10:37 ago on Fri 28 May 2021 02:05:10 PM EDT.
Error: No duplicated packages found for removal.

一切都像以前一样启动和运行,没有明显的问题。只有一个问题需要注意:来自 remi-modular 的少数模块没有被 CentOS 或 EPEL repos 替换,这是在 Serverfault 问答中得到最好的解释。 记笔记第 75 期以及@RemiCollet 的有趣评论。

值得注意的是@MichaelHampton 之前关于切换流的回答。如果 RHEL 是 8.4 版(CentOS & Stream、AlmaLinux 和 Rocky Linux 的 8.4 版可能也是一样),那么结合使用dnf module switch-to php:7.4是一种较新的替代方案。dnf module resetdnf distro-sync

相关内容