4.3 模块和程序流

4.3.1 模块和程序流简介

dnf引入了模块、程序流和配置文件的概念,以允许在单个操作系统版本中管理软件应用程序的不同版本。

模块可将包含单个应用程序及其依赖关系的许多软件包组合在一起。程序流可用于提供同一模块的备用版本。配置文件可用于定义任意单个模块的可选配置,以便模块既可以仅限于开发人员软件包,也可以涵盖用于增强功能的其他软件包。Red Hat Enterprise Linux 8.0的模块化内容通常由程序流(AppStream)存储库提供。

模块是一组组合在一起并且必须一起安装的RPM软件包。模块可以包含多个程序流,这些程序流包含可以安装多个版本的应用程序。通过启用模块来提供对这个程序流中包含的RPM软件包的系统访问。

一个典型的模块可以包含的软件包的类型有:带有应用程序的软件包、带有应用程序特定依赖库的软件包、包含应用程序文档的软件包、带有辅助工具的软件包。

一个模块可以有多个程序流,每个程序流包含不同版本的软件包及其依赖项,每个程序流独立接收更新。需注意的是,每个模块只能启用其中一个程序流来提供对其RPM软件包的系统访问。通常,具有最新版本的流会被选作默认程序流,并在操作未指定特定流或以前未启用其他流时使用。

可以将程序流视为物理存储库中的虚拟存储库。例如,在Red Hat Enterprise Linux 8.0中,PostgreSQL软件包括10和9.6两个程序流,在最新软件包中程序流10将被选作默认流。

配置文件用于提供针对特定用例需同时安装的某些软件包的列表。同时,配置文件也是应用开发程序人员的建议。需注意的是,每个模块可以具有一个或多个配置文件。

你可以通过将模块的配置文件作为一次性操作来安装RPM软件包。使用模块的配置文件安装RPM软件包不会阻止你安装或卸载这个模块提供的任何RPM软件包。此外,可以通过使用同一模块的多个配置文件来安装RPM软件包,无须任何进一步准备。同样,模块的RPM软件包列表可以包含来自程序流外部的RPM软件包(通常来自BaseOS或程序流的依赖项)。需注意的是,程序流中的模块始终具有默认配置文件。如果未明确指定其他配置文件,则此默认配置文件用于安装。

例如,httpd包含Apache Web服务器的模块支持以下配置文件。

common:此配置文件是生产就绪部署,是默认配置文件。

devel:此配置文件用于对所需的RPM软件包进行修改。

minimal:此配置文件是运行Web服务器的最小软件包集合。

与早期版本中包含的软件集合不同,从程序流安装的应用程序安装在标准位置,不需要运行其他命令或操作。你可以使用其他版本,以相同的方式运行已安装应用程序的任何版本,不必管其安装源是什么,应用程序安装后,其行为与使用 dnf 安装的任何其他本机应用程序完全相同。

4.3.2 Red Hat Enterprise Linux 8.0存储库

Red Hat Enterprise Linux 8.0有两个主要存储库——BaseOS和AppStream。

BaseOS对应于Red Hat Enterprise Linux 7.0之前的基础存储库,以RPM格式提供软件包。BaseOS存储库包含基础的软件包,这些软件包是运行最小操作系统必需的。其他软件包在AppStream存储库下。AppStream存储库可以以RPM格式和模块格式提供同一软件的多个版本。

模块具有多个程序流,每个程序流将具有不同版本的软件包及其依赖项。包含最新版本软件包的程序流将被选作默认流。例如,PHP7.1 及其依赖项是一个程序流,而 PHP7.2及其依赖项将是另一个程序流。

下面是一个模块安装命令:

上面的命令可分成如下几个部分。

● dnf:软件包安装工具;

● module:表示模块模式;

● php:表示模块名称;

●:7.1:程序流版本;

●/minimal:配置文件类型(common 表示默认配置文件;devel表示修改所需的软件包配置文件;minimal表示提供运行最小软件配置)。

4.3.3 模块常用命令

1.查看模块列表

查看有哪些模块请执行如下命令:

模块列表输出的信息包含每个模块的名称、流、概要文件,以及有关这个模块的简短摘要。

说明

[d]表示是默认状态。

[e]表示启用状态。

[x]表示禁用状态。

[i]表示已经安装。

2.查看已启用模块

要查看已启用的模块请执行如下命令:

3.收集模块信息

要获取有关特定模块的更多信息,可执行如下命令:

运行上述命令将提供包含可用版本的PHP软件包的长输出,包括依赖关系及其带有可用配置文件的程序流。

4.查看模块的所有可用配置文件

要查看模块的所有可用配置文件,可执行如下命令:

PHP软件包可能包含不同的配置文件,如devel、minimum和common。如果在执行安装时未使用任何配置文件,则会自动选择默认配置文件。

5.使用模块和配置文件安装软件包

PostgreSQL是一个数据库,要安装这个数据库软件,应先通过如下命令查看有哪些模块已启用:

上面的命令行输出显示有10和9.6两个程序流。其中,程序流10是默认安装版本,配置文件分为client(客户端)和server(服务器)两种类型。

通过如下代码安装10client版本:

安装完成后,你可以使用如下RPM命令确认软件包版本是否正确:

上面的RPM命令行输出显示PostgreSQL的版本是10.6。

也可以使用如下命令进行查看:

上面的命令行输出显示PostgreSQL模块10处于启用状态并且配置文件是client。

6.切换应用模块流

切换应用模块流是一项有风险的操作,并非所有软件包都支持切换操作,尤其是降级操作。如果要把PostgreSQL从版本10变成版本9.6,则需要进行如下操作。

第一步,重置模块状态:

第二步,安装PostgreSQL 9.6版本软件包:

第三步,验证降级是否成功:

上面的命令输出表明降级成功。

7.启用和禁用模块

当我们不需要接收PostgreSQL的更新版本时,可以通过启用和禁用模块来实现,相应命令如下:

8.重置模块

重置模块是一项使所有程序流返回其初始状态的操作(既不启用也不禁用),相应命令如下:

9.卸载模块

使用以下命令卸载系统上安装的模块: