Menu Close

Red Hat Training

A Red Hat training course is available for RHEL 8

安装、管理和删除用户空间组件

Red Hat Enterprise Linux 8

Red Hat Enterprise Linux 8 中 AppStream 和 BaseOS 介绍

Red Hat Customer Content Services

摘要

本文档论述了搜索、发现、安装和使用 Red Hat Enterprise Linux 8 中 AppStream 和 BaseOS 软件仓库中的内容。这包括如何使用模块、应用程序流和配置集的描述。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。要做到这一点:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 使用 AppStream

以下小节概述了与 Red Hat Enterprise Linux 8 中 AppStream 软件仓库相关的概念。

1.1. RHEL 8 中的内容发布

RHEL 8 内容通过两个主要软件仓库发布: BaseOSAppStream

BaseOS
BaseOS 仓库的内容旨在提供底层操作系统功能的核心组件,为所有安装提供基础操作系统的基础。这部分内容采用 RPM 格式,它的支持条款与之前的 Red Hat Enterprise Linux 版本相似。
AppStream
AppStream 仓库的内容包括额外的用户空间应用程序、运行时语言和数据库来支持各种工作负载和使用案例。AppStream 的内容有两种格式之一 - 熟悉的 RPM 格式,和 RPM 格式的扩展 modules
重要

基本 RHEL 安装需要 BaseOS 和 AppStream 内容集,所有 RHEL 订阅都可使用它。有关安装说明,请参阅 执行标准 RHEL 安装文档

1.2. 应用程序流

Red Hat Enterprise Linux 8 引进了 Application Streams - 用户空间组件的版本。现在比核心操作系统软件包更频繁地交付和更新这些组件的多个版本。这为自定义 Red Hat Enterprise Linux 提供了更大的灵活性,不会影响平台或特定部署的基本稳定性。

作为 Application Streams 提供的组件可打包为模块(module)或 RPM 软件包,并通过 RHEL 8 中的 AppStream 软件仓库提供。每个 Application Stream 都有一个生命周期,它与 RHEL 8 的生命周期相同或更短。Red Hat Enterprise Linux 8 Application Streams 生命周期页中列出了生命周期较短的应用程序流

注意

不是所有模块都是 Application Streams。其他模块的相依性不被视为 Application Streams。

1.3. RHEL 8 中的打包方法

AppStream 存储库包含以两种方式打包的内容:

单个 RPM 软件包
可以用来立即安装的传统的 RPM 软件包。
模块
模块是代表逻辑单元的软件包集合: 应用程序、语言堆栈、数据库或一组工具。这些软件包被一同构建、测试并发布。

1.4. 在 RHEL 8 中使用 YUM 进行软件包管理

YUM 软件包管理工具现在基于 DNF 技术,它增加了对新模块化特性的支持。

在处理单个 RPM 软件包时,YUM 的使用并没有改变。为处理模块内容,添加了 yum module 命令。详情请查看 第 4 章 安装 RHEL 8 内容

如果需要,模块化功能会自动选择模块和流的适当组合,以启用安装逻辑软件包集合以供使用。

第 2 章 模块简介

除了单个 RPM 软件包外,AppStream 存储库还包含模块。模块是一组代表组件的 RPM 软件包,通常一起安装。典型的模块包含应用的软件包、应用特定依赖库的软件包、应用文档的软件包,以及帮助程序实用程序的软件包。

接下来的小节描述了模块内机构和处理内容的其他功能:

2.1. 模块流

模块流是过滤器,可以想象为 AppStream 物理存储库中的虚拟存储库。模块流代表 AppStream 组件的版本。每个流都单独接收更新。

模块流可以是活跃的或者不活跃的。活动流允许系统访问特定模块流中的 RPM 软件包,允许安装对应的组件版本。如果标记为默认值,或者用户操作明确启用了流,则流会处于活跃状态。

给定时间点上只能激活一个特定模块的流。因此,在一个系统中只能安装一个组件版本。不同的容器可以使用不同的版本。

