第5章: パッケージ管理とソフトウェアのインストール
5.1 パッケージ管理とソフトウェアのインストール
5.1.1 パッケージ管理の基礎と用語解説
AlmaLinux9 では、RPM(Red Hat Package Manager)形式で配布されるソフトウェアを管理するために DNF(Dandified YUM)を標準採用しています。
- RPM:個々のソフトウェア単位をパッケージ化したファイル形式
- リポジトリ:RPM パッケージを集めたサーバー群
- DNF:依存関係解決を自動化し、インストール/更新/削除を高速化するツール (docs.fedoraproject.org)
これにより、手動で依存パッケージを探す手間がなくなり、セキュアなインストールと一貫したセキュリティ設定(SELinux など)の維持が容易になります。
5.1.2 AlmaLinux9 標準リポジトリの構成
AlmaLinux9 には以下の3種類の公式リポジトリがあり、用途に応じて切り替え可能です。
- BaseOS:OS コア機能を提供
- AppStream:言語ランタイムや追加アプリケーションを Module Streams 形式で提供
- extras:AlmaLinux 独自またはコミュニティ提供パッケージ
💡ポイント: Module Streams を利用する際は AppStream
の有効化状態を必ず確認し、意図しないバージョン混在を防ぎましょう。
5.1.3 DNF の前提条件と基本操作
DNF は root ユーザーで実行し、以下の操作でパッケージを管理します。
- メタデータ更新(リポジトリ情報の取得)
# root ユーザーで実行
sudo dnf makecache
実行すると、ローカルに最新のリポジトリ情報がキャッシュされ、以降の操作が高速化されます。
- インストール
# apache をインストール
sudo dnf install httpd
実行すると httpd
とその依存パッケージが一括で取得・配置されます。
- 更新
# システム全体を最新化
sudo dnf update
実行すると、すべてのインストール済みパッケージが最新バージョンに更新されます。
- 削除
# apache を削除
sudo dnf remove httpd
実行すると不要になった依存パッケージも自動的に整理されます。
💡ポイント: 定期的に sudo dnf clean all
を実行し、キャッシュ肥大化によるディスク消費を抑制しましょう。
5.1.4 セキュアなインストール:GPG署名とSELinux
公式リポジトリから取得する RPM は GPG 署名で整合性が検証されます。以下の設定を有効にしてください。
# /etc/yum.repos.d/*.repo(root ユーザー)
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
また、SELinux が有効な環境では、インストール後に自動で適切なセキュリティコンテキストが付与されるため、手動でのラベル付与は原則不要です。セキュリティ設定(SELinux)の状態確認は以下で行います。
# SELinux の現在モード確認
sudo getenforce
💡ポイント: “Permissive” モードは監査用であり、本番環境では必ず “Enforcing” を維持しましょう。
5.1.5 Module Streams によるバージョン管理
AppStream では同一ソフトウェアの複数バージョンを共存させる Module Streams を提供します。用途に合わせてバージョンを切り替えましょう。
# 利用可能なモジュール一覧取得(root)
sudo dnf module list
# PHP 7.4 ストリームを有効化・インストール
sudo dnf module enable php:7.4
sudo dnf module install php:7.4
実行すると、指定バージョンの PHP および関連パッケージが導入されます。切り替え前には必ず以下でリセットしてください。
sudo dnf module reset php
5.1.6 EPEL とサードパーティリポジトリの活用
公式外のパッケージを利用したい場合、EPEL(Extra Packages for Enterprise Linux)などを追加します。
# EPEL リポジトリ有効化(root)
sudo dnf install epel-release
sudo dnf repolist
有効化後は dnf search パッケージ名
で豊富なソフトウェアが利用可能になります。
5.1.7 ローカルリポジトリ構築とオフライン対応
ネットワーク制限下や一貫した環境構築のため、ローカルリポジトリを用意します。
# createrepo をインストール(root)
sudo dnf install createrepo
# メタデータ生成
createrepo /opt/localrepo
# /etc/yum.repos.d/local.repo を作成
cat << EOF | sudo tee /etc/yum.repos.d/local.repo
[localrepo]
name=Local Repository
baseurl=file:///opt/localrepo
enabled=1
gpgcheck=0
EOF
実行すると、/opt/localrepo
内の RPM を社内ミラーとして利用できます。
5.1.8 自動アップデート設定 (dnf-automatic)
セキュリティパッチを自動適用し、継続的なセキュリティ設定を維持します。
# dnf-automatic をインストール(root)
sudo dnf install dnf-automatic
# /etc/dnf/automatic.conf の一例
# security のみ自動更新
[commands]
upgrade_type = security
[emitters]
emit_via = email
[email]
email_from = root@yourdomain
email_to = admin@yourdomain
smtp_server = localhost
# タイマー有効化
sudo systemctl enable --now dnf-automatic.timer
実行後、セキュリティアップデートのみがバッチ処理で適用され、管理者宛に通知が届きます (docs.fedoraproject.org)
5.2 DNFパッケージマネージャー
5.2.1 DNFとは何か
DNF(Dandified YUM)は RPMベースの Linuxディストリビューション向けの次世代パッケージ管理ツールです。従来の YUM と CLI互換性を維持しつつ、libsolv を利用した高速な依存関係解決、プラグインによる機能拡張、厳格な API を提供します (DNF, Red Hat Documentation).
5.2.2 なぜDNFを使うのか
- 高速な依存解決:libsolv ベースでメタデータ処理が最適化され、依存関係の解決が従来より高速です。
- プラグイン拡張:
dnf-plugins-core
による COPR やバージョンロックなど、多彩なプラグインが利用可能です。 - yum エイリアス:RHEL 9 では
yum
コマンドがdnf
のエイリアスとして動作し、既存スクリプトとの互換性を確保しています (Red Hat Documentation). - セキュリティ設定との親和性:SELinux が有効な環境でも自動で適切なセキュリティコンテキストを付与し、一貫したセキュリティ運用を支援します。
5.2.3 DNFの基本操作
メタデータキャッシュの更新
- 実行ユーザー:root
- 結果:ローカルにリポジトリ情報をキャッシュし、以降の操作を高速化します。
sudo dnf makecache
パッケージのインストール
- 実行ユーザー:root
- 結果:指定パッケージと依存パッケージを一括で取得・配置します。
sudo dnf install nginx
システム全体の更新
- 実行ユーザー:root
- 結果:インストール済みすべてのパッケージを最新バージョンに更新します。
sudo dnf update
パッケージの削除
- 実行ユーザー:root
- 結果:指定パッケージと不要になった依存パッケージを自動で整理します。
sudo dnf remove nginx
💡ポイント: 定期的に sudo dnf clean all
を実行し、キャッシュ肥大化によるディスク消費を抑制しましょう。
5.2.4 検索と情報取得
コマンド | 説明 |
---|---|
sudo dnf search <キーワード> | パッケージ名や概要で検索 |
sudo dnf list <パッケージ> | 利用可否やバージョンを一覧表示 |
sudo dnf info <パッケージ> | 詳細情報(バージョン、サイズ、説明等) |
sudo dnf provides <ファイル> | ファイルを提供するパッケージを検索 |
sudo dnf repoquery [--info] <パッケージ> | インストールせずに依存関係や詳細を確認 (Red Hat Documentation) |
5.2.5 トランザクション履歴とロールバック
- 履歴一覧表示
sudo dnf history
- 特定パッケージの操作履歴
sudo dnf history list httpd
- トランザクション詳細確認
sudo dnf history info 12
- 単一トランザクションの取り消し
sudo dnf history undo 12
- 複数トランザクションのロールバック
sudo dnf history rollback 5
💡ポイント: selinux
や kernel
など一部パッケージのダウングレードはサポート外ですので注意してください (Red Hat Documentation)。
5.2.6 プラグインと拡張機能
dnf-plugins-core の導入
sudo dnf install dnf-plugins-core
バージョンロック(versionlock)例
- 実行ユーザー:root
- 結果:指定パッケージを特定バージョンに固定し、意図しない更新を防止します。
# versionlock プラグイン導入
sudo dnf install python3-dnf-plugins-extras-versionlock
# nginx をバージョン1.20.1-2.el9_1 にロック
sudo dnf versionlock add nginx-1.20.1-2.el9_1
5.2.7 高度な設定
/etc/dnf/dnf.conf
での除外設定
- 目的:特定パッケージをすべての DNF 操作から除外
- 設定例:
[main]
excludepkgs=kernel*,qemu-*
[repo-baseos]
exclude=python3-doc
一時的に除外設定を無効化
sudo dnf install vim --disableexcludes=main
5.3 リポジトリ管理
AlmaLinux9 でのリポジトリ管理は、システムの安定性やセキュリティ設定(SELinux や GPG署名検証)を維持しつつ、必要なパッケージを柔軟に取得するための重要な要素です。本節では以下を詳しく解説します。
- 公式リポジトリの種類と役割
- 追加公式リポジトリの活用法
- リポジトリの有効化/無効化
- カスタムリポジトリの作成方法
- セキュリティ設定(GPG署名検証)
5.3.1 公式リポジトリの種類と役割
AlmaLinux9 の標準リポジトリは以下の3つです(いずれもデフォルトで有効) (AlmaLinux Wiki)。
リポジトリ名 | 内容 |
---|---|
BaseOS | OSコア機能を提供するパッケージ(システムの基盤機能) |
AppStream | 言語ランタイムや追加アプリケーションを Module Streams 形式で提供 |
extras | RHEL に含まれない独自/コミュニティパッケージ |
💡ポイント: Module Streams(AppStream)を利用する際は、意図しないバージョン混在を避けるため有効化状態を事前に確認しましょう。
5.3.2 追加公式リポジトリの活用
開発や高可用性、テスト環境など特定用途向けに、以下の追加リポジトリが利用可能です (AlmaLinux Wiki)。
リポジトリ名 | 説明 | 有効化方法 |
---|---|---|
High Availability | クラスタリング向けフェイルオーバーサービスを提供 | sudo dnf config-manager --set-enabled ha |
Plus | コアコンポーネントをパッチ付きで置き換えたパッケージ | sudo dnf config-manager --set-enabled plus |
PowerTools / CRB | 開発者向け追加ライブラリ群(旧 PowerTools) | sudo dnf config-manager --set-enabled crb |
Real Time (RT) | 超高決定性アプリ向けチューニング済みカーネル等 | sudo dnf config-manager --set-enabled rt |
Testing | 安定化前のアップデートを収めたリポジトリ(本番環境への導入は非推奨) | sudo dnf install almalinux-release-testing sudo dnf config-manager --set-enabled almalinux-testing |
5.3.3 リポジトリの有効化/無効化
必要プラグインの導入
- 実行ユーザー:root
- 結果:
dnf config-manager
コマンドが使用可能になります。
sudo dnf install dnf-plugins-core
リポジトリ操作例
- リポジトリ無効化
# rootユーザーで epel を無効化
sudo dnf config-manager --set-disabled epel
- リポジトリ有効化
# rootユーザーで epel を再度有効化
sudo dnf config-manager --set-enabled epel
💡ポイント: 一時的に無効化したい場合は、コマンド実行時に --disablerepo=<リポジトリ名>
を付与すると便利です。
5.3.4 カスタムリポジトリの作成方法
- リポジトリ定義ファイルの作成
/etc/yum.repos.d/custom.repo
を作成し、以下のように記述します。- baseurl:リポジトリのURL(
$basearch
などの変数が利用可能) - enabled:
1
で有効、0
で無効 - gpgcheck:
1
でGPG署名検証を有効に(後述)
- baseurl:リポジトリのURL(
[myrepo]
name=My Custom Repository
baseurl=https://my.internal.repo/almalinux/9/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://my.internal.repo/keys/RPM-GPG-KEY-MyRepo
- リポジトリ情報の確認
sudo dnf repolist all
5.3.5 セキュリティ設定(GPG署名検証)
RPMパッケージの改ざん防止には GPG署名検証が必須です。以下の設定を行うことで、リポジトリ単位・グローバルに検証を強制できます (docs.fedoraproject.org)。
- グローバル設定(
/etc/dnf/dnf.conf
)
[main]
gpgcheck=1
- リポジトリ個別設定(
.repo
ファイル内)
# custom.repo の例
gpgcheck=1
gpgkey=https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
💡ポイント: gpgcheck=1
はデフォルトですが、repo_gpgcheck=1
を併用するとリポジトリのメタデータ自体にも署名検証が行われ、より堅牢になります。
5.4 モジュールストリーム (Module Streams)
AlmaLinux9 の AppStream 機能として提供されるモジュールストリームは、同一ソフトウェアの複数バージョンを安全かつ簡便に管理・切り替えできる仕組みです。「何を」「なぜ」「どうやって」の流れで詳しく解説します。
5.4.1 モジュールストリームとは
- モジュール:関連する RPM パッケージ群をひとまとめにした論理単位
- ストリーム:モジュール内で提供される特定バージョンの集合
- プロファイル:モジュール内のストリームから必要なパッケージセットを選択するプリセット
これにより、同一モジュールの異なるバージョン(例:PHP7.4 と PHP8.2)を共存させたり、切り替えたりできます (AlmaLinux Wiki, Red Hat Documentation)。
💡ポイント: 「プロファイル」を指定することで、Web サーバー用/開発用など用途別に最適なパッケージ群を一括導入できます。
5.4.2 なぜモジュールストリームを使うのか
- 頻繁なユーザー空間コンポーネントの更新:OS コアをアップグレードせずに、言語ランタイムやデータベースを最新化できる
- 安定性の担保:モジュールとしてテストされたパッケージセットのみを導入し、依存の衝突リスクを低減
- 複数バージョン共存:例えば、プロジェクト A は PHP7.4、プロジェクト B は PHP8.2 といった共存運用が可能
- セキュリティ対応:特定バージョンに絞り込むことで、脆弱性対応を計画的に行える (AlmaLinux Wiki, Red Hat Documentation)。
5.4.3 モジュールストリームの一覧表示
実行ユーザー:root
結果:利用可能なモジュールとストリーム、現在のステータス([d]efault, [e]nabled, [x]disabled, [i]nstalled)が表示されます。
sudo dnf module list
出力例:
Name Stream Profiles Summary
httpd 2.4 [d] common [d], minimal Apache HTTP Server
nodejs 14 [d] default [d], minimal Node.js JavaScript runtime
php 7.4 [d] default [d], devel PHP scripting language
php 8.2 default, devel PHP scripting language
5.4.4 ストリームの有効化とインストール
- 有効化:ストリームをシステムに登録
- インストール:ストリームを有効化した上でパッケージを導入
- 実行ユーザー:root
- 結果:指定バージョンのモジュールストリームが有効となり、関連パッケージがインストールされます。
# PHP 8.2 ストリームを有効化
sudo dnf module enable php:8.2
# PHP 8.2 を “default” プロファイルでインストール
sudo dnf module install php:8.2/default
💡ポイント: enable
と install
は別コマンドですが、インストール時に未有効のストリームがあれば自動的に有効化されます。
5.4.5 ストリームのリセットと無効化
- リセット:モジュールを初期状態(有効・無効どちらでもない)に戻す
- 無効化:全ストリームをアクセス不可にする
- 実行ユーザー:root
- 結果:切り替え時の依存不整合を防ぐため、既存ストリーム設定がクリアされます。
# PHP モジュールをリセット(デフォルトストリームに戻す場合あり)
sudo dnf module reset php
# PHP モジュールを完全に無効化
sudo dnf module disable php
💡ポイント: ストリーム切り替え前には必ず reset
を実行しないと、二重有効化エラーになります (Red Hat Documentation)。
5.4.6 高度なモジュラー依存関係
- モジュラー依存:モジュール間でストリーム依存関係を宣言できる(例:
mysql:8.4
がopenssl:3.0
を要求) - 自動連鎖有効化:あるストリームを有効化すると、依存先モジュールが自動的に有効化・インストールされる場合があります
- 注意点:
- 依存するモジュールが未導入だと、操作時にさらにストリーム変更や追加パッケージのインストールが発生
- パッケージ削除時も依存先ストリームは有効なまま残り、再利用準備状態となる (Red Hat Documentation, Red Hat Documentation)。
💡ポイント: 大規模環境では、事前に dnf module list <モジュール名>
で依存関係を把握し、影響範囲を評価してから操作してください。
5.5 パッケージ署名と GPGキー管理
AlmaLinux9 におけるパッケージ署名と GPG キー管理は、システムの整合性を保ち、改ざんや不正パッケージの混入を防ぐ重要なセキュリティ対策です。
5.5.1 パッケージ署名の役割と重要性
AlmaLinux9 では、公式リポジトリから配布されるすべての RPM パッケージに GPG 署名が付与され、DNF や RPM コマンド実行時に自動で検証されます。これにより、パッケージの配布経路での改ざんや中間者攻撃を防ぎ、一貫したセキュリティ設定(SELinux)との親和性を確保します。
💡ポイント: 本番環境では “gpgcheck=1” を必ず有効にし、署名検証を省略しないようにしましょう。 (AlmaLinux OS)
5.5.2 GPG キーの取得とインポート方法
公開キーの取得
公式 GPG 公開キーは以下 URL から入手可能です。
# root ユーザーで実行
sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9 \
https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9
実行すると、公式キーが /etc/pki/rpm-gpg/
配下に配置されます。
キーのインポート
# root ユーザーで実行
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
実行後、RPM データベースにキーが登録され、以降のインストール時に自動検証が行われます。 (AlmaLinux Wiki)
5.5.3 gpgcheck と repo_gpgcheck の設定
グローバル設定
/etc/dnf/dnf.conf
に以下を追記すると、全リポジトリに対して GPG 署名検証が強制されます。
# /etc/dnf/dnf.conf(root ユーザー)
[main]
gpgcheck=1
リポジトリ個別設定
各 .repo
ファイル内で細かく制御できます。以下は公式 BaseOS リポジトリの例です。
# /etc/yum.repos.d/almalinux.repo(root ユーザー)
[baseos]
name=AlmaLinux 9 BaseOS
baseurl=https://repo.almalinux.org/almalinux/9/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
gpgcheck=1
:パッケージ本体の署名検証repo_gpgcheck=1
:リポジトリメタデータの署名検証
💡ポイント:repo_gpgcheck
を併用すると、メタデータ段階から改ざんを防止でき、より堅牢になります。 (AlmaLinux Wiki)
5.5.4 手動による署名検証
DNF 実行時以外にも、個別 RPM ファイルの署名を手動で検証できます。
# 一般ユーザーまたは root で実行
rpm --checksig mypackage.rpm
出力例:
mypackage.rpm: rsa sha256 (md5) pgp md5 OK
“OK” が表示されれば整合性確認済みです。
署名がない、またはキー未インポート時は “NOT OK” と表示されるため、導入前に必ずチェックしましょう。 (The world’s open source leader)
5.5.5 GPG キーのローテーションと保管指針
公式パッケージ署名キーは定期的にローテーションされる場合があります。キー管理にあたっては以下を遵守してください(AlmaLinux 開発ガイドラインより)。 (AlmaLinux Wiki)
- キーファイルはオフライン環境で作成・保管し、必要最小限のシステムにのみ配布
- 鍵のバックアップは暗号化した USB ドライブやセーフティボックスに保管
- ローテーションされた新キーはリリースノートや公式 Wiki で告知されるため、定期的に確認
💡ポイント: キーの有効期限切れやローテーションを見落とすと、アップデート時に署名検証エラーで大規模障害につながる恐れがあります。
5.6 ローカルリポジトリとオフライン環境
AlmaLinux9 をネットワーク制限下や一貫した環境構築で活用するには、ローカルリポジトリおよび ISO を用いたオフラインメディアの整備が不可欠です。本節では「何を」「なぜ」「どうやって」の流れで詳しく解説します。
5.6.1 ローカルリポジトリ構築の目的とメリット
- パッケージ一貫性の担保
- 同一の RPM をすべてのサーバーで利用でき、バージョン差異によるトラブルを防止
- ネットワーク負荷の軽減
- 社内ミラーリングで外部ダウンロードを削減し、帯域を有効活用
- 高速なインストール/アップデート
- ローカルLAN内なので、リポジトリ応答が速く運用効率が向上
💡ポイント: 大規模環境では NFS や HTTP キャッシュを併用すると、さらにスループット改善が期待できます。
5.6.2 createrepo を使ったローカルリポジトリの作成
5.6.2.1 必要パッケージのインストール
# rootユーザーで実行
# createrepo パッケージを導入します。RPM のメタデータ生成機能を提供。
sudo dnf install createrepo
5.6.2.2 メタデータ生成
# rootユーザーで実行
# /opt/localrepo 配下の RPM を走査し、repodata を生成します。
createrepo /opt/localrepo
- 実行結果:
/opt/localrepo/repodata/
に XML と SQLite 形式のメタデータが作成されます。
5.6.2.3 リポジトリ定義ファイルの作成
/etc/yum.repos.d/local.repo
を以下のように設定します。
# /etc/yum.repos.d/local.repo (rootユーザー)
[localrepo]
name=AlmaLinux9 Local Repository
baseurl=file:///opt/localrepo
enabled=1
gpgcheck=0
baseurl
にローカルパスを指定gpgcheck=0
はオフライン環境で署名確認を行わない設定(必要に応じて署名キーを事前インポートしてください)
5.6.2.4 動作確認
# rootユーザーで実行
# localrepo が利用可能か確認
sudo dnf repolist all
sudo dnf --disablerepo="*" --enablerepo="localrepo" list available
- 出力結果にリポジトリ名と RPM 一覧が表示されれば成功です。
5.6.3 ISO を利用したオフラインインストールメディア
5.6.3.1 ISO の取得と配置
公式サイトから最新版の DVD ISO(例:AlmaLinux-9.5-x86_64-dvd.iso
)をダウンロードし、サーバーの適当なディレクトリに置きます。
5.6.3.2 ISO のマウント
# rootユーザーで実行
# ループバックでマウントし、BaseOS と AppStream を参照可能にします。
sudo mount -o loop /path/to/AlmaLinux-9.5-x86_64-dvd.iso /mnt
/mnt/BaseOS/
と/mnt/AppStream/
以下にそれぞれ repodata が存在します。
5.6.3.3 リポジトリ定義
/etc/yum.repos.d/dvd.repo
を作成し、以下を記述します。
# /etc/yum.repos.d/dvd.repo (rootユーザー)
[DVD-BaseOS]
name=AlmaLinux9 DVD BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
[DVD-AppStream]
name=AlmaLinux9 DVD AppStream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
5.6.3.4 fstab への自動マウント設定
起動時に自動マウントするには、/etc/fstab
に以下行を追加します。
/path/to/AlmaLinux-9.5-x86_64-dvd.iso /mnt iso9660 loop,ro 0 0
ro
オプションで読み取り専用マウントを強制し、誤操作による変更リスクを回避します。
5.6.3.5 テストと運用
# rootユーザーで実行
# DVD リポジトリのみを有効にしてパッケージ一覧取得
sudo dnf --disablerepo="*" --enablerepo="DVD-BaseOS","DVD-AppStream" list available
- ネットワーク不要で標準パッケージをインストールできます。
5.6.4 セキュリティ設定と運用時のポイント
- GPG キーの事前インポート
- ネットワーク切断前にリポジトリの公開キーを取得し、
rpm --import
で登録
- ネットワーク切断前にリポジトリの公開キーを取得し、
- SELinux ラベルの保持
- ファイルベースのローカルリポジトリでは SELinux コンテキストが自動付与されない場合があります。
sudo restorecon -R /opt/localrepo
- CVE パッチ適用運用
- オフライン環境では定期的に ISO を更新するか、社内ミラーを同期して最新のセキュリティパッチを取り込む運用が必要です。
💡ポイント: ミラーリングには rsync
や reposync
コマンドを利用すると、差分だけの転送で効率的に同期できます。
5.7 自動アップデートと dnf-automatic
AlmaLinux9 環境において、継続的かつ計画的にセキュリティパッチを適用し、脆弱性への対応を自動化するためには dnf-automatic
の導入が有効です。本節では、導入から運用、通知設定、トラブルシューティングまでを「何を」「なぜ」「どうやって」の流れで詳しく解説します。
5.7.1 dnf-automatic の概要
- dnf-automatic:DNF を自動化向けにラップしたコマンドラインツールで、
systemd timer
やcron
と組み合わせて定期的に更新処理を実行できます (Red Hat Documentation)。 - 主な機能:
- パッケージメタデータの同期
- 更新パッケージのダウンロード(任意)
- 更新の自動適用(任意)
- 処理結果の通知(email/stdio/motd)
💡ポイント: 運用ポリシーに合わせて「ダウンロードのみ」「適用まで自動」「セキュリティ更新のみ」など細かく制御できます。
5.7.2 導入と基本設定
1. パッケージのインストール
- 実行ユーザー:root
- 結果:
dnf-automatic
コマンドが利用可能になります。
sudo dnf install dnf-automatic
2. 設定ファイルの編集
- ファイル:
/etc/dnf/automatic.conf
- 主なセクション:
[commands]
# セキュリティ更新のみ自動適用
upgrade_type = security
# 起動後のランダム待機時間(秒)
random_sleep = 600
[emitters]
# 通知手段: email / stdio / motd
emit_via = email
[email]
email_from = root@yourdomain.com
email_to = admin@yourdomain.com
smtp_server = localhost
upgrade_type
:default
(全更新)/security
(セキュリティ更新のみ)を選択random_sleep
:同時実行のサーバー群による過負荷を防ぐため、起動後に 0~指定秒のランダムスリープを挿入します (Reintech)。
5.7.3 systemd タイマーによるスケジューリング
1. タイマーの有効化
- 実行ユーザー:root
- 結果:システム起動時に自動的にタイマーが開始されます。
sudo systemctl enable --now dnf-automatic.timer
2. デフォルトスケジュール確認
systemctl list-timers --all | grep dnf-automatic.timer
- 通常は daily(1日1回)で実行されます。
3. スケジュールのカスタマイズ
タイマーのスケジュールを週次や分単位に変更する場合、ドロップインファイルを作成します。
sudo systemctl edit dnf-automatic.timer
編集画面に以下を追加し、保存します。
[Timer]
# 毎週月曜日の 03:30 に実行
OnCalendar=Mon *-*-* 03:30:00
# タイマーリセット後の最小間隔(例: 6時間)
OnUnitActiveSec=6h
# 変更適用
sudo systemctl daemon-reload
sudo systemctl restart dnf-automatic.timer
5.7.4 通知とログ管理
通知手段(Emitters)
- email:SMTP 経由で管理者へ結果を送信
- stdio:標準出力に結果を表示(cron ログなどで確認)
- motd:ログイン時のメッセージに結果を表示
ログ確認
# 実行状況とエラーを確認
journalctl -u dnf-automatic.service
- ログを定期的に監視し、失敗時には即時対応できる体制を整えましょう。
5.7.5 運用上のポイント
- セキュリティ設定との親和性
- SELinux が “Enforcing” のままでも自動更新後のコンテキストは自動維持されます。
- ネットワーク切断時の挙動
- ネットワーク不通の場合、メタデータ取得に失敗するため、失敗ログが残ります。
- テスト環境での検証
- 本番適用前にステージング環境で設定と通知フローを必ず検証してください。
- メール通知の信頼性
smtp_server
を内部メールリレーに設定し、ファイアウォール(firewalld)で SMTP ポートを許可しましょう。
💡ポイント: 自動更新は便利ですが、設定ミスやネットワーク障害時の通知漏れを防ぐため、監視ツール(Zabbix/Prometheus 等)と連携させる運用を推奨します。
5.7.6 トラブルシューティング
問題 | 対処方法 |
---|---|
タイマーが動作しない | sudo systemctl status dnf-automatic.timer を確認し、エラー内容に応じて設定ファイルを修正 |
メール通知が届かない | /etc/dnf/automatic.conf の SMTP 設定を確認し、sudo telnet localhost 25 などで接続チェック |
過去の実行履歴を参照したい | sudo journalctl -u dnf-automatic.service --since "7 days ago" などで期間指定してログを取得 |
特定パッケージだけ自動更新したい | exclude= および include= を /etc/dnf/automatic.conf の [commands] セクションで設定 |
複数サーバーの一斉更新によるミラー負荷が高い | random_sleep を適切に延長し、OnUnitActiveSec で起動間隔を調整 |
5.8 学習のまとめ
本章で解説してきた AlmaLinux9 のパッケージ管理と運用自動化の主要ポイントを、以下の観点で振り返り、実践に活かすための要点を整理します。
5.8.1 DNFパッケージマネージャーの総括
AlmaLinux9 標準のパッケージ管理ツールである dnf は、高速な依存関係解決とプラグイン拡張を特徴とします。
- 役割・用途
- RPM パッケージのインストール・更新・削除を一元管理
yum
コマンドとの互換性維持で既存スクリプトをそのまま利用可能
- 主な操作コマンド
操作 | コマンド |
---|---|
インストール | sudo dnf install <パッケージ> |
更新 | sudo dnf update |
削除 | sudo dnf remove <パッケージ> |
情報取得 | sudo dnf info <パッケージ> |
キャッシュ更新 | sudo dnf makecache |
クリーンアップ | sudo dnf clean all |
不要依存削除 | sudo dnf autoremove |
💡ポイント: 定期的にキャッシュを掃除し、ディスク容量の無駄を防ぎましょう。
5.8.2 リポジトリ管理の総括
リポジトリの適切な設定は、AlmaLinux9 環境の安定性とセキュリティ設定(SELinux 連携、GPG署名検証)に直結します。
- 公式リポジトリ
- BaseOS / AppStream / extras の3種類を用途に応じて切り替え
- 追加リポジトリ
- EPEL や High Availability、Plus、CRB などを
dnf config-manager
で有効化
- EPEL や High Availability、Plus、CRB などを
- カスタムリポジトリ
baseurl
とgpgkey
を.repo
ファイルに定義し、社内ミラーやオフライン用リポジトリを構築
💡ポイント: gpgcheck=1
と repo_gpgcheck=1
の併用で、リポジトリメタデータからパッケージ本体まで改ざん防止を徹底できます。
5.8.3 モジュールストリームの総括
AppStream の Module Streams 機能は、同一ソフトウェアの複数バージョンを共存・切り替え可能にし、開発・運用の柔軟性を高めます。
- 活用シーン
- PHP7.4 → PHP8.2 の切り替え、Node.js のバージョン管理など
- 基本操作
sudo dnf module list
で利用可能ストリーム確認sudo dnf module enable <モジュール>:<ストリーム>
で有効化sudo dnf module install <モジュール>:<ストリーム>/<プロファイル>
で導入- 切り替え前に
sudo dnf module reset <モジュール>
を実行
💡ポイント: プロファイル指定(例:default
/devel
)で用途別に最適化されたパッケージ群を一括導入できます。
5.8.4 パッケージ署名と GPGキー管理の総括
パッケージ整合性の担保は、システムの信頼性を維持する基盤です。
- GPGキーの取得・インポート
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
- 署名検証設定
- グローバル:
/etc/dnf/dnf.conf
にgpgcheck=1
- リポジトリ単位:
.repo
内にgpgcheck=1
/repo_gpgcheck=1
/gpgkey=
を設定
- グローバル:
- 手動検証
rpm --checksig mypackage.rpm
で個別パッケージを事前チェック
💡ポイント: 本番環境では必ず gpgcheck=1
を維持し、鍵のローテーション情報を公式サイトで定期確認してください。
5.8.5 ローカルリポジトリとオフライン環境の総括
ネットワーク制限下や一貫した環境構築に欠かせません。
- ローカルリポジトリ
sudo dnf install createrepo
createrepo /opt/localrepo
/etc/yum.repos.d/local.repo
を作成
- ISOメディア利用
- DVD ISO を
/mnt
にマウント /etc/yum.repos.d/dvd.repo
を定義/etc/fstab
に自動マウント設定
- DVD ISO を
💡ポイント: オフライン環境でも GPGキーを事前にインポートし、restorecon -R
で SELinux コンテキストを再適用しましょう。
5.8.6 自動アップデートと dnf-automatic の総括
継続的なセキュリティパッチ適用は運用の必須項目です。
- 導入手順
sudo dnf install dnf-automatic
/etc/dnf/automatic.conf
を編集(upgrade_type=security
等)sudo systemctl enable --now dnf-automatic.timer
- 運用ポイント
random_sleep
で実行のばらつきを付与emit_via
で通知方法(email/motd/stdio)を選択journalctl -u dnf-automatic.service
でログ監視
💡ポイント: 自動更新は利便性が高い反面、設定ミスや通知漏れリスクもあります。監視ツールと連携して異常を即時検知できる体制を整えましょう。
5.9 さらなる学習リソース
本節では、AlmaLinux9 のパッケージ管理やセキュリティ運用をさらに深く学習するための公式・コミュニティリソースをまとめます。各リソースの「何を」「なぜ」「どうやって」を明確にし、効率的な学習をサポートします。
5.9.1 AlmaLinux公式ドキュメント集
- AlmaLinux Wiki(公式ドキュメント)
- AlmaLinux9 全般の導入手順、設定ガイド、トラブルシュートをカバー
- コミュニティ運営かつ公式メンテナンスされており、最新情報が反映されやすい
- 以下のセクションから目的に応じて参照
- インストール後ガイド(After-Installation Guide) (AlmaLinux Wiki)
- セキュリティガイド(Security Guides) (AlmaLinux Wiki)
- AlmaLinux OS Foundation – About
- プロジェクト概要やガバナンス情報を把握することで、長期的なサポート体制を理解できます (AlmaLinux Wiki)
💡ポイント: 公式Wikiは常に最新版をチェックし、リリースノートやErrataも併せて参照しましょう。
5.9.2 DNFパッケージ管理リソース
- Using the DNF software package manager (Fedora Quick Docs)
- 基本原理からオプションまで網羅的に解説 (Fedora Documentation)
- DNF Package Manager Quick Reference (Fedora Quick Docs)
- 主要コマンド一覧をコンパクトにまとめたリファレンス (Fedora Documentation)
- DNF in System Administrators Guide (Fedora Docs)
- 実運用での細かなチューニング例や設定ファイル解説を含む詳細章 (Fedora Documentation)
5.9.3 SELinux関連ドキュメント
- Using SELinux (RHEL 9 Product Documentation)
- ポリシー設定、コンテキスト管理、トラブルシューティング手順を包括的に解説 (Red Hat Documentation)
- Red Hat Enterprise Linux 9 Using SELinux (PDF)
- オフラインでも活用できる詳細マニュアル。ポリシーモジュールのエクスポート/インポート手順などを収録 (Red Hat Documentation)
5.9.4 自動アップデート/dnf-automatic
- Automatic Updates (Fedora Quick Docs)
dnf-automatic
の全機能概要と設定パラメータ解説 (Fedora Documentation)
- Securing the system by keeping it up-to-date (Fedora Quick Docs)
- 自動更新運用時のベストプラクティスやメール通知設定を詳述 (Fedora Documentation)
5.9.5 Module Streams/AppStream
- Application Streams in RHEL 9 (Red Hat Product Documentation)
- モジュールストリームの設計思想や互換性レベルを解説 (Red Hat Documentation)
- Module streams overview (RHEL 9 Managing Software with the DNF Tool)
- モジュール依存関係や自動連鎖有効化の動作詳細を記載 (Red Hat Documentation)
5.9.6 EPEL/サードパーティリポジトリ
- Extra Repositories (AlmaLinux Wiki)
- EPEL や High Availability、Plus、CRB 等の追加リポジトリ設定例 (AlmaLinux Wiki)
- Extra Packages for Enterprise Linux (EPEL) (Fedora Documentation)
- EPEL プロジェクトの概要とパッケージ品質保証ポリシーを解説 (Fedora Documentation)
- Installing and Using the EPEL Repository on AlmaLinux 9 (Reintech Blog)
- 実践的な手順とトラブルシュートを日本語で解説 (Reintech)
5.9.7 コミュニティとサポートチャネル
- AlmaLinux Howtos (AlmaLinux Wiki)
- インストール、認証、ネットワーク、仮想化などカテゴリ別 How-to 集 (AlmaLinux Wiki)
- AlmaLinux GitHub
- ソースコード、Issue、Discussions を通じて開発コミュニティに参加可能 (GitHub)
💡ポイント: 疑問点はまず公式ドキュメントで解決し、足りない場合は GitHub Discussions や Stack Overflow で質問する流れを確立すると効率的です。