RHEL/CentOS8で導入されたAppStreamの仕組みが分かりにくかったので、調べたことをまとめました。

RHELのソフトウェアサポートポリシー

RHELやCentOSはインフラでも利用されている安定性重視のLinuxディストリビュションで、その評判に違わず10年間のセキュリティアップデートが受けられる最強のOSです。Windowsも同等程度のサポート期間を設けていますが、開発者に分かりやすいアーキテクチャを提供しているという点では一歩進んでいると言えるでしょう。

しかし、最新技術が好きな開発者からは嫌われてしまっているOSの一つでもあります。例えば、以下のような感じです。

  • パッケージが古すぎて、最新の機能が使えない(PHPやSQL,Apache WEBサーバのバージョンが古いなど)
  • ニューラルネットワーク関連のツールはUbuntuでテストされていることが多い(古いバージョンのパッケージしかないから)
  • Macと比べるとUIが貧弱

アップストリームの開発が終了した後も10年間セキュリティパッチをポートし続けてきたRedhatとコミュニティには頭が上がりませんが、彼らにとっても古いソフトウェアをサポートし続けるのは大変なことだったようです。RHEL8からは、モジュール(module)という概念が導入され、ソフトウェアのサポートポリシーが変更されました。彼らはこの仕組みをAppStreamと名付けています。

AppStreamとは

AppStreamとは、RHEL8で発表された新しい概念です。 ソフトウェアは以下の2つに分けられて配信されることになります。

  • BaseOS: OSの動作に不可欠なパッケージ群。安定性が重視される
  • AppStream: 開発者が用いるパッケージ群。定期的にバージョンアップされる

多くのパッケージはどちらかに属することになります。 メリットとデメリットをまとめておきます。

RHEL7 RHEL8 Base RHEL8 Appstream
メリット 10年間のサポート 10年間のサポート 最新のパッケージ
複数のバージョンサポート
デメリット ・陳腐化しやすい
・Redhatが大変
Redhatが大変だが、対象は少なめ ・10年間のサポートは受けられない
・異なるバージョンは共存出来ない

これまでのRHELではPHPやApacheなどのすべてのパッケージで10年間のサポートがありましたが、近頃のプロジェクトでは古すぎるパッケージはむしろ使われない事もありました。そこで、Redhatは思い切って10年サポートを辞めました。一方で、AppStreamを用いることで異なるバージョンを簡単に扱えるようにしました。注意したいのは、複数バージョンが同時に存在できるわけではないことです。アップグレード・ダウングレードが簡単にできるようになっています。

各ソフトウェアの状況

kernel, glibc, firewalldの場合

これらのソフトウェアはすべてBaseOSに収録されており、AppStreamには入っていません。従って、10年間大きな機能追加なく終わると思います。

PostgreSQLの場合

このパッケージはAppStreamにのみ収録されています。 どのバージョンが配信されているかは以下のように確認できます。

$ sudo dnf module list postgresql
CentOS-8 - AppStream
Name                   Stream             Profiles
postgresql             10 [d]             client, server [d]
postgresql             9.6                client, server [d]

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

以下のように普通にインストールすると、デフォルトのver.10がインストールされます。

$ sudo dnf install postgresql

デフォルトバージョン以外をインストールしたい場合には、以下のコマンドを入力します。すでに他のバージョンが入っている場合、ダウン・アップグレードが提案されます。

$ sudo dnf install @postgresql:9.6

Pythonの場合

Pythonは人気のプログラミング言語ですが、RHEL系ではパッケージ管理などでも用いられています。RHEL8では以下の3つが用意されています。

名前 レポジトリ 補足
platform-python BaseOS デバッグ用パッケージはAppStreamに収録
python36 AppStream これで1つのmodule
python27 Appstream これで1つのmodule。2.7.15-22,2.7.15-24など複数バージョンあり

このうち、platform版は更新の少ないもので、開発者は原則利用しないことになります。pythonの場合はpython36で1つのmoduleにするようなので、今後python37という別のモジュールが登場する可能性もあります。この場合、2つのバージョンは共存出来るようになると思われます。追加のパッケージはPython3-numpyなどとなっているので、これは可能だと思われます。

ちなみに、RHEL/CentOS8にはデフォルトではpythonコマンドは存在しません。以下のようなコマンドで手動で設定することになります。

alternatives --set python /usr/bin/python3

まとめ

AppStreamの知識整理をしました。

  • 開発者は今後はAppStreamを用いることになる
  • AppStreamのパッケージは10年サポートされない
  • AppStreamでは単一モジュール内で複数バージョンが配信されるが、共存は出来ない
  • モジュール名が異なれば共存は可能。(Python27, Python36などの例)