1 概述
这个文档介绍了在RHEL8.x ,CentOS8.x 上面, 如何对AppStream 软件仓库中的模块进行查询,安装,等操作。适用于Linux 系统的管理人员,维护人员等。
2 软件包介绍
从RHEL8,CentOS8 开始,软件包分为两个主要的仓库,BaseOS 和 AppStream。
BaseOS
提供了OS 的基础软件包,例如grub2, kernel,lib 等等。这个仓库里面的软件包是以RPM 格式直接提供的。AppStream
提供了用户应用程序,例如http, python, php, gcc 等等。这个仓库里面软件包则是通过两种格式提供,一个是RPM 格式,而另外一个就是module 了。这可能会问,为什么会使用这样的方式来管理呢? 主要是这样的:独立的RPM 格式
这个也就是我们所熟知的传统的RPM包的格式了。Modules 模块的形式
Modules 这种方式呢,其实就是把一系列强相关的RPM组合成一个逻辑上的模块单元。 例如httpd 模块(包含了httpd,httpd-devel,mod_http,mod_ss等一系列的RPM)。它这个里面呢,所有的RPM都是同时编译,测试,以及发布的。 所以通过这样的方式,就具有了更好的兼容性,稳定性,以及灵活性。4 module 的详细介绍
module 里面,包含了两个重要的概念, 一个是module的stream, 另外一个就是module的profiles了。 下面我们来仔细看一下
Streams
它通过版本来进行管理的,可以理解为module 的版本,比如1.0, 2.0 等等(可以参考下面的例子 Stream的信息)。 可以理解为它是AppStream里面的一个子repo。 最小的单元一系列RPM被放入一个对应的版本的module stream里面。跟着module stream一起发布,更新。 而不同的版本的module stream 可以独立接收到更新。而我们则可以根据需要,通过命令来进行对module stream 启用和禁用或者默认。 启用则说明我们可以使用到这个module stream里面对应的RPM包;相对而言,如果禁用,我们就是无法使用这个module stream里面对应的RPM包了。这样会出现一种现象,比如我的AppStream源里面明明有其中一个版本的RPM, 但是我却无法使用它。这就是因为这个RPM版本对应的module stream被禁用了,因为这个版本的RPM是这个straem的一员,自然也就没法使用它了。而同一个module,同一时间只能有一个启用的stream。而默认情况下,会有一个默认其中的stream, 这样可以不用做任何的动作的情况下就可以使用到默认 stream的RPM包了。同样,module stream 也会与RPM类似有依赖关系。
比如下面这个例子,我们可以看到httpd 这个module有两个stream, 2.4和1.0 两个版本。其中 2.4 是启用的stream ,并且是default的。1
2
3
4
5Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
httpd 2.4 [d][e] common [d], devel, minimal Apache HTTP Server
httpd 1.0 common [d], devel, minimal Apache HTTP Server
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledProfiles
它是用过目的来进行管理的,可以理解为module的使用描述。 它描述了对应的使用范围的以及一系列的RPM包,类似development,minimal, 等等;不同的profile里面会包含不用数量的RPM包。比如development profile里面则会包含devel RPM包; 而minimal profile里面则不会包含devel 的RPM包。 所以这样客户更方便我们来根据需要来选择对应的profile 来安装对应module,这样我们安装了我们需要的RPM了。同样,我们也可以有default的profile,这样默认情况下,我们不需要做任何就可以在安装时,使用default的profile了。
比如下面这个例子,我们可以看到http的这个module有三个profile,common,devel和minimal。 而common则是default的profile。1
2
3
4
5Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
httpd 2.4 [d][e] common [d], devel, minimal Apache HTTP Server
httpd 2.0 common [d], devel, minimal Apache HTTP Server
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled5 module 的操作示例
5.1 显示当前系统中可用的 module
1
# yum module list
示例。 我们可以看到当前系统所有可用的module,它们的stream信息(d=default,e=enabled)。profile信息,描述的等等。
1
2
3
4
5
6
7
8Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
container-tools rhel8 [d][e] common [d] Common tools and dependencies for container runtimes
container-tools 1.0 common [d] Common tools and dependencies for container runtimes
container-tools 2.0 common [d] Common tools and dependencies for container runtimes
go-toolset rhel8 [d][e] common [d] Go
idm client [d] common [d] RHEL IdM long term support client
......5.2 显示module详细信息,可以查看模块描述,profile,提供的RPM包等等。
1
# yum module info module-name
示例。可以看到stream版本,profile,里面包含的包,以及版本的等等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Name : httpd
Stream : 2.4 [d][e][a]
Version : 8000020190405071959
Context : 55190bc5
Architecture : x86_64
Profiles : common [d], devel, minimal
Default profiles : common
Repo : rhel-8-for-x86_64-appstream-rpms
Summary : Apache HTTP Server
Description : Apache httpd is a powerful, efficient, and extensible HTTP server.
Requires : platform:[el8]
Artifacts : httpd-0:2.4.37-11.module+el8.0.0+2969+90015743.src
: httpd-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: httpd-debuginfo-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: httpd-debugsource-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: httpd-devel-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: httpd-filesystem-0:2.4.37-11.module+el8.0.0+2969+90015743.noarch
: httpd-manual-0:2.4.37-11.module+el8.0.0+2969+90015743.noarch
: httpd-tools-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: httpd-tools-debuginfo-0:2.4.37-11.module+el8.0.0+2969+90015743.x86_64
: mod_http2-0:1.11.3-2.module+el8.0.0+2969+90015743.src
: mod_http2-0:1.11.3-2.module+el8.0.0+2969+90015743.x86_64
: mod_http2-debuginfo-0:1.11.3-2.module+el8.0.0+2969+90015743.x86_64
: mod_http2-debugsource-0:1.11.3-2.module+el8.0.0+2969+90015743.x86_64
......5.3 显示对应的profile里面的包含那些具体的包。
1
# yum module info --profile module-name
示例 实现了module的版本,还有其中不同的profile包含了什么包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14# yum module info --profile httpd
Name : httpd:2.4:820190206142837:9edba152:x86_64
common : httpd
: httpd-filesystem
: httpd-tools
: mod_http2
: mod_ssl
devel : httpd
: httpd-devel
: httpd-filesystem
: httpd-tools
minimal : httpd
.....5.4 显示当前module状态,比如里面的enabled,disable等状态。
1
# yum module list module-name
示例 模块的信息,Stream的信息,default,profile信息等。(注意,如果不在enabled状态,是yum whatprovides 是无法看到对应的rpm的)
1
2
3
4
5
6
7# yum module list php
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled5.5 查找那个模块提供了RPM
1
# yum module provides package
示例 我们查找那个podman RPM 的详细信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# yum module provides podman
podman-1.0.0-2.git921f98f.module+el8+2784+9a0c1dfe.x86_64
Module : container-tools:1.0:820190220135513:20125149:x86_64
Profiles : common
Repo : rhel-8-for-x86_64-appstream-rpms
Summary : Common tools and dependencies for container runtimes
......
podman-1.6.4-23.module+el8.3.0+8377+eff33c85.x86_64
Module : container-tools:2.0:8030020201008133618:830d479e:x86_64
Profiles : common
Repo : rhel-8-for-x86_64-appstream-rpms
Summary : Common tools and dependencies for container runtimes
......
podman-1.9.3-2.module+el8.2.1+6867+366c07d6.x86_64
Module : container-tools:rhel8:8020120200601155013:ffd2803a:x86_64
Profiles : common
Repo : rhel-8-for-x86_64-appstream-rpms
Summary : Common tools and dependencies for container runtimes5.6 禁用一个对应的module stream
1
# yum module disable module-name:stream
示例 禁用stream 版本rhel8 的 “container-tools”
1
2
3
4
5
6
7
8
9
10
11
12
13
14# yum module disable container-tools:rhel8
Only module name is required. Ignoring unneeded information in argument: 'container-tools:rhel8'
Dependencies resolved.
======================================================================================================
Package Architecture Version Repository Size
=====================================================================================================
Disabling module profiles:
container-tools/common
Disabling modules:
container-tools
Transaction Summary
======================================================================================================
Is this ok [y/N]: y
Complete!5.7 启用一个对应的module stream
1
# yum module enable module-name:stream
示例 启用 stream 版本 2.0 的 “container-tools” (注意,需要先要将原来其中的其他stearm 禁用掉。)
1
2
3
4
5
6
7
8
9
10
11# yum module enable container-tools:2.0
Dependencies resolved.
========================================================================================================
Package Architecture Version Repository Size
========================================================================================================
Enabling module streams: container-tools 2.0
Transaction Summary
=========================================================================================================
Is this ok [y/N]: y
Complete!5.8 安装一个指定的模块
1
# yum module install module-name
示例 (安装默认的container-tools module stream,如果要安装其他stream则需要将它enable才能安装)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# yum module install container-tools
Last metadata expiration check: 2:41:25 ago on Sun 08 Nov 2020 09:10:32 AM CST.
Dependencies resolved.
=================================================================================================
Package Arch Version Repository Size
=================================================================================================
Upgrading:
buildah x86_64 1.15.1-2.module+el8.3.0+8221+97165c3f rhel-8-for-x86_64-appstream-rpms 8.0 M
conmon x86_64 2:2.0.20-2.module+el8.3.0+8221+97165c3f rhel-8-for-x86_64-appstream-rpms 49 k
.....
Transaction Summary
=======================================================================================================
Install 8 Packages
Upgrade 12 Packages
Installed:
......
toolbox-0.0.8-1.module+el8.3.0+8221+97165c3f.noarch
Complete!5.9 删除一个指定的模块
1
# yum module remove --all module-name:stream
示例 这样就可以删除之前安装的container-tools的默认的stream 版本了。
1
2
3
4
5
6
7
8
9
10
11# yum module remove container-tools:rhel8
Dependencies resolved.
==============================================================================================
Package Architecture Version Repository Size
=================================================================================================
Removed:
cockpit-podman-18.1-2.module+el8.3.0+8221+97165c3f.noarch crun-0.14.1-2.module+el8.3.0+8221+97165c3f.x86_64
.....
Complete!到此,RHEL8.x CentOS8.x 的module 简介及操作示例就介绍完毕了。