CentOS Stream 9: AppStreamとDNF ModulesでNode.jsやPHPの管理をより快適に

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

サーバーアップグレード時のライブラリ競合の悩みにおさらば

CentOS 7を運用したことがある方なら、PHPを5.4から7.4にアップグレードする際の苦労はよくご存じでしょう。REMIやEPELといったサードパーティのリポジトリを探し回り、既存sのシステムパッケージを壊さないよう祈るような気持ちで作業していたはずです。私は過去6ヶ月間で50台以上のサーバーをCentOS 7からCentOS Stream 9へ移行しましたが、新しいソフトウェア管理手法によって、その利便性は劇的に向上しました。

従来のLinuxディストリビューションは非常に保守的です。システムの安定性を保つためにランタイム(Node.js、Python、PHP)のバージョンを固定しますが、この安定性が最新技術を必要とする開発者の足を引っ張ることがあります。CentOS Stream 9は、AppStreamとDNF Modulesによってこの問題を解決しています。半年間、ECサイトなどの商用プロジェクトで実際に運用してみた結果、これはSysAdminにとって最も価値のある機能だと確信しました。

BaseOS、AppStream、Moduleを正しく理解する

コマンド入力で混乱しないよう、この新しいアーキテクチャの3つの主要コンポーネントを区別しておく必要があります:

  • BaseOS: 仮想マシンが起動し、安定して動作するために必要な最小限のコアパッケージ。これらが変更されることは滅多にありません。
  • AppStream: アプリケーション、開発ツール、データベースのワークロード。最大の利点は、同じソフトウェアの複数のバージョンを並行して提供できることです。
  • DNF Modules: 関連するアプリケーションをグループとしてパッケージ化する方法。1つのModuleには複数のStream(Node.js 18、20などのバージョン)とProfile(開発者向けのminimalやfull-stackなどのインストールタイプ)が含まれます。

個別の.rpmファイルをバラバラにインストールするのではなく、新しい考え方で管理します。必要なModuleを選択し、バージョン(Stream)を指定し、本番環境に適した設定(Profile)を選ぶだけです。

実践:ランタイムのインストールと切り替えを瞬時に行う

以下は、私が顧客のサーバーをセットアップする際に日常的に使用している手順です。すべての操作は、直感的なモジュール管理コマンドから始まります。

1. サポートされているバージョンの確認

すぐにインストールせず、まずはシステムで利用可能なものを確認しましょう:

dnf module list nodejs

画面には18や20などのリストが表示されます。記号 [d] はデフォルト、[e] は現在有効な(enabled)バージョンを意味します。これにより、新しいプロジェクトに誤って古いバージョンをインストールするミスを防げます。

2. モダンなプロジェクト向けにNode.js 20をインストールする

プロジェクトでNode.js 20をインストールする手間は不要です。以下の2つのコマンドを実行するだけです:

# バージョン20のストリームを有効化
sudo dnf module enable nodejs:20

# commonプロファイルをインストール(ほとんどのアプリケーションで十分です)
sudo dnf module install nodejs:20

複雑な依存関係もシステムが自動的に解決してくれるため、わずか30秒ほどで完了します。node -v で確認すれば、期待通りの結果が得られるはずです。

3. PHP 8.1と8.2を最もクリーンに切り替える方法

これは私が特に気に入っている機能です。アプリケーションの移行時、まずPHP 8.1でテストしてから8.2に上げるという作業が、DNF Modulesを使えば非常にスマートに行えます。

アップグレードする際は、システムのゴミを残さないためにResetプロセスを実行します:

# モジュールをリセットして古いバージョンの設定を完全に削除
sudo dnf module reset php

# 新しいバージョンを有効化してインストール
sudo dnf module enable php:8.2
sudo dnf module install php:8.2/common

重要な教訓: dnf module reset コマンドを絶対に省略しないでください。直接上書きインストールしようとすると、古い依存関係が残り、後にデバッグが困難な「謎の挙動」を引き起こす可能性があります。

4. プロファイルによる容量の最適化

各モジュールは通常、複数のProfileに分かれています。Pythonの場合、サーバーでコードを実行するだけならminimalを、ライブラリのビルドが必要ならdevelopmentを選択します。プロファイルのリストは以下のコマンドで確認できます:

dnf module info --profiles python39

インストール構文は module:stream/profile となります。例:sudo dnf module install python39/build

AppStreamをより効率的に管理するためのヒント

実際の運用を通じて得られた、サーバーをクリーンに保つための3つのルールを紹介します:

  1. 公式を優先する: 外部リポジトリを探す前に、必ず dnf module list を確認してください。AppStreamのパッケージはRHELチームによってセキュリティテストが徹底されています。
  2. 簡易インストールコマンドに注意: dnf install [パッケージ名] を使うと、システムはデフォルトバージョンを選択します。自分が意図するバージョンを正確に制御するために、常に module enable を使用しましょう。
  3. 残存する設定ファイルの確認: PHPのバージョンを変更した後は、/etc/php.d/ ディレクトリを確認してください。古い拡張機能の設定ファイルが残り、新しいバージョンと競合することがあります。

結びに

AppStreamとDNF Modulesを使いこなすことで、CentOS Stream 9の管理は格段にプロフェッショナルなものになります。エンタープライズOSとしての安定性と、開発現場の絶え間ない変化へのニーズ、その両立を阻んでいた壁が取り払われます。出所不明な大量のリポジトリに頭を悩ませる代わりに、数個のコマンドだけでランタイムをアップグレードできるのです。RHEL 9やAlmaLinuxを使い始めるなら、サーバーの安定性とメンテナンス性を高めるために、今日からModuleを使う習慣を身につけましょう。

Share: