当前运行的是 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-redis5,php-pecl-msgpack,php-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 reset
dnf distro-sync