RHEL/CentOS8のAppStream 知識整理
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などの例)