每个模块都可以具有默认流。默认流可让您轻松使用 RHEL 软件包而无需了解模块。默认流是活跃的,除非禁用了整个模块或启用了该模块的另一个流。

某些模块流依赖于其他模块流。例如, perl-App-cpanminusperl-DBD-MySQLperl-DBD-Pgperl-DBD-SQLiteperl-DBIperl-YAMLfreeradius 模块流取决于特定的 perl 模块流。

要为运行时用户应用程序或开发人员应用程序选择特定的流,请考虑以下几点:

有关所有可用模块和流的列表,请查看 软件包清单。有关每个组件的更改,请查看 发行注记

例 2.1. PostgreSQL 模块流

postgresql 模块在相应的流 9.6、10 和 12 中提供PostgreSQL 数据库版本 9.6、1012。流 10 目前是默认值。这意味着,如果需要 postgresql,系统将尝试安装postgresql-10.6 软件包。

其它资源

2.2. 模块配置集

配置集(profile) 是为特定用例一起安装的推荐软件包列表,比如服务器、客户端、开发、最小安装或其他用例。这些软件包列表可以包含模块流之外的软件包,通常来自 BaseOS 存储库或流的依赖软件包。

使用配置集安装软件包是为方便用户提供的一次性操作。它不会阻止安装或卸载该模块提供的任何软件包。您还可以使用同一模块流的多个配置集安装软件包,而无需进一步准备步骤。

每个模块流可以有任何数量的配置集,包括没有。对于任何给定模块流,其某些配置集可以被标记为 default,并在没有显式指定配置集时用于配置集安装操作。但是,不需要为模块流存在默认配置文件。

例 2.2. httpd 模块配置集

提供 Apache web 服务器的 httpd 模块为安装提供以下配置集:

  • common - 强化生产就绪部署(默认配置集)
  • devel - 对 进行修改所需的软件包 httpd
  • minimal - 提供运行的 webserver 的最小软件包集合

第 3 章 查找 RHEL 8 内容

以下小节论述了如何定位和检查 Red Hat Enterprise Linux 8 的 AppStream 和 BaseOS 软件仓库中的内容。

3.1. 搜索软件包

这部分论述了查找提供特定应用程序或其他内容的软件包所需的步骤。

先决条件

  • 所需应用程序或内容的名称必须是已知的

流程

  1. 使用文本字符串搜索软件包,如应用程序名称:

    $ yum search "text string"
  2. 查看软件包详情:

    $ yum info package

3.2. 列出可用模块

这部分论述了查找可以使用的模块及其详情所需的步骤。

流程

  1. 列出您的系统可用的模块流:

    $ yum module list

    此命令的输出列出了单独行中的名称、流、配置集和概述的模块流。

  2. 显示一个模块详情,其中包括描述、所有配置集列表以及所有提供的软件包列表:

    $ yum module info module-name
  3. 可选:您还可以列出这些软件包由每个模块配置集安装:

    $ yum module info --profile module-name
  4. 显示模块的当前状态,包括已启用的流和安装的配置集:

    $ yum module list module-name

例 3.1. 查找模块详情

本例演示了如何在 AppStream 存储库中定位模块以及如何找到更多有关它的内容。

注意

本例中的输出已编辑为简洁。实际输出可能包含比这里显示的信息多。

