本来我想更新ruby2.5
到ruby2.7
.
然而passenger
阻碍了更新(yum 抛出了一个错误),所以我删除 passenger
并随后ruby2.5
安装ruby2.7
。
然后安装ruby2.7
就成功了,但是现在我无法重新安装passenger
。(试图智胜错误只会改变它)
$ sudo yum -y install passenger
passenger 2.7 kB/s | 833 B 00:00
Error:
Problem: conflicting requests
- package passenger-6.0.4-3.el8.x86_64 from epel requires libruby.so.2.5()(64bit), but none of the providers can be installed
- package passenger-6.0.10-1.el8.x86_64 from passenger requires libruby.so.2.5()(64bit), but none of the providers can be installed
...
- package passenger-6.0.18-1.el8.x86_64 from passenger requires libruby.so.2.5()(64bit), but none of the providers can be installed
- package passenger-6.0.19-1.el8.x86_64 from passenger requires libruby.so.2.5()(64bit), but none of the providers can be installed
...
- package passenger-6.0.9-1.el8.x86_64 from passenger requires libruby.so.2.5()(64bit), but none of the providers can be installed
- package ruby-libs-2.5.5-105.module_el8.1.0+214+9be47fd7.x86_64 from appstream is filtered out by modular filtering
...
- package ruby-libs-2.5.9-111.module_el8+475+35a6c697.x86_64 from appstream is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages)
关于官方乘客文件,我删除passenger-repo
并重新安装它但没有成功。
对我来说,似乎有什么东西仍然粘在 ruby 2.5
这里。
谁能帮我?
我的存储库:
appstream CentOS Stream 8 - AppStream
baseos CentOS Stream 8 - BaseOS
docker-ce-stable Docker CE Stable - x86_64
docker-ce-test Docker CE Test - x86_64
epel Extra Packages for Enterprise Linux 8 - x86_64
epel-next Extra Packages for Enterprise Linux 8 - Next - x86_64
extras CentOS Stream 8 - Extras
extras-common CentOS Stream 8 - Extras common packages
passenger passenger
powertools CentOS Stream 8 - PowerTools
remi-modular Remi's Modular repository for Enterprise Linux 8 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 8 - x86_64
这是由于 RHEL 8 中引入了一项称为模块化的技术(后来在 CentOS Linux/Stream 8 中可用)。它允许发行版在同一个存储库中发布同一软件包的多个版本,一次只有一组对软件包管理器可见。这可能就是您从 ruby 2.5 升级到 2.7 的方式。
2.5意味着
[d]
dnf 默认情况下只会看到模块流中的包ruby:2.5
。来自其他模块流的包将被过滤掉。如果您选择加入其他模块流之一,例如ruby:2.7
,dnf 将只看到这些包并过滤掉其他所有内容,包括来自 的默认包ruby:2.5
。如果您将自己限制在发行版提供的软件包中,它就足够好了,但是当您添加第三方存储库(您启用了多个第三方存储库)时,它很快就会崩溃。模块化有一个关键的设计缺陷,即您只能在同一构建系统中构建的模块之间具有依赖关系,并且非模块化包只能依赖于默认流中的模块化包。在这种情况下,这意味着 EPEL 或乘客存储库中的乘客是根据 ruby 2.5 的默认版本构建的。这就是这样的错误消息告诉您的内容:
因为 Passenger 需要 libruby.so.2.5,所以如果
ruby:2.5
模块流被过滤掉,那么 Passenger 就变得不可卸载,这就是这部分错误消息告诉您的内容:您最好的选择是切换回
ruby:2.5
模块流,以便第三个软件包可以工作。您可以通过卸载所有 ruby 软件包,切换到ruby:2.5
,然后重新安装所需的 ruby 软件包来完成此操作。