参考:https://www.onitroad.com/jc/linux/pkg/pkg-mana/manage-package-module-streams-in-centos-rhel-8.html
CentOS/RHEL 8.0 引入了 Application Streams 的概念。
随发行版一起提供的多个版本的用户空间组件现在可以同时交付。
它们的更新频率可能比核心操作系统包更频繁。
这为我们定制红帽企业 Linux 提供了更大的灵活性,而不会影响平台或者特定部署的底层稳定性。
传统上,管理应用程序软件包及其相关软件包的替代版本意味着为每个不同版本维护不同的存储库。
对于需要应用程序最新版本的开发人员和需要应用程序最稳定版本的管理员来说,这造成了管理繁琐的情况。
Red Hat Enterprise Linux 8 使用称为模块化的新技术简化了此过程。
模块化允许单个存储库托管应用程序包及其依赖项的多个版本。
CentOS/RHEL 8 内容通过两个主要软件存储库分发:BaseOS
和应用程序流 (AppStream)
。
BaseOS 存储库以 RPM 包的形式提供 Red Hat Enterprise Linux 的核心操作系统内容。
BaseOS 组件的生命周期与之前 CentOS/RHEL 版本中的内容相同。
Application Stream
存储库以模块和传统包的形式提供具有不同生命周期的内容。Application Stream
包含系统的必要部分,以及以前作为 Red Hat Software Collections
和其他产品和程序的一部分提供的各种应用程序。
注意:BaseOS
和 AppStream
都是 CentOS/RHEL 8 系统的必要组成部分。
Application Stream
存储库包含两种类型的内容:模块
和传统的 RPM 包。
一个模块描述了一组属于一起的 RPM 包。
模块可以包含多个流,以使多个版本的应用程序可供安装。
启用模块流使系统可以访问该模块流中的 RPM 包。
模块是一组 RPM 包,它们是属于一起的一致集合。
通常,这是围绕软件应用程序或者编程语言的特定版本组织的。
一个典型的模块可以包含带有应用程序的包、带有应用程序特定依赖库的包、带有应用程序文档的包以及带有辅助工具的包。
每个模块可以有一个或者多个模块流,这些流包含不同版本的内容。
每个流独立地接收更新。
将模块流视为应用程序流物理存储库中的虚拟存储库。
对于每个模块,只能启用其一个流并提供其包。
每个模块可以有一个或者多个配置文件。
配置文件是为特定用例(例如服务器、客户端、开发、最小安装或者其他)安装在一起的某些包的列表。
安装特定的模块配置文件只是从模块流中安装一组特定的包。
我们随后可以正常安装或者卸载软件包。
如果我们不指定配置文件,模块将安装其默认配置文件。
CentOS/RHEL 8 中新增的 Yum 版本 4 增加了对 Application Stream 的新模块化功能的支持。
为了处理模块化内容,添加了 yum module 命令。
否则,yum 处理模块就像处理常规包一样。
# 列出可用的软件包
yum list available
# 为所选软件包搜索可用的 YUM 存储库
yum repoquery 软件包
常用的模块查看命令
# 显示哪个模块提供软件包。
## 如果软件包不在任何模块之外,这个命令的输出就为空。
yum module provides package
# 显示模块的详细信息。
yum module info module-name
# 显示可用模块的列表
yum module list
# 列出特定模块的模块流并检索它们的状态:
yum module list perl
注意:使用输出末尾的提示来帮助确定启用、禁用、安装哪些流和配置文件,以及哪些是默认值。
# 显示默认模块流的详细信息
yum module info
# 列出默认模块流安装的包:
yum module info perl
注意:在不指定模块流的情况下, 显示默认模块流的详细信息。
# 使用默认流列出由模块的配置集安装的软件包。
yum module info --profile module-name
# 指定流显示由模块的配置集安装的软件包。
## module-name:stream 格式查看特定的模块流。
## -profile 选项以显示有关每个模块配置文件安装的包的信息。
yum module info --profile perl:5.24
必须启用模块流才能安装它们的模块。
为了简化这个过程,当一个模块被安装时,它会在必要时启用它的模块流。
# 启用模块流
yum module enable module-name:stream
注意:对于给定的模块,只能启用一个模块流。
启用添加模块流将禁用原始模块流。
# 使用默认流和配置文件安装模块
yum module install -y perl
注意:通过运行 yum install @perl 可以实现相同的结果。
@ 符号通知 yum 参数是模块名称而不是包名称。
要验证模块流的状态和已安装的配置文件:
# 显示模块的当前状态
yum module list perl
删除模块会删除由当前启用的模块流的配置文件安装的所有包,以及依赖这些的任何其他包和模块。
从此模块流安装的软件包未在其任何配置文件中列出,仍安装在系统上,可以手动删除。
注意:删除模块和切换模块流可能有点棘手。
切换模块启用的流相当于重置当前流并启用新流。
它不会自动更改任何已安装的软件包。
我们必须手动执行此操作。
不建议直接安装与当前安装的模块流不同的模块流,因为升级脚本可能会在安装过程中运行,这会破坏原始模块流的情况。
这可能会导致数据丢失或者其他配置问题。
谨慎行事
要删除已安装的模块:
# 删除已安装的模块
yum module remove -y perl
移除模块后,模块流仍处于启用状态。
要验证模块流是否仍然启用:
# 移除模块后,模块流仍处于启用状态。
# 要验证模块流是否仍然启用:
yum module list perl
禁用模块
# 禁用模块
yum module disable perl
切换模块流通常需要将内容升级或者降级到不同的版本。
为了确保干净的切换,我们应该首先删除模块流提供的模块。
这将删除模块配置文件安装的所有包,以及这些包依赖的任何模块和包。
要启用不同的模块流并安装模块:
# 启用不同的模块流并安装模块
yum module install -y perl:5.24
将启用新模块流并禁用当前流。
可能需要更新或者降级未在新配置文件中列出的先前模块流中的包。
如果需要,请使用 yum distro-sync 执行此任务。
也可能存在从之前的模块流中安装的软件包。
使用 yum remove 删除它们。