流程

  1. 列出可用模块:

    $ yum module list
    Name        Stream  Profiles    Summary
    (...)
    postgresql  9.6     client,     PostgreSQL server and client module
                        server [d]
    postgresql  10 [d]  client,     PostgreSQL server and client module
                        server [d]
    postgresql  12      client,     PostgreSQL server and client module
                        server [d]
    (...)
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  2. 检查 postgresql 模块的详情:

    $ yum module info postgresql
    
    Name             : postgresql
    Stream           : 10 [d][a]
    Version          : 820190104140132
    Context          : 9edba152
    Profiles         : client, server [d]
    Default profiles : server
    Repo             : appstream
    Summary          : PostgreSQL server and client module
    Description      : (...)
    (...)
    
    Name             : postgresql
    Stream           : 12
    Version          : 8010120191120141335
    Context          : e4e244f9
    Profiles         : client, server [d]
    Default profiles : server
    Repo             : appstream
    Summary          : PostgreSQL server and client module
    Description      : (...)
    (...)
    
    Name             : postgresql
    Stream           : 9.6
    Version          : 820190104140337
    Context          : 9edba152
    Profiles         : client, server [d]
    Default profiles : server
    Repo             : appstream
    Summary          : PostgreSQL server and client module
    Description      : (...)
    (...)
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive

    由于没有指定流,因此所有流都用于列表。

  3. 检查 postgresql 模块流 10 中的配置集:

    $ yum module info --profile postgresql:10
    (...)
    Name   : postgresql:10:820190104140132:9edba152:x86_64
    client : postgresql
    server : postgresql-server

    每个配置集会安装不同的软件包集合,包括其依赖性。

  4. 使用默认流 10 和配置集 server 安装 postgresql 模块:

    # yum module install postgresql
    Dependencies resolved.
    ====================================================================
     Package           Version                         Repository Size
    ====================================================================
    Installing group/module packages:
     postgresql-server 10.6-1.module+el8+2469+5ecd5aae appstream  5.1 M
    Installing dependencies:
     libpq             10.5-1.el8                      appstream  188 k
     postgresql        10.6-1.module+el8+2469+5ecd5aae appstream  1.5 M
    Installing module profiles:
     postgresql/server
    Enabling module streams:
     postgresql               10
    
    Transaction Summary
    ====================================================================
    Install  3 Packages
    
    Total download size: 6.7 M
    Installed size: 27 M
    Is this ok [y/N]: y
    (...)

    10 被启用并安装了它的配置集 server 中的软件包。

  5. 检查 postgresql 模块的当前状态:

    $ yum module list postgresql
    Name       Stream    Profiles                Summary
    postgresql 9.6       client, server [d]      (...)
    postgresql 10 [d][e] client, server [d] [i]  (...)
    postgresql 12        client, server [d]      (...)
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

    输出显示默认流 10 已启用并安装了其配置集 server

3.3. 列出内容的命令

下面是查找内容和详情时常用的命令。

列出可用的软件包
$ yum list available
为所选软件包搜索可用的 YUM 软件仓库
$ yum repoquery package
使用任意文本字符串搜索软件包
$ yum search "text string"
显示软件包详情
$ yum info package
找到哪个模块提供软件包
$ yum module provides package

如果软件包不在任何模块之外,这个命令的输出就为空。

列出可用模块
$ yum module list
显示模块详情
$ yum module info module-name
使用默认流列出由模块的配置集安装的软件包
$ yum module info --profile module-name
使用指定流显示由模块配置集安装的软件包
$ yum module info --profile module-name:stream
显示模块的当前状态
$ yum module list module-name

第 4 章 安装 RHEL 8 内容

下面的部分论述了如何在 Red Hat Enterprise Linux 8 中安装内容。

4.1. 安装软件包

这部分论述了如何安装软件包。

流程

  • 安装软件包:

    # yum install package
    • 如果任何模块流不提供软件包,这个过程与之前 Red Hat Enterprise Linux 版本使用的步骤相同。
    • 如果软件包由启用的模块流提供,则安装该软件包时无需进一步操作。
    • 如果软件包由标记为默认模块流提供,yum 工具会在安装此软件包前自动启用该模块流。
    • 如果软件包由未激活的模块流提供(与上述情况无关),则除非手动启用相应的模块流,否则无法识别该软件包。

4.2. 安装软件包前选择流

默认模块流可确保用户可以安装软件包,而不考虑模块化功能。当用户需要使用非默认流的版本的软件包时,必须在安装由它提供的软件包前启用该流。

