概述
本章,您将了解并学习如何使用应用程序流。
应用程序流:在 RL 8.x 和 9.x 中一种使用模块化的新技术,允许存储库托管应用程序及其依赖项的多个版本,系统管理员可选择某一个特定版本进行使用,带来更多的灵活性。
RockyLinux 8.x 主要通过这两个存储库进行内容的分发:
- BaseOS – 与之前 RPM 传统软件包的内容相同。
- AppStream – 包含了 模块 和 RPM 传统软件包。模块 表示逻辑单元的软件包合集 —— 应用程序、语言堆栈、数据库或一组工具,这些软件包被一同构建、测试并发布。一个模块可以包含同一应用程序的多个流(版本)。
每个应用程序流都有自己的生命周期,有些生命周期长,有些生命周期短,详情参阅:
- https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel8_application_streams
- https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel9_application_streams
模块
模块主要围绕着 dnf module
命令进行操作。
模块流(Module streams)
模块流:虚拟存储库的过滤器,代表了某一个版本,每个流都单独接收更新。在操作系统中,您只能 激活/使用 某一特定模块的一个流。举例来说,当你需要使用 nginx 模块时,您只能安装其中的一个流(版本)。
每个模块都可以拥有自己的默认流(默认版本),以 [d] 进行标记,默认流是活跃的,除非您禁用了该模块或者启用该模块的另外一个流。
有些模块流依赖其他模块流,这意味着当你安装某一应用程序的模块流时,需要考虑:
- 使用该模块的哪一个流(版本)
- 兼容性问题
- 生命周期
在我当前 RL 8.10 的操作系统中,nginx 的默认流为 1.14,其依赖 appstrem 中的模块流(版本这一列中带冒号 ":" 表示使用的模块流)以及 RPM 软件包,也依赖 baseos 中的 RPM 软件包。
Shell > dnf module list nginx
Last metadata expiration check: 0:00:47 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nginx 1.14 [d] common [d] nginx webserver
nginx 1.16 common [d] nginx webserver
nginx 1.18 common [d] nginx webserver
nginx 1.20 common [d] nginx webserver
nginx 1.22 common [d] nginx webserver
nginx 1.24 common [d] nginx webserver
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > dnf module install nginx:1.14
Last metadata expiration check: 0:01:34 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing group/module packages:
nginx x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 566 k
nginx-all-modules noarch 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 22 k
nginx-filesystem noarch 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 23 k
nginx-mod-http-image-filter x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 34 k
nginx-mod-http-perl x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 45 k
nginx-mod-http-xslt-filter x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 32 k
nginx-mod-mail x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 63 k
nginx-mod-stream x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 84 k
Installing dependencies:
dejavu-fonts-common noarch 2.35-7.el8 baseos 73 k
dejavu-sans-fonts noarch 2.35-7.el8 baseos 1.5 M
fontconfig x86_64 2.13.1-4.el8 baseos 273 k
fontpackages-filesystem noarch 1.44-22.el8 baseos 15 k
gd x86_64 2.2.5-7.el8 appstream 143 k
jbigkit-libs x86_64 2.1-14.el8 appstream 54 k
libtiff x86_64 4.0.9-33.el8_10 appstream 189 k
Installing module profiles:
nginx/common
Enabling module streams:
nginx 1.14
Transaction Summary
========================================================================================================================
Install 15 Packages
Total download size: 3.1 M
Installed size: 9.2 M
Is this ok [y/N]:
模块流配置集(Module profiles)
模块流配置集:规定了为特定使用场景而绑定在一起的一组软件包列表。如 httpd 模块提供了三个配置集:
- common(默认配置集)
- devel
- minimal
Shell > dnf module list httpd
Last metadata expiration check: 0:10:42 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
httpd 2.4 [d] common [d], devel, minimal Apache HTTP Server
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > dnf module info --profile httpd:2.4
Name : httpd:2.4:8100020240405151514:e155f54d:x86_64
common : httpd
: httpd-filesystem
: httpd-tools
: mod_http2
: mod_ssl
devel : httpd
: httpd-devel
: httpd-filesystem
: httpd-tools
minimal : httpd
每个模块流都可以拥有任何数量的配置集(也允许没有),某些模块流的配置集可以被标记为 [d],表示默认的含义。
操作模块流
使用模块流
使用的命令为 dnf module
,一些基本的查看命令如下:
命令 | 说明 | 示例 |
---|---|---|
dnf module list |
列出当前您系统可用的所有模块流 | |
dnf module list <module-name> 或 dnf module list <module-name>:<stream> |
列出某一模块流的状态。若只键入模块名称而没有流,则会显示该模块的所有流状态 | dnf module list postgresql 或者 dnf module list postgresql:15 |
dnf module list --enabled |
列出已经启用的模块流 | |
dnf module info <module-name> 或 dnf module info <module-name>:<stream> |
显示模块流的信息。若只键入模块名称而没有流,则会显示该模块的所有流信息 | dnf module info ruby 或 dnf module info ruby:2.6 |
dnf module info --profile <module-name> 或 dnf module info --profile <module-name>:<stream> |
列出模块流的配置集信息。若只键入模块名称而没有流,则会列出该模块的所有流的配置集。 | dnf module info --profile httpd 或 dnf module info --profile httpd:2.4 |
安装模块流
安装模块流之前需要开启对应的模块流,命令行语法如下:
命令 | 说明 | 示例 |
---|---|---|
dnf module enable <module-name>:<stream> |
启用某一个模块的流,可使用 -y 进行确认应答。若不键入流,则开启的是默认流。 | dnf -y module enable nginx:1.22 |
注:默认流是活跃的,若您开启了模块的另外一个流,则意味着开启的模块流是活跃的,默认流变成不活跃。
安装模块流,可以有两种方式:
- 使用默认流和默认配置集,语法为 ——
dnf -y module install <module-name>
,例如dnf -y module install httpd
- 使用非默认流 和/或 非默认配置集,语法为 ——
dnf -y module install <module-name>:<stream>/<profile>
,例如dnf -y module install httpd:2.4/devel
,可用 * 代表所有的配置集
删除模块流
- 要删除传统的 RPM 软件包以及其依赖软件包,请使用 ——
dnf -y remove <package-name>
- 要删除特定模块流的所有软件包,请使用 ——
dnf -y module remove --all <module-name>:<stream>
- 若要删除属于配置集中的软件包,请使用 ——
dnf -y module remove --all <module-name>:<stream>/<profile>
,可用 * 代表所有的配置集
重置模块
若需要将某个模块重置为初始化状态,可使用 —— dnf -y module reset <module-name>
请注意!重置模块不会变更任何已经安装了的软件包。
切换到更新的流
这有两个先决条件:
- 操作系统已经全面更新
- 操作系统安装的软件包不比存储库中可用的软件包新
您可以使用该命令准备切换到新的流:dnf distro-sync
若对应的模块流有可用的更新,您需要执行以下步骤:
- 重置更新的模块 ——
dnf module reset <module-name>
- 启用新的模块流 ——
dnf -y module enable <module-name>:<new-stream>
- 同步已安装的程序包以执行流之间的更改——
dnf distro-sync
使用 yaml 文件内容自定义默认流与配置集
我们可以在 /etc/dnf/modules.defaults.d/ 目录下创建一个 YAML 格式的文件,例如 postgresql 的默认流为10,默认配置集为server
Shell > dnf module list postgresql
Last metadata expiration check: 0:40:49 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
postgresql 15 client, server [d] PostgreSQL server and client module
postgresql 16 client, server [d] PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > vim /etc/dnf/modules.defaults.d/postgresql.yaml
---
document: modulemd-defaults
version: 1
data:
module: postgresql
stream: "15"
profiles:
"9.6": [server]
"10": [server]
"12": [client]
"13": [server]
"15": [server]
...
Shell > dnf module list postgresql
Last metadata expiration check: 0:45:13 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 client, server [d] PostgreSQL server and client module
postgresql 12 client [d], server PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
postgresql 15 [d] client, server [d] PostgreSQL server and client module
postgresql 16 client, server PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
示例
以 nodejs 为例来说明,我们需要 18 的流以及 minimal 和 common 配置集:
Shell > dnf module list nodejs
Last metadata expiration check: 0:48:36 ago on Fri 04 Apr 2025 11:11:50 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
nodejs 12 common [d], development, minimal, s2i Javascript runtime
nodejs 14 common [d], development, minimal, s2i Javascript runtime
nodejs 16 common [d], development, minimal, s2i Javascript runtime
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common, development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > dnf module enable nodejs:18
Last metadata expiration check: 0:04:58 ago on Fri 04 Apr 2025 12:16:47 PM CST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Enabling module streams:
nodejs 18
Transaction Summary
========================================================================================================================
Is this ok [y/N]: y
Complete!
Shell > dnf module list --enabled nodejs
Last metadata expiration check: 0:05:22 ago on Fri 04 Apr 2025 12:16:47 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d], development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > dnf -y module install nodejs:18/minimal
Shell > dnf module list --enabled nodejs
Last metadata expiration check: 0:06:44 ago on Fri 04 Apr 2025 12:16:47 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d], development, minimal [i], s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Shell > dnf -y module install nodejs:18/common
Shell > dnf module list --enabled nodejs
Last metadata expiration check: 0:08:27 ago on Fri 04 Apr 2025 12:16:47 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d] [i], development, minimal [i], s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
# 移除该模块所有配置集的软件包
Shell > dnf -y module remove --all nodejs:18/*
# 重置模块
Shell > dnf -y module reset nodejs
Shell > dnf module list nodejs
Last metadata expiration check: 0:13:03 ago on Fri 04 Apr 2025 12:16:47 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
nodejs 12 common [d], development, minimal, s2i Javascript runtime
nodejs 14 common [d], development, minimal, s2i Javascript runtime
nodejs 16 common [d], development, minimal, s2i Javascript runtime
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common, development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
