Infrastructure 知識: dnf對module的處理

yahoon發表於2022-04-26

引言

從RHEL8/CentOS8開始,dnf取代yum作為rpm 包管理工具。與之而來的還有模組(module)這個東西。 有了它們的加持,讓在同一個OS上安裝不同版本的軟體或者開發語言的工作比之前容易多了。

簡介

Modules are special package groups usually representing an application, a language runtime, or a set of tools. They are available in one or multiple streams which usually represent a major version of a piece of software, giving you an option to choose what versions of packages you want to consume.

To simplify installation, modules usually define one or more installation profiles that represent a specific use case. For example a server or a client profile in a database module.

也就是說:

一個軟體可以有多個版本,每個版本對應一個stream. 在每個stream內部,又分為proile對應到安裝場景(比如開發, server, client)。

實際dnf使用中的要點

如果module有多個stream(版本),會有一個是預設的, 在dnf命令輸出裡面在stream name後用[d]表示

如果某個stream有多個profiles, 會有一個預設的,在dnf命令輸出裡面在profile name後用[d]表示

Module install

語法

    $ dnf module install NAME
    $ dnf module install NAME:STREAM
    $ dnf module install NAME/PROFILE
    $ dnf module install NAME:STREAM/PROFILE

下面以nginx舉例

$ sudo dnf module list nginx
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
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                  

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

解讀output:

nginx module 有4個stream(對應4個版本),預設安裝的是1.14,1.14這個stream只有一個profile “common”, 它也是預設安裝的profile

例子: 檢視已經安裝的module

$ dnf module list --installed
Name      Stream       Profiles                                   Summary                                                       
nodejs    14 [e]       common [d] [i], development, minimal, s2i  Javascript runtime                                            
python39  3.9 [d][e]   build, common [d] [i]                      Python programming language, version 3.9                      

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

dnf module list --installed 顯示已經安裝的module

檢視輸出 nodejs這一行表示:

14 [e]: 表示14這個版本(stream)已經啟用了,用[e]表示. 這裡[e]就肯定說明已經安裝了

common [d] [i], development, minimal, s2i : 共4個profiles: common, devleopment, mininal, s2i。 其中common 是預設的Profile,用[d]表示,而且它已經安裝在本機了,用[i]表示

檢視輸出 python39這一行表示:

3.9 [d] [3]: 3.9這個版本(stream)是這個module的預設版本,用[d]表示;而且是已經啟用了,用[e]表示。 這裡[e]就肯定說明已經安裝了

Refer

https://docs.fedoraproject.org/en-US/modularity/using-modules/

相關文章