先决条件

流程

  • 启用模块流:

    # yum module enable module-name:stream

    module-namestream 替换为模块和流的名称。

    yum 请求确认,并且流已启用并激活。如果之前因为默认而激活的该模块的另一个流将不再活跃。

4.3. 覆盖模块默认流

默认情况下,yum 工具使用仓库中定义的模块默认流,其中包含模块。可以通过 /etc/dnf/modules.defaults.d/ 目录覆盖默认流。

流程

  1. /etc/dnf/modules.defaults.d/ 置入目录中创建 YAML 配置文件。

    ---
    document: modulemd-defaults
    version: 1
    data:
      module: postgresql
      stream: "10"
      profiles:
        10: [server]
        12: [server]
        13: [server]
        9.6: [server]
    …​

    以上输出代表了编写本文档时 postgresql 模块存在的默认定义。

    例 4.1. 带有原始默认值的 postgresql 模块示例

    # yum module list postgresql
    (...)
    Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
    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
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  2. 要将默认流设置为 13,可以实现以下配置:

    ---
    document: modulemd-defaults
    version: 1
    data:
      module: postgresql
      stream: "13"
      profiles:
        10: [server]
        12: [server]
        13: [server]
        9.6: [server]
    …​

    例 4.2. 带有模块默认覆盖的 postgresql 示例

    # yum module list postgresql
    (...)
    Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
    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, server [d]      PostgreSQL server and client module
    postgresql       13 [d]       client, server [d]      PostgreSQL server and client module
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

4.4. 安装模块内容

本节论述了如何安装由模块流或配置集提供的模块内容。

先决条件

流程

  • 安装一个活跃的模块流(启用该流或默认的模块流):

    # yum module install module-name
  • 安装所选模块流:

    # yum module install module-name:stream

    所选流会自动启用。如果为流定义了默认配置集,则会自动安装此配置集。

  • 安装所选模块流的配置集:

    # yum module install module-name:stream/profile

    这启用了流并为模块的给定流(版本)和配置集(目的)安装推荐的软件包集合。

例 4.3. 安装应用程序的非默认流

本例演示了如何从非默认流(版本)安装应用程序。

更具体地说,本例演示了如何在版本 9.6 中安装PostgreSQL 服务器(软件包 postgresql-server),而默认流提供版本 10

流程

  1. 列出提供 postgresql-server 软件包的模块,以查看哪些流可用:

    $ yum module list postgresql
    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
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

    输出显示 postgresql 模块在流 9.61012 中可用。默认流为 10

  2. 在流 9.6 中安装 postgresql 模块提供的软件包:

    # yum module install postgresql:9.6
    Dependencies resolved.
    =====================================================================
     Package           Version                           Repository Size
    =====================================================================
    Installing group/module packages:
     postgresql-server 9.6.10-1.module+el8+2470+d1bafa0e appstream  5.0 M
    Installing dependencies:
     libpq             10.5-1.el8                        appstream  188 k
     postgresql        9.6.10-1.module+el8+2470+d1bafa0e appstream  1.4 M
    Installing module profiles:
     postgresql/server
    Enabling module streams:
     postgresql                 9.6
    
    Transaction Summary
    =====================================================================
    Install  3 Packages
    
    Total download size: 6.6 M
    Installed size: 27 M
    Is this ok [y/N]: y
    (...)
    Complete!

    因为没有指定安装配置集,所以使用默认配置集 server

  3. 验证已安装的 PostgreSQL 版本:

    $ postgres --version
    postgres (PostgreSQL) 9.6.10

4.5. 运行安装的内容

通常,在从 RHEL 8 软件仓库安装内容后,新命令会被启用。如果命令源自由模块启用的 RPM 软件包或 RPM 软件包,则使用 命令的体验不应不同。要运行新命令,直接使用它们:

$ command

4.6. 安装 RHEL 8 内容的命令

本节列出了安装 RHEL 8 内容的常用命令。

命令列表

