RHEL 8 あるいは Fedora 28 のモジュールについて

Red Hat Enterprise Linux 8 Beta がリリースされたようです。さっそくリリースノート読んでみると、RHEL 8 は Fedora 28 がベースになっているようです。さらにリリースノートを読んでいくと、気になる項目が記載されていました。モジュールです。

モジュールとは

Fedora の資料ですが、モジュールについては以下のドキュメントがありました。

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

ざっくり言うと、システム管理者が望むような、最新バージョンよりは長年安定している少し古いバージョンを使いたい、という要望に応えるもののようです。例えば、Fedora 28 で PostgreSQL を入れようとしたら 10 が降ってきますが、これを互換性等の理由で 9.6 を入れられるようにするという代物だそうです。

使い方

以降、Fedora 28 での操作例です。RHEL 8 でも多分大きく変わらないと思います。

使えるモジュールのリストは dnf module list で確認できます。

# dnf module list
Fedora Modular 28 - x86_64
Name                     Stream              Version                Profiles                            
reviewboard              2.5 [d]             20180206144254         default, server                     

Fedora Modular 28 - x86_64 - Updates
Name                     Stream              Version                Profiles                            
ant                      1.10                20180629154141         default                             
avocado                  latest              20181004173516         default, minimal                    
byteman                  byteman             20180711142551         default                             
container-tools          2017.0              20180313063358         default                             
cri-o                    2017.0              20180313134242         default                             
django                   1.6                 20180409143454         default, python2_development        
docker                   2017.0              20180314032736         default                             
dwm                      6.0                 20180813144159         default, user                       
dwm                      6.1                 20180813122714         default, user                       
dwm                      latest              20180814184656         default, user                       
flatpak-runtime          f28                 20180307202408         buildroot, runtime, ...             
gcsf                     master [d]          20180730063540         default                             
ghc                      8.4                 20180930092756         default, minimal, ...               
gimp                     2.10                20180824144949         default, devel                      
golang                   1.10                20180327174614         default                             
golang-ecosystem         2017.0              20180312141905         default                             
hub                      pre-release         20180613180542         default                             
libgit2                  0.26 [d]            20181103165214                                             
libgit2                  0.27                20181028172505                                             
lizardfs                 devel               20180810084334                                             
mariadb                  10.1                20180419160707         client, default, ...                
maven                    3.5                 20180629153919         default                             
mongodb                  3.6                 20180601084133         client, default, ...                
mysql                    5.6                 20180507203856         client, default, ...                
mysql                    8.0                 20180507133324         client, default, ...                
nodejs                   10                  20181011185441         default, development, ...           
nodejs                   6                   20180816121924         default, development, ...           
nodejs                   8                   20180816123422         default, development, ...           
nodejs                   9                   20180614205456         default, development, ...           
postgresql               9.6                 20180429200004         client, default, ...                
reviewboard              3.0                 20180607124319         default, server                     
ripgrep                  latest              20181104174352         default                             
ripgrep                  master [d]          20180726145207         default                             
scala                    2.10                20180702155503         default                             
squid                    4.0                 20180604145326         default                             
stratis                  1 [d]               20181103101935         default                             
stratis                  master              20180726133047         default                             

Hint: [d]efault, [e]nabled, [i]nstalled, [l]ocked

ここで、先の例のように PostgreSQL を入れようとしたら、10 が降ってきます。

# dnf install postgresql
 :
========================================================================================================
 Package                      Arch                Version                    Repository            Size
========================================================================================================
Installing:
 postgresql                   x86_64              10.6-1.fc28                updates              1.5 M
Installing dependencies:
 postgresql-libs              x86_64              10.6-1.fc28                updates              301 k
 :

このとき、PostgreSQL 9.6 を入れたい場合、以下のようにすると 9.6 が降ってきます。

# dnf install @postgresql:9.6
========================================================================================================
 Package                 Arch         Version                               Repository             Size
========================================================================================================
Installing module packages:
 postgresql-server       x86_64       9.6.8-1.module_1710+abca667b          updates-modular       4.6 M
Installing dependencies:
 postgresql              x86_64       9.6.8-1.module_1710+abca667b          updates-modular       1.3 M
 postgresql-libs         x86_64       9.6.8-1.module_1710+abca667b          updates-modular       249 k

プロファイル

各モジュールには、用途に応じたプロファイルも用意されているようです。dnf module list で出てくる Profiles の欄ですね。先の PostgreSQL だと、client プロファイルというのがいるようです。client プロファイルだと、postgresql-server パッケージはインストールされないというように、用途がきっちり分かれていますね。

# dnf install @postgresql:9.6/client
========================================================================================================
 Package                Arch          Version                              Repository              Size
========================================================================================================
Installing module packages:
 postgresql             x86_64        9.6.8-1.module_1710+abca667b         updates-modular        1.3 M
Installing dependencies:
 postgresql-libs        x86_64        9.6.8-1.module_1710+abca667b         updates-modular        249 k