我正在尝试从 Fedora 30 升级到 31,并且我已成功完成以下两个步骤:
dnf upgrade --refresh
dnf install dnf-plugin-system-upgrade
但是,当我执行下一步时:
dnf system-upgrade download --releasever=31
...我明白了:
Before you continue ensure that your system is fully upgraded by running "dnf --refresh upgrade". Do you want to continue [y/N]: y
Adobe Systems Incorporated 35 kB/s | 2.9 kB 00:00
Fedora Modular 31 - x86_64 23 kB/s | 25 kB 00:01
Fedora Modular 31 - x86_64 - Updates 19 kB/s | 16 kB 00:00
Fedora 31 - x86_64 - Updates 17 kB/s | 18 kB 00:01
Fedora 31 - x86_64 37 kB/s | 25 kB 00:00
google-chrome 18 kB/s | 1.3 kB 00:00
MariaDB 9.7 kB/s | 2.9 kB 00:00
packages-microsoft-com-prod 16 kB/s | 3.0 kB 00:00
PostgreSQL common RPMs for Fedora 31 - x86_64 11 kB/s | 3.0 kB 00:00
PostgreSQL 12 for Fedora 31 - x86_64 3.3 kB/s | 3.8 kB 00:01
RPM Fusion for Fedora 31 - Free - Updates 29 kB/s | 9.1 kB 00:00
RPM Fusion for Fedora 31 - Free 26 kB/s | 9.9 kB 00:00
RPM Fusion for Fedora 31 - Nonfree - Updates 11 kB/s | 9.4 kB 00:00
RPM Fusion for Fedora 31 - Nonfree 21 kB/s | 10 kB 00:00
skype (stable) 6.6 kB/s | 2.9 kB 00:00
teams 4.9 kB/s | 3.0 kB 00:00
Fedora 31 - x86_64 - VirtualBox 247 B/s | 181 B 00:00
Visual Studio Code 19 kB/s | 3.0 kB 00:00
Yarn Repository 25 kB/s | 2.9 kB 00:00
terminate called after throwing an instance of 'libdnf::ModulePackageContainer::EnableMultipleStreamsException'
what(): Cannot enable multiple streams for module 'ant'
Aborted (core dumped)
有什么办法可以克服这个问题吗?欢迎任何和所有的想法。我不介意我是否必须禁用/删除一些额外的软件包存储库,如果这就是需要的......
答案1
禁用模块化存储库的傻瓜指南
我不确定这到底是什么来自 dbdemon 的评论意思是:
看来我必须禁用“Fedora Modular”存储库。
所以稍微搜索一下就可以找到这篇文章如何使用 Fedora / RHEL 8 模块化存储库。
您可以通过以下方式列出已安装的模块化存储库:
dnf module list --enabled
我得到这个输出:
Docker CE Stable - x86_64 12 kB/s | 9.8 kB 00:00
...
Fedora Modular 30 - x86_64
Name Stream Profiles Summary
gimp 2.10 [d][e] default [d] GIMP
, devel
ripgrep latest [d][e] default [d] Line oriented search tool using Rust's regex
library
Fedora Modular 30 - x86_64 - Updates
Name Stream Profiles Summary
fd-find rolling [d][e] default [d] Simple, fast and user-friendly alternative to
find
gimp 2.10 [d][e] default [d] GIMP
, devel
ripgrep latest [d][e] default [d] Line oriented search tool using Rust's regex
library
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
注意:最后的位告诉您已经安装了哪些模块。但我很确定我没有故意地安装这些模块化存储库,只是碰巧一些开发人员启用了它们。我刚刚运行sudo dnf install ripgrep
并安装了模块化存储库。
因此,从这个列表中,我将fd-find
、ripgrep
和gimp
作为模块安装。
然后我可以禁用这些,例如ripgrep
:
sudo dnf module disable ripgrep
您只需对列出的模块执行相同的操作即可。
一旦我禁用了 3 个模块,我就可以毫无问题地运行 Fedora 升级:
sudo dnf system-upgrade download --releasever=31
答案2
根据https://bugzilla.redhat.com/show_bug.cgi?id=1811234,禁用有问题的模块是可行的,但您需要记住在升级后重新启用它们。那里提到的一个可能更简单的解决方案是:
sudo dnf module reset '*'
然后在安装过程中它会说这样的话:
Enabling module streams:
gimp 2.10
maven 3.5
meson latest
ninja latest
ripgrep latest
我不完全理解它是如何工作的,但是从https://docs.fedoraproject.org/en-US/modularity/using-modules-switching-streams/似乎一个模块最多可以选择 1 个“流”,并reset
清除该选择以允许选择另一个流?
答案3
如果您对“ant”或“maven”等任何模块有问题,并且删除模块不起作用,请尝试使用命令重置模块:
“dnf 模块重置”,例如:dnf 模块重置 maven
它对我来说适用于“maven”模块,同样的错误:抛出“libdnf::ModulePackageContainer::EnableMultipleStreamsException”实例后终止调用什么():无法为模块“maven”启用多个流
答案4
您需要执行以下步骤:
1)正如@icc97所说,执行dnf module list --enabled
命令并得到如下内容:
Fedora Modular 30 - x86_64 - Updates
Name Stream Profiles Summary
ant 1.10 [d][e] default [d] Java build tool
fish 3 [d][e] default [d] Friendly interactive shell
gimp 2.10 [d][e] default [d], devel GIMP
maven 3.5 [d][e] default [d] Java project management and project comprehension tool
然后运行
sudo dnf module reset gimp ant fish maven
(在reset
这部分之后,您只输入上面结果中列出的内容)。运行
dnf system-upgrade download --releasever=31
命令并等待显示要安装的软件包列表,然后选择“y(es)”,然后...正常进行安装。 :)
希望能帮助到你。