安装软件包
# yum install package

如果软件包由模块流提供,yum 会解析所需的模块流,并在安装这个软件包时自动启用它。这也会适用于所有软件包的依赖关系。如果更多模块流满足要求,则使用默认模块流。

使用其默认流启用模块
# yum module enable module-name

如果您希望向系统提供软件包,但目前还没有安装其中任何一个,请启用该模块。

有些模块可能无法定义默认流。在这种情况下,您必须明确指定流。

使用特定流启用模块
# yum module enable module-name:stream

如果该模块定义了默认流,您可以省略 stream 和冒号。

使用默认流和配置集安装模块
# yum module install module-name

或者:

# yum install @module-name
小心

有些模块无法定义默认流。

使用特定流和默认配置集安装模块
# yum module install module-name:stream

或者:

# yum install @module-name:stream
使用特定流和配置集安装模块
# yum module install module-name:stream/profile

或者:

# yum install @module-name:stream/profile

4.7. 其它资源

在线资源

安装的资源

  • 有关各种 yum 工具命令的详情,请查看 yum(8) 手册页:

    $ man yum

第 5 章 删除 RHEL 8 内容

以下小节论述了如何删除 Red Hat Enterprise Linux 8 中的内容:

5.1. 删除安装的软件包

这部分论述了如何删除软件包。

流程

  • 删除软件包:

    # yum remove package

    软件包会与其他依赖性软件包一起删除。

5.2. 删除安装的模块内容

当删除安装的模块内容时,您可以从所选配置集或整个流中删除软件包。

重要

YUM 会尝试删除所有名称与安装配置集或流的软件包对应的软件包,包括其依赖的软件包。继续之前,请务必检查要删除的软件包列表,特别是在系统上启用了自定义存储库时。

5.2.1. 从模块流中删除所有软件包

当您删除使用模块流安装的软件包时,所有名称与流安装的软件包对应的软件包都会被删除,包括其依赖项,其他模块需要的软件包除外。

先决条件

  • 已启用模块流,并至少已安装了流中的一些软件包。
  • 必须了解 模块化依赖关系

流程

  1. 从所选流中删除所有软件包:

    # yum module remove --all module-name:stream

    使用您要卸载的模块和流替换 module-namestream

  2. 在进行删除事务前,请检查 Removing:Removing unused dependencies: 下的软件包列表。
  3. (可选)重置或禁用流。

如果您只想从所选配置集中删除软件包,请按照 第 5.2.2 节 “从安装的配置集中删除软件包” 中的说明操作。

例 5.1. 从整个流中删除软件包

本例演示了如何从模块流中删除所有软件包。

