GNU/Linux 基础 — 应用程序流

概述

本章,您将了解并学习如何使用应用程序流。

应用程序流:在 RL 8.x 和 9.x 中一种使用模块化的新技术,允许存储库托管应用程序及其依赖项的多个版本,系统管理员可选择某一个特定版本进行使用,带来更多的灵活性。

RockyLinux 8.x 主要通过这两个存储库进行内容的分发:

  • BaseOS – 与之前 RPM 传统软件包的内容相同。
  • AppStream – 包含了 模块 和 RPM 传统软件包。模块 表示逻辑单元的软件包合集 —— 应用程序、语言堆栈、数据库或一组工具,这些软件包被一同构建、测试并发布。一个模块可以包含同一应用程序的多个流(版本)。

每个应用程序流都有自己的生命周期,有些生命周期长,有些生命周期短,详情参阅:

模块

模块主要围绕着 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 rubydnf module info ruby:2.6
dnf module info --profile <module-name>dnf module info --profile <module-name>:<stream> 列出模块流的配置集信息。若只键入模块名称而没有流,则会列出该模块的所有流的配置集。 dnf module info --profile httpddnf 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
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