流程

  1. 安装 php:7.3 模块流,包括所有可用配置集:

    [root@rhel-8 ~]# yum module install php:7.3/*
    Updating Subscription Management repositories.
    Last metadata expiration check: 0:20:19 ago on Tue Mar  3 11:32:05 2020.
    Dependencies resolved.
    =========================================================================
     Package          Arch   Version                              Repository                        Size
    =========================================================================
    Installing group/module packages:
     libzip           x86_64 1.5.2-1.module+el8.1.0+3189+a1bff096 rhel-8-for-x86_64-appstream-rpms  63 k
     php-cli          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 3.0 M
     php-common       x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 663 k
     php-devel        x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 735 k
     php-fpm          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 1.6 M
     php-json         x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms  73 k
     php-mbstring     x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 610 k
     php-pear         noarch 1:1.10.9-1.module+el8.1.0+3189+a1bff096
                                                                  rhel-8-for-x86_64-appstream-rpms 359 k
     php-pecl-zip     x86_64 1.15.4-1.module+el8.1.0+3189+a1bff096
                                                                  rhel-8-for-x86_64-appstream-rpms  51 k
     php-process      x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms  84 k
     php-xml          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 188 k
    Installing dependencies:
     autoconf         noarch 2.69-27.el8                          rhel-8-for-x86_64-appstream-rpms 710 k
    ...
    Installing weak dependencies:
     perl-IO-Socket-IP
                      noarch 0.39-5.el8                           rhel-8-for-x86_64-appstream-rpms  47 k
    ...
    Installing module profiles:
     php/common
     php/devel
     php/minimal
    Enabling module streams:
     httpd                   2.4
     nginx                   1.14
     php                     7.3
    
    Transaction Summary
    =========================================================================
    Install  73 Packages
    
    Total download size: 76 M
    Installed size: 220 M
    Is this ok [y/N]: y
  2. php:7.3 模块流中删除所有软件包:

    [root@rhel-8 ~]# yum module remove php:7.3 --all
    Updating Subscription Management repositories.
    Last metadata expiration check: 0:21:26 ago on Tue Mar  3 11:32:05 2020.
    Dependencies resolved.
    =========================================================================
     Package                Arch   Version                       Repository                         Size
    =========================================================================
    Removing:
     libzip                 x86_64 1.5.2-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 313 k
     php-cli                x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms  11 M
     php-common             x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 6.5 M
     php-devel              x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 5.3 M
     php-fpm                x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 5.6 M
     php-json               x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms  53 k
     php-mbstring           x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 1.9 M
     php-pear               noarch 1:1.10.9-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 2.1 M
     php-pecl-zip           x86_64 1.15.4-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 119 k
     php-process            x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 117 k
     php-xml                x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 557 k
    Removing unused dependencies:
     autoconf               noarch 2.69-27.el8                   @rhel-8-for-x86_64-appstream-rpms 2.2 M
    ...
    Disabling module profiles:
     php/common
     php/devel
     php/minimal
    
    Transaction Summary
    =========================================================================
    Remove  73 Packages
    
    Freed space: 220 M
    Is this ok [y/N]: y

5.2.2. 从安装的配置集中删除软件包

当您删除安装有配置集的软件包时,所有名称与配置集安装的软件包相对应的软件包都会被删除,包括它们的依赖软件包,不同的配置集所需要的软件包除外。

先决条件

  • 所选配置集使用 yum module install module-name:stream/profile 命令安装,或使用 yum install module-name:stream 命令作为默认配置集安装。
  • 必须了解 模块化依赖关系

流程

  1. 卸载属于所选配置集的软件包:

    # yum module remove module-name:stream/profile

    module-namestreamprofile 替换为您要卸载的模块、流和配置集。

    或者,从流中的所有安装配置集中卸载软件包:

    # yum module remove module-name:stream

    这些操作不会从不属于任何配置集的流中删除软件包。

  2. 在进行删除事务前,请检查 Removing:Removing unused dependencies: 下的软件包列表。

要从所选流中删除所有软件包,请按照 第 5.2.1 节 “从模块流中删除所有软件包” 中的说明操作。

例 5.2. 从所选配置集中删除软件包

这个示例演示了如何删除只属于所选配置集的软件包。

流程

  1. 安装 php:7.3 模块流,包括所有可用配置集:

    [root@rhel-8 ~]# yum module install php:7.3/*
    Updating Subscription Management repositories.
    Last metadata expiration check: 0:08:41 ago on Tue Mar  3 11:32:05 2020.
    Dependencies resolved.
    =========================================================================
     Package          Arch   Version                              Repository                        Size
    =========================================================================
    Installing group/module packages:
     libzip           x86_64 1.5.2-1.module+el8.1.0+3189+a1bff096 rhel-8-for-x86_64-appstream-rpms  63 k
     php-cli          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 3.0 M
     php-common       x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 663 k
     php-devel        x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 735 k
     php-fpm          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 1.6 M
     php-json         x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms  73 k
     php-mbstring     x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 610 k
     php-pear         noarch 1:1.10.9-1.module+el8.1.0+3189+a1bff096
                                                                  rhel-8-for-x86_64-appstream-rpms 359 k
     php-pecl-zip     x86_64 1.15.4-1.module+el8.1.0+3189+a1bff096
                                                                  rhel-8-for-x86_64-appstream-rpms  51 k
     php-process      x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms  84 k
     php-xml          x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6 rhel-8-for-x86_64-appstream-rpms 188 k
    Installing dependencies:
     autoconf         noarch 2.69-27.el8                          rhel-8-for-x86_64-appstream-rpms 710 k
    ...
    Installing weak dependencies:
     perl-IO-Socket-IP
                      noarch 0.39-5.el8                           rhel-8-for-x86_64-appstream-rpms  47 k
    ...
    Installing module profiles:
     php/common
     php/devel
     php/minimal
    Enabling module streams:
     httpd                   2.4
     nginx                   1.14
     php                     7.3
    
    Transaction Summary
    =========================================================================
    Install  73 Packages
    
    Total download size: 76 M
    Installed size: 220 M
    Is this ok [y/N]: y
  2. devel 配置集中删除软件包:

    [root@rhel-8 ~]# yum module remove php:7.3/devel
    Updating Subscription Management repositories.
    Last metadata expiration check: 0:09:40 ago on Tue Mar  3 11:32:05 2020.
    Dependencies resolved.
    =========================================================================
     Package                Arch   Version                       Repository                         Size
    =========================================================================
    Removing:
     libzip                 x86_64 1.5.2-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 313 k
     php-devel              x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 5.3 M
     php-pear               noarch 1:1.10.9-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 2.1 M
     php-pecl-zip           x86_64 1.15.4-1.module+el8.1.0+3189+a1bff096
                                                                 @rhel-8-for-x86_64-appstream-rpms 119 k
     php-process            x86_64 7.3.5-5.module+el8.1.0+4560+e0eee7d6
                                                                 @rhel-8-for-x86_64-appstream-rpms 117 k
    Removing unused dependencies:
     autoconf               noarch 2.69-27.el8                   @rhel-8-for-x86_64-appstream-rpms 2.2 M
    ...
    Disabling module profiles:
     php/devel
    
    Transaction Summary
    =========================================================================
    Remove  64 Packages
    
    Freed space: 193 M
    Is this ok [y/N]: y

5.3. 重置模块流

重置模块是将所有流返回到初始状态(启用或禁用)的操作。如果模块具有默认流,则该流会因为重置模块而生效。

流程

  • 重置模块状态:

    # yum module reset module-name

    模块返回到初始状态。已启用的流和安装的配置集的信息会被清除,但没有删除安装的内容。

5.4. 删除内容的命令

这部分列出了用于删除内容的常用命令。

命令列表

删除软件包
# yum remove package
从安装的配置集中删除软件包
# yum module remove module-name:stream/profile
从活动流中删除所有软件包
# yum module remove --all module-name:stream
将模块重置为初始状态
# yum module reset module-name
禁用一个模块及其所有流
# yum module disable module-name

第 6 章 管理 Application Stream 内容的版本

AppStream 存储库中的内容可以在多个版本中提供,对应于模块流。本章论述了您在以其他方式更改启用的模块流时需要执行的操作,而不仅仅是启用新模块流。

6.1. 模块依赖关系和流更改

传统上,提供内容的软件包依赖于其他软件包,并且通常指定所需的依赖项版本。对于模块中包含的软件包,此机制同样适用,但软件包及其特定版本分组到模块和流中会提供进一步的限制。另外,模块流可以声明其他模块流的依赖关系,独立于它们包含和提供的软件包。

在使用软件包或模块执行任何操作后,所有底层安装的软件包的整个依赖项树都必须满足软件包声明的所有条件。另外,必须满足所有模块流依赖项。

因此:

  • 启用模块流可能需要启用更多模块的流。
  • 安装模块流配置集或从流安装软件包需要启用更多模块的流并安装更多软件包。
  • 禁用一个模块的流可能需要禁用其他模块流。不会自动删除任何软件包。
  • 删除软件包可能需要删除其他软件包。如果这些软件包由模块提供,模块流会保持启用状态,以准备进一步安装,即使这些流中没有安装任何软件包。这会镜像未使用的 yum 存储库的行为。

当已启用同一模块的另一个流时,无法启用模块流。要切换流,请按照 第 6.5 节 “切换到更新的流” 中的操作过程进行。另外,还可重置模块,然后启用新流。在切换到其他流前删除从流安装的所有软件包会阻止系统进入在没有提供它们的存储库或流的情况下安装软件包的状态。

从技术上讲,重置模块不会自动更改任何已安装的软件包。删除之前流提供的软件包以及依赖于它们的任何软件包都是一种明确的手动操作。

6.2. 模块化和非模块化依赖关系的交互

模块依赖关系是常规 RPM 依赖关系之上的额外层。模块依赖关系与存储库间可能存在的依赖关系的行为相似。这意味着安装不同的软件包不仅需要解析 RPM 的依赖关系,还需要事先解决模块依赖关系。

系统将始终保留模块和流选择,除非明确指示要更改它们。模块软件包将接收目前启用的模块流中包含的提供此软件包的更新,但不会升级到另一流中包含的版本。

6.3. 重置模块流

重置模块是将所有流返回到初始状态(启用或禁用)的操作。如果模块具有默认流,则该流会因为重置模块而生效。

流程

  • 重置模块状态:

    # yum module reset module-name

    模块返回到初始状态。已启用的流和安装的配置集的信息会被清除,但没有删除安装的内容。

6.4. 禁用一个模块的所有流

具有默认流的模块始终会活跃一个流。当无法访问所有模块流中的内容时,可以禁用整个模块。

先决条件

流程

  • 禁用模块:

    # yum module disable module-name

    yum 请求确认,然后为所有流禁用该模块。所有模块流都不再活跃。没有安装的内容被删除。

6.5. 切换到更新的流

当您切换到更新的模块流时,该模块中的所有软件包都会被以后的版本替代。

重要

这个步骤只适用于以下条件。

先决条件

  • 这个系统已被完全更新。
  • 在系统中安装的软件包都比该程序库中可用软件包更新。

流程

  1. 运行以下命令,以确定您的系统是否准备切换到更新的流:

    # yum distro-sync

    这个命令必须以以下信息结束:Nothing to doComplete!如果它改为提议更改并要求确认,请仔细检查这些更改,并考虑是否要继续。如果需要,重复运行 yum distro-sync 命令。另外,您可以拒绝推荐的修改,然后手动将您的系统改为命令返回 Nothing to do.Complete!

    注意

    在切换流前检查 yum distro-sync 结果,您可以防止更改与流切换无关的系统,因为这个过程的最后一步需要相同的命令。

  2. 将活动流更改为后续流:

    # yum module reset module-name
    # yum module enable module-name:new-stream
  3. 同步安装的软件包以在流间进行更改:

    # yum distro-sync

    如果此操作建议更改流外的内容,请仔细检查它们。

    注意
    • 如果某些安装的软件包依赖于之前的流,且后续流中没有兼容的版本,yum 会报告依赖关系冲突。在这种情况下,使用 --allowerasing 选项删除这些软件包,因为它们因为缺少依赖项而无法与后续流一起安装。
    • 在切换 Perl 模块时,始终需要 --allowerasing 选项,因为基本 RHEL 8 安装中的某些软件包依赖于 Perl 5.26
    • 用于解释语言的二进制扩展(通常使用 C 或 C++)在启用新流后需要重新安装;例如,gem 命令从 ruby 模块安装的某些软件包,以及 nodejs 模块中的 npm 命令, cpan 命令来自 perl 模块,或者来自 php 模块的 pecl 命令。如需更多信息,请参阅如何在 RHEL 8 中切换 Ruby 流

或者,也可从当前流中删除安装的所有模块内容 ,重置模块 ,然后安装新流

法律通告

Copyright © 2021 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.