AlmaLinux 9 のサーバーを運用するうえで、パッケージ管理は日常的に行う作業のひとつです。ソフトウェアのインストール、セキュリティパッチの適用、不要パッケージの削除など、dnf コマンドを使いこなせるかどうかで運用の正確さと速度が変わります。本記事では、dnf の基本操作からリポジトリ管理、AppStream モジュール、セキュリティアップデート、バージョンロック、閉域網(オフライン)対応、自動アップデート、RPM 直接操作、dnf.conf の実務設定まで、企業のサーバー運用チームが必要とする操作を実行例つきでまとめています。
dnf 操作早見表
| やりたいこと | コマンド |
|---|---|
| パッケージ検索 | dnf search <keyword> |
| パッケージ情報確認 | dnf info <package> |
| インストール済み一覧 | dnf list –installed |
| 更新確認のみ | dnf check-update |
| パッケージインストール | dnf install <package> |
| パッケージ削除 | dnf remove <package> |
| 全パッケージ更新 | dnf update |
| セキュリティ更新のみ | dnf update –security |
| ファイルからパッケージ逆引き | dnf provides <filepath> |
| リポジトリ一覧 | dnf repolist |
| モジュール一覧 | dnf module list |
| 操作履歴 | dnf history |
| バージョンロック | dnf versionlock add <package> |
| キャッシュ削除 | dnf clean all |
| ローカル RPM インストール | dnf localinstall <file.rpm> |
| グループインストール | dnf group install <group> |
前提条件
| 項目 | 値 |
|---|---|
| OS | AlmaLinux 9.6(Sage Margay) |
| dnf バージョン | 4.14.0 |
| RPM バージョン | 4.16.1.3 |
| インストールタイプ | 最小限のインストール(Minimal Install) |
| 実行ユーザー | 一般ユーザー(sudo 権限あり) |
| プロンプト表記 | # = root 権限、$ = 一般ユーザー |
1. yum と dnf の関係
AlmaLinux 9 では、yum コマンドは dnf へのシンボリックリンクになっています。既存の手順書やスクリプトで yum install と書かれていても、内部では dnf が実行されるため、そのまま動作します。
実行コマンド:
$ ls -la /usr/bin/yum
実行結果:
lrwxrwxrwx. 1 root root 5 3月 12 2025 /usr/bin/yum -> dnf-3
/usr/bin/yum は dnf-3 を指しています。新しい手順書を作成する際は dnf で統一してください。yum 記法が残っていても動作上の問題はありませんが、チーム内で表記を揃えることで混乱を防げます。
実行コマンド:
$ dnf --version
実行結果:
4.14.0
インストール済み: dnf-0:4.14.0-25.el9.alma.1.noarch
実行コマンド:
$ rpm --version
実行結果:
RPM バージョン 4.16.1.3
2. dnf の基本操作
dnf でもっとも使う頻度が高い操作を順に紹介します。パッケージの検索、情報確認、インストール、更新、削除が基本の流れです。
パッケージ検索(dnf search)
パッケージ名や概要に含まれるキーワードで検索します。インストールしたいソフトウェアの正式なパッケージ名が分からないときに使います。
実行コマンド:
# dnf search httpd
実行結果:
============================= 名前 完全一致: httpd =============================
httpd.x86_64 : Apache HTTP Server
=========================== 名前 & 概要 一致: httpd ============================
httpd-core.x86_64 : httpd minimal core
httpd-devel.x86_64 : Development interfaces for the Apache HTTP Server
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
「名前 完全一致」と「名前 & 概要 一致」の 2 つのセクションに分かれて表示されます。目的のパッケージが見つかったら、次の dnf info で詳細を確認します。
パッケージ情報の確認(dnf info)
パッケージのバージョン、サイズ、提供元リポジトリなどの詳細情報を確認します。インストール前にバージョンを確認する習慣をつけてください。
実行コマンド:
# dnf info vim-enhanced
実行結果:
インストール済みパッケージ
名前 : vim-enhanced
エポック : 2
バージョン : 8.2.2637
リリース : 23.el9_7
Arch : x86_64
サイズ : 3.8 M
ソース : vim-8.2.2637-23.el9_7.src.rpm
リポジトリー : @System
repo から : appstream
概要 : A version of the VIM editor which includes recent enhancements
リポジトリー : @System はインストール済みであることを意味します。repo から : appstream は、appstream リポジトリから取得されたパッケージであることを示しています。
パッケージ一覧の確認(dnf list)
dnf list にオプションを付けることで、インストール済み・利用可能・更新可能なパッケージを絞り込んで表示できます。
実行コマンド(インストール済みパッケージの確認):
# dnf list --installed | head -10
実行コマンド(更新可能なパッケージの確認):
# dnf list --updates
実行コマンド(リポジトリで利用可能な全パッケージの確認):
# dnf list --available | head -20
ファイルからパッケージを逆引き(dnf provides)
「このコマンドはどのパッケージに含まれているのか」を調べるときに使います。サーバーに dig コマンドがなく、どのパッケージをインストールすればよいか分からない場面で役立ちます。
実行コマンド:
# dnf provides /usr/bin/dig
実行結果:
bind-utils-32:9.16.23-34.el9_7.1.x86_64 : Utilities for querying DNS name servers
Repo : @System
一致:
ファイル名 : /usr/bin/dig
dig コマンドは bind-utils パッケージに含まれていることが分かります。
パッケージのインストール・削除・再インストール
実行コマンド(インストール):
# dnf install -y httpd
-y オプションは確認プロンプトに自動で「はい」と応答します。スクリプトでの利用に向いていますが、手動作業では -y を付けずに依存パッケージを確認してからインストールすることを推奨します。
実行コマンド(削除):
# dnf remove httpd
dnf remove は依存パッケージも削除する
dnf remove は、指定したパッケージに依存している他のパッケージも同時に削除します。削除対象の一覧を必ず確認してから y を入力してください。本番環境で意図しないパッケージが削除されると、稼働中のサービスが停止する可能性があります。
実行コマンド(再インストール。設定ファイルの破損やパッケージ構成ファイルの復旧に使う):
# dnf reinstall vim-enhanced
パッケージの更新
実行コマンド(全パッケージ更新):
# dnf update
実行コマンド(特定パッケージのみ更新):
# dnf update curl
実行コマンド(更新確認のみ。実際には更新しない):
# dnf check-update
dnf check-update は更新可能なパッケージの一覧を表示するだけで、実際の更新は行いません。定期メンテナンス前の事前確認に使います。戻り値が 0 なら更新なし、100 なら更新ありです。シェルスクリプトで戻り値を判定に使う場合は、この仕様を把握しておいてください。
ダウングレード
更新後にアプリケーションの動作に問題が発生した場合、パッケージを以前のバージョンに戻します。
実行コマンド:
# dnf downgrade curl
リポジトリに旧バージョンが残っていない場合はダウングレードできません。重要なパッケージは更新前に dnf history のトランザクション ID を控えておき、dnf history undo でも戻せるようにしておきます。
孤立パッケージの削除(dnf autoremove)
他のパッケージの依存関係でインストールされたが、依存元が削除されて不要になったパッケージを一括削除します。ディスク容量の節約と管理対象パッケージの削減が目的です。
実行コマンド:
# dnf autoremove
autoremove は削除対象を必ず確認する
dnf autoremove が「不要」と判断したパッケージの中に、手動で依存関係を利用しているものが含まれる場合があります。削除一覧を確認してから実行してください。重要なパッケージは dnf mark install <package> でユーザーインストールとしてマークしておくと、autoremove の対象外になります。
dry-run でインストール内容を事前確認する
本番環境でパッケージをインストールする前に、何がインストールされるかを確認したい場合に使います。
実行コマンド:
# dnf install --assumeno httpd
--assumeno オプションは、すべての確認プロンプトに「いいえ」と応答するため、依存パッケージの一覧を確認したうえで実際のインストールは行いません。本番環境への変更作業前に、影響範囲を把握する手段として使ってください。
3. リポジトリ管理
dnf がパッケージを取得する先がリポジトリです。どのリポジトリが有効になっているかを把握し、必要に応じて追加・無効化を行います。
有効なリポジトリの確認
実行コマンド:
# dnf repolist
実行結果:
repo id repo の名前
appstream AlmaLinux 9 - AppStream
baseos AlmaLinux 9 - BaseOS
extras AlmaLinux 9 - Extras
AlmaLinux 9 の初期状態では、baseos(OS の基盤パッケージ)、appstream(アプリケーション層のパッケージ)、extras(追加ツール)の 3 つが有効です。
無効なリポジトリを含む全一覧
実行コマンド:
# dnf repolist --all
実行結果(主要部分):
repo id repo の名前 状態
appstream AlmaLinux 9 - AppStream 有効化
baseos AlmaLinux 9 - BaseOS 有効化
crb AlmaLinux 9 - CRB 無効化
extras AlmaLinux 9 - Extras 有効化
crb(CodeReady Builder の略。RHEL では CodeReady Linux Builder に相当)は、開発用のヘッダやライブラリを含むリポジトリで、初期状態では無効です。EPEL リポジトリの一部パッケージが crb に依存するため、EPEL を使う場合は有効化が必要です。
.repo ファイルの構造
リポジトリの設定は /etc/yum.repos.d/ ディレクトリ内の .repo ファイルで管理されています。
実行コマンド:
$ ls /etc/yum.repos.d/
実行結果:
almalinux-appstream.repo
almalinux-baseos.repo
almalinux-crb.repo
almalinux-extras.repo
almalinux-highavailability.repo
almalinux-nfv.repo
almalinux-plus.repo
almalinux-resilientstorage.repo
almalinux-rt.repo
almalinux-sap.repo
almalinux-saphana.repo
baseos リポジトリの設定ファイルの中身は以下の通りです。
実行コマンド:
$ cat /etc/yum.repos.d/almalinux-baseos.repo
実行結果([baseos] セクション):
[baseos]
name=AlmaLinux $releasever - BaseOS
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
# baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
metadata_expire=86400
enabled_metadata=1
主要なパラメータの意味は以下の通りです。
- mirrorlist:ミラーサーバーの一覧を取得する URL。dnf は自動的に最寄りのミラーを選択する
- baseurl:特定のサーバーを直接指定する場合に使う。社内ミラーに切り替える際はこちらを使用する
- enabled=1:このリポジトリが有効であることを示す(0 で無効)
- gpgcheck=1:パッケージの GPG 署名を検証する。セキュリティのため必ず 1 のままにする
- gpgkey:GPG 検証に使う公開鍵のパス
- metadata_expire=86400:メタデータのキャッシュ有効期限(秒)。86400 秒 = 24 時間
リポジトリの有効化・無効化
実行コマンド(CRB リポジトリの有効化):
# dnf config-manager --set-enabled crb
切り戻し方法(CRB リポジトリの無効化):
# dnf config-manager --set-disabled crb
外部リポジトリの追加
実行コマンド:
# dnf config-manager --add-repo https://example.corp/repos/custom.repo
指定した URL の .repo ファイルが /etc/yum.repos.d/ にダウンロードされます。切り戻す場合は、追加された .repo ファイルを削除してから dnf clean all を実行します。
EPEL リポジトリの追加
EPEL(Extra Packages for Enterprise Linux)は、Fedora プロジェクトが提供する RHEL 系ディストリビューション向けの追加パッケージリポジトリです。AlmaLinux の標準リポジトリに含まれていないツール(htop、jq など)が必要な場合に利用します。
実行コマンド:
# dnf install -y epel-release
EPEL の一部パッケージは CRB リポジトリのパッケージに依存しているため、CRB も有効化します。
実行コマンド:
# dnf config-manager --set-enabled crb
EPEL の利用は現場のポリシーを確認する
企業の運用環境では、セキュリティポリシーや変更管理の方針として EPEL を含む外部リポジトリの利用を禁止している現場があります。EPEL を追加する前に、チームのリポジトリ管理ポリシーを確認してください。切り戻す場合は dnf remove epel-release で EPEL を削除し、dnf config-manager --set-disabled crb で CRB を無効化します。
4. AppStream モジュール管理
AppStream は、同じパッケージの複数バージョン(ストリーム)を提供する仕組みです。たとえば PHP を 8.1、8.2、8.3 のいずれかから選択してインストールできます。RHEL 8 では多数のモジュールが存在しましたが、RHEL 9 / AlmaLinux 9 ではモジュール数が大幅に減少し、主要なミドルウェアに限定されています。
利用可能なモジュール一覧
実行コマンド:
# dnf module list
実行結果(主要部分):
AlmaLinux 9 - AppStream
Name Stream Profiles Summary
mariadb 10.11 client, galera, server [d] MariaDB Module
nginx 1.22 common [d] nginx webserver
nginx 1.24 common [d] nginx webserver
nginx 1.26 common [d] nginx webserver
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common [d], development, minimal, s2i Javascript runtime
php 8.1 common [d], devel, minimal PHP scripting language
php 8.2 common [d], devel, minimal PHP scripting language
php 8.3 common [d], devel, minimal PHP scripting language
postgresql 15 client, server [d] PostgreSQL server and client module
postgresql 16 client, server [d] PostgreSQL server and client module
[d] はデフォルトのプロファイルを示します。Stream 列がバージョンに相当し、用途に応じて選択します。
モジュールの有効化とインストール
PHP 8.2 のストリームを有効化してインストールする例です。
実行コマンド(ストリームの有効化):
# dnf module enable php:8.2
実行コマンド(モジュールのインストール):
# dnf module install php:8.2
dnf module install は、enable と install を同時に実行します。個別にストリームを有効化してから通常の dnf install php を行うこともできます。
モジュールのリセットと無効化
ストリームを変更する場合は、先にリセットしてから新しいストリームを有効化します。
実行コマンド(リセット。有効化状態を解除する):
# dnf module reset php
実行コマンド(無効化。モジュールからのインストールを禁止する):
# dnf module disable php
reset は有効化状態を初期状態に戻すだけで、インストール済みのパッケージは削除しません。ストリームを 8.2 から 8.3 に変更する場合は、dnf module reset php → dnf module enable php:8.3 → dnf update の順で実行します。
RHEL 9 でモジュール数が減少した理由
RHEL 8 では多くのパッケージがモジュールとして提供されていましたが、RHEL 9 / AlmaLinux 9 では管理の複雑さを軽減するため、モジュールは主要なミドルウェア(PHP、nginx、Node.js、MariaDB、PostgreSQL など)に限定されました。モジュール化されていないパッケージは通常の dnf install でインストールします。
5. セキュリティアップデート
企業のサーバー運用では、「全パッケージを一括更新する」ことが許されない場面が多くあります。セキュリティパッチのみを選択的に適用する方法を把握しておく必要があります。
セキュリティ更新の確認
実行コマンド:
# dnf check-update --security
セキュリティに関連する更新のみを一覧表示します。
セキュリティ更新のみ適用
実行コマンド:
# dnf update --security
セキュリティ関連のアドバイザリが発行されているパッケージのみを更新します。機能追加やバグ修正のみの更新は対象外です。
アドバイザリ情報の確認
実行コマンド(セキュリティアドバイザリの一覧):
# dnf updateinfo list
実行コマンド(セキュリティアドバイザリのみ表示):
# dnf updateinfo list --security
実行結果(先頭部分):
ALSA-2025:23343 中レベル/セキュリティ binutils-2.35.2-67.el9_7.1.x86_64
ALSA-2026:1350 中レベル/セキュリティ curl-7.76.1-35.el9_7.3.x86_64
ALSA-2025:22175 重要/セキュリティ expat-2.5.0-5.el9_7.1.x86_64
ALSA-2025:8655 中レベル/セキュリティ glibc-2.34-168.el9_6.19.x86_64
各行は「アドバイザリ ID」「重要度/種別」「対象パッケージ」の形式で表示されます。ALSA は AlmaLinux Security Advisory の略です。
重要度でフィルタする
実行コマンド(Critical のみ表示):
# dnf updateinfo list --sec-severity=Critical
重要度は Critical、Important、Moderate、Low の 4 段階です。緊急度の高いパッチから優先的に適用する運用に使います。セキュリティパッチの運用方針やカーネルパラメータの設定についてはセキュリティ強化編も参照してください。
特定のアドバイザリだけを適用する
実行コマンド:
# dnf update --advisory=ALSA-2025:22175
アドバイザリ ID を指定して、そのパッチだけを適用します。変更管理で「この CVE に対応するパッチのみ適用する」と指定された場合に使います。
実行コマンド(アドバイザリの詳細を確認する):
# dnf updateinfo info ALSA-2025:22175
アドバイザリの詳細(影響を受ける CVE 番号、パッケージバージョン、修正内容の概要)を確認できます。パッチ適用前に影響範囲を把握するために使ってください。
6. パッケージのバージョンロック
特定のパッケージを現在のバージョンに固定し、dnf update による意図しないバージョンアップを防止します。カーネルやミドルウェアのバージョンを固定して運用する場面で使います。
versionlock プラグインのインストール
実行コマンド:
# dnf install -y python3-dnf-plugin-versionlock
バージョンロックの追加
実行コマンド:
# dnf versionlock add kernel
現在インストールされているカーネルのバージョンがロックされ、dnf update を実行してもカーネルは更新対象から除外されます。
ロック一覧の確認
実行コマンド:
# dnf versionlock list
ロックされているパッケージの一覧が表示されます。ロック設定は /etc/dnf/plugins/versionlock.list ファイルに保存されています。
バージョンロックの解除
実行コマンド(特定パッケージのロック解除):
# dnf versionlock delete kernel
実行コマンド(全ロックの解除):
# dnf versionlock clear
バージョンロックとセキュリティパッチの関係
バージョンロックを設定すると、そのパッケージのセキュリティパッチも適用されなくなります。ロック対象のパッケージに脆弱性が報告された場合は、一時的にロックを解除してパッチを適用し、再度ロックする運用が必要です。ロック対象のパッケージは定期的にセキュリティアドバイザリを確認してください。
7. 操作履歴とロールバック(dnf history)
dnf はパッケージ操作の履歴をトランザクション単位で記録しています。問題が発生したときに「いつ何をインストール・更新したか」を追跡し、操作を取り消すことができます。
操作履歴の確認
実行コマンド:
# dnf history
実行結果:
ID | コマンドライン | 日時 | 動作 | 変更さ
-------------------------------------------------------------------------------
4 | install -y dnf-utils | 2026-03-24 16:24 | I, U | 3
3 | install -y vim bash-comp | 2026-03-24 16:17 | Install | 12
2 | install -y bind-utils | 2026-03-24 13:52 | I, U | 10 <
1 | | 2026-03-24 12:30 | Install | 392 >E
各行がひとつのトランザクションです。ID 列の数字がトランザクション ID で、undo や rollback の操作に使います。「動作」列の I はインストール、U はアップグレードを意味します。
トランザクションの詳細
実行コマンド:
# dnf history info 3
実行結果:
トランザクション ID : 3
開始時間 : 2026年03月24日 16時17分14秒
終了時間 : 2026年03月24日 16時17分20秒 (6 秒)
ユーザー : developer <developer>
終了コード : 成功
コマンドライン : install -y vim bash-completion tar wget rsync
変更されたパッケージ:
インストール gpm-libs-1.20.7-29.el9.x86_64 @appstream
インストール vim-common-2:8.2.2637-23.el9_7.x86_64 @appstream
インストール vim-enhanced-2:8.2.2637-23.el9_7.x86_64 @appstream
インストール wget-1.21.1-8.el9_4.x86_64 @appstream
インストール bash-completion-1:2.11-5.el9.noarch @baseos
インストール rsync-3.2.5-3.el9.x86_64 @baseos
インストール tar-2:1.34-9.el9_7.x86_64 @baseos
どのユーザーが、いつ、何をインストール・更新したかが詳細に記録されています。障害調査で「いつ何が変わったか」を追跡する際に使います。
操作の取り消し(undo)
特定のトランザクション 1 件だけを取り消します。
実行コマンド:
# dnf history undo 4
トランザクション ID 4 で行った操作(dnf-utils のインストール)だけを取り消します。ID 3 以前の操作には影響しません。
特定時点への巻き戻し(rollback)
指定したトランザクション ID の「直後の状態」まで巻き戻します。
実行コマンド:
# dnf history rollback 2
トランザクション ID 2 が完了した直後の状態まで巻き戻します。この場合、ID 3 と ID 4 の操作がすべて取り消されます。
undo と rollback の違い
undo は指定した 1 件のトランザクションだけを取り消します。rollback は指定した ID の時点まで、それ以降のすべてのトランザクションを巻き戻します。本番環境で rollback を使う場合は、巻き戻されるトランザクションの範囲を dnf history で事前に確認してください。
8. グループインストール
関連するパッケージをまとめて「グループ」として管理できます。開発ツール一式をまとめてインストールする場面で使います。
グループ一覧の確認
実行コマンド:
# dnf group list
実行結果(先頭部分):
利用可能な環境グループ:
サーバー (GUI 使用)
サーバー
ワークステーション
仮想化ホスト
インストール済みの環境グループ:
最小限のインストール
利用可能なグループ:
コンソールインターネットツール
コンテナー管理
開発ツール
ヘッドレス管理
「環境グループ」はインストール時に選択する大きなカテゴリ、「グループ」は個別のパッケージセットです。
グループの詳細確認
実行コマンド:
# dnf group info "Development Tools"
グループに含まれるパッケージが Mandatory(必須)、Default(既定)、Optional(任意)の 3 カテゴリで表示されます。dnf group install を実行すると、Mandatory と Default のパッケージがインストールされます。Optional は明示的に指定しない限りインストールされません。
グループのインストール
実行コマンド:
# dnf group install "Development Tools"
gcc、make、autoconf など、C/C++ のビルドに必要なツール一式がインストールされます。ソースからのビルドが必要なソフトウェアを扱う場合に使います。
グループ名は英語でも日本語でも指定できる
ロケールが日本語の環境では "開発ツール" でも "Development Tools" でもどちらでも指定できます。スクリプトで利用する場合は、ロケールに依存しない英語名を使うことを推奨します。
9. キャッシュ管理
dnf はリポジトリのメタデータやダウンロードしたパッケージをローカルにキャッシュしています。キャッシュが古くなると「パッケージが見つからない」などの問題が発生するため、キャッシュの管理方法を把握しておきます。
キャッシュの削除
実行コマンド(すべてのキャッシュを削除):
# dnf clean all
実行コマンド(メタデータのみ削除):
# dnf clean metadata
実行コマンド(ダウンロード済みパッケージのみ削除):
# dnf clean packages
キャッシュの再構築
実行コマンド:
# dnf makecache
実行結果:
AlmaLinux 9 - AppStream 14 MB/s | 18 MB 00:01
AlmaLinux 9 - BaseOS 15 MB/s | 19 MB 00:01
AlmaLinux 9 - Extras 29 kB/s | 21 kB 00:00
メタデータキャッシュを作成しました。
「パッケージが見つからない」と表示された場合の第一対処は dnf clean all && dnf makecache です。キャッシュの有効期限切れやリポジトリ側の更新が原因で、ローカルのメタデータと実際のリポジトリ内容がずれている場合に解消します。
10. オフライン・閉域網対応
インターネットに接続できない閉域網(エアギャップ環境)のサーバーでは、外部リポジトリからパッケージを直接取得できません。事前にパッケージをダウンロードして持ち込む方法を把握しておきます。
ローカル RPM ファイルのインストール
USB メモリやファイルサーバー経由で持ち込んだ RPM ファイルをインストールします。
実行コマンド:
# dnf localinstall /tmp/packages/example-1.0.0-1.el9.x86_64.rpm
dnf localinstall は dnf install のローカルファイル版で、依存関係の解決も行います。依存パッケージがリポジトリになく、ローカルにもない場合はエラーになります。
依存パッケージを含めたダウンロード
インターネットに接続できる別のサーバーで、対象パッケージとその依存パッケージをまとめてダウンロードします。
実行コマンド:
# dnf download --resolve --destdir /tmp/packages httpd
--resolve オプションで依存パッケージも含めてダウンロードし、--destdir で保存先ディレクトリを指定します。ダウンロードした RPM ファイル一式を閉域網のサーバーに持ち込み、dnf localinstall /tmp/packages/*.rpm でまとめてインストールします。
社内ミラーリポジトリへの切り替え
閉域網で複数台のサーバーを管理する場合は、社内にミラーリポジトリを構築し、各サーバーの .repo ファイルを書き換えます。
実行コマンド(baseos リポジトリを社内ミラーに切り替える例):
# vi /etc/yum.repos.d/almalinux-baseos.repo
変更内容:
[baseos]
name=AlmaLinux $releasever - BaseOS
baseurl=https://mirror.example.corp/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
mirrorlist 行を削除またはコメントアウトし、baseurl に社内ミラーの URL を指定します。切り戻す場合は元の mirrorlist 行のコメントを外し、baseurl 行を削除します。変更前に元のファイルを cp almalinux-baseos.repo almalinux-baseos.repo.bak でバックアップしておいてください。
ローカルリポジトリの作成(概要)
ダウンロードした RPM ファイル群からローカルリポジトリを作成する場合は createrepo コマンドを使います。
実行コマンド:
# dnf install -y createrepo
実行コマンド:
# createrepo /var/repo/local
/var/repo/local ディレクトリに RPM ファイルを配置した状態で createrepo を実行すると、リポジトリメタデータが生成されます。その後、.repo ファイルの baseurl に file:///var/repo/local を指定すれば、ローカルリポジトリとして利用できます。
11. 自動アップデート(dnf-automatic)
dnf-automatic は、パッケージの更新確認・ダウンロード・適用を自動で行う仕組みです。企業環境では、本番サーバーは通知のみ、検証サーバーは自動適用とする運用が一般的です。
dnf-automatic のインストール
実行コマンド:
# dnf install -y dnf-automatic
設定ファイルの編集
設定ファイルは /etc/dnf/automatic.conf です。主要なパラメータを以下に示します。
[commands]
upgrade_type = security
apply_updates = no
[emitters]
emit_via = email
[email]
email_from = root@example.corp
email_to = admin@example.corp
email_host = smtp.example.corp
主要パラメータの意味は以下の通りです。
- upgrade_type = security:セキュリティ更新のみを対象にする。
defaultにすると全更新が対象 - apply_updates = no:更新の通知のみ行い、自動適用しない。
yesにすると自動適用される - emit_via = email:通知方法。
email、stdio、motdから選択
タイマーの有効化
実行コマンド(通知のみ。本番サーバー向け):
# systemctl enable --now dnf-automatic-notifyonly.timer
実行コマンド(自動適用。検証サーバー向け):
# systemctl enable --now dnf-automatic-install.timer
切り戻し方法(タイマーの停止と無効化):
# systemctl disable --now dnf-automatic-notifyonly.timer
本番サーバーでの自動適用は非推奨
本番サーバーで apply_updates = yes に設定すると、意図しないタイミングでパッケージが更新され、サービスに影響を及ぼす可能性があります。本番サーバーでは通知のみに設定し、更新内容を確認したうえで手動で適用してください。
12. RPM 直接操作
rpm コマンドは、dnf の内部で使われている低レベルのパッケージ管理ツールです。パッケージ情報の問い合わせや、インストール済みファイルの確認に使います。パッケージのインストールには rpm ではなく dnf を使ってください(依存関係を自動解決するため)。
インストール済みパッケージの検索
実行コマンド(全パッケージ一覧):
$ rpm -qa | head -5
実行結果:
python3-dnf-plugin-versionlock-4.3.0-24.el9_7.noarch
yum-utils-4.3.0-24.el9_7.noarch
wget-1.21.1-8.el9_4.x86_64
vim-enhanced-8.2.2637-23.el9_7.x86_64
tar-1.34-9.el9_7.x86_64
実行コマンド(キーワードで絞り込み):
$ rpm -qa | grep vim
パッケージ情報の問い合わせ
実行コマンド(パッケージの詳細情報):
$ rpm -qi vim-enhanced
実行コマンド(ファイルからパッケージを逆引き):
$ rpm -qf /usr/bin/vim
実行結果:
vim-enhanced-8.2.2637-23.el9_7.x86_64
実行コマンド(パッケージに含まれるファイル一覧):
$ rpm -ql vim-enhanced | head -5
実行結果:
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
/usr/lib/.build-id
実行コマンド(パッケージの設定ファイル一覧):
$ rpm -qc vim-enhanced
パッケージの改変検証
インストール時の状態からファイルが変更されていないかを検証します。セキュリティ監査やファイル改ざんの検出に使います。
実行コマンド:
# rpm -V vim-enhanced
出力がなければ、パッケージのファイルは変更されていません。変更がある場合は、変更の種類(サイズ、パーミッション、MD5 チェックサムなど)を示す記号とファイルパスが表示されます。
rpm -ivh によるインストールは推奨しない
rpm -ivh はパッケージを直接インストールしますが、依存関係を自動解決しません。依存パッケージが不足しているとエラーになり、--nodeps で無視するとシステムが不安定になる可能性があります。ローカル RPM ファイルのインストールには dnf localinstall を使ってください。
13. dnf.conf の実務設定
dnf のグローバル設定は /etc/dnf/dnf.conf に記述されています。初期状態の内容と、実務で変更することが多いパラメータを確認します。
実行コマンド:
$ cat /etc/dnf/dnf.conf
実行結果:
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
主要パラメータの説明
- gpgcheck=1:パッケージの GPG 署名を検証する。セキュリティのため 1 から変更しない
- installonly_limit=3:kernel のような installonly パッケージの保持世代数。3 なら最新 3 世代のカーネルが保持される。起動できないカーネルに当たった場合に旧カーネルで起動するため、2 以下に減らさない
- clean_requirements_on_remove=True:パッケージ削除時に、依存関係でインストールされた不要パッケージも削除する
- best=True:依存関係の問題が発生した場合にエラーで停止する。False にすると古いバージョンにフォールバックする
- skip_if_unavailable=False:リポジトリに接続できない場合にエラーで停止する。True にするとそのリポジトリをスキップして続行する
実務で追加することが多い設定
特定パッケージの更新を除外する(exclude)
dnf update の対象からカーネルを除外する場合の設定です。バージョンロック(versionlock)と同様の効果がありますが、dnf.conf に直接記述する方法です。
exclude=kernel*
切り戻す場合は、この行を削除するか exclude=(空)に変更します。
RPM キャッシュを保持する(keepcache)
ダウンロードした RPM ファイルをキャッシュに残す設定です。閉域網環境で同じパッケージを別のサーバーにもインストールする場合に使います。
keepcache=1
キャッシュはディスク容量を消費するため、不要になったら dnf clean packages で削除します。切り戻す場合は keepcache=0 に変更します。
プロキシ設定
企業ネットワークでプロキシ経由のインターネット接続が必要な場合に設定します。詳細は初期設定編を参照してください。
proxy=http://proxy.example.corp:8080
14. トラブルシューティング
パッケージが見つかりません
パッケージ名が正しいのにインストールできない場合、キャッシュの期限切れが原因であることが多いです。
実行コマンド:
# dnf clean all && dnf makecache
キャッシュを削除して再構築した後、再度 dnf install を試みてください。EPEL など外部リポジトリのパッケージの場合は、そのリポジトリが有効になっているかを dnf repolist で確認します。
dnf update でタイムアウトする
プロキシ設定の不備が原因であることが多いです。以下の 2 箇所を確認してください。
実行コマンド(dnf.conf のプロキシ設定を確認):
$ grep proxy /etc/dnf/dnf.conf
実行コマンド(環境変数のプロキシ設定を確認):
$ echo $http_proxy $https_proxy
dnf.conf に proxy=http://proxy.example.corp:8080 が設定されていない場合は追記してください。環境変数で設定する場合は /etc/profile.d/proxy.sh に記述します。詳細は初期設定編を参照してください。
依存関係エラー
パッケージの依存関係が解決できずにインストールが失敗する場合があります。
実行コマンド(依存関係の事前確認):
# dnf repoquery --deplist httpd
依存するパッケージの一覧が表示されます。不足しているパッケージがどのリポジトリに含まれるかを確認し、そのリポジトリを有効化してください。
依存関係の問題を一時的にスキップしてインストールする場合は以下のオプションを使います。
実行コマンド:
# dnf install --skip-broken httpd
–skip-broken は根本解決ではない
--skip-broken は依存関係の問題があるパッケージをスキップするだけで、問題を解決するわけではありません。一時的な回避策として使い、根本原因(リポジトリの不足やバージョンの不整合)を解消してください。
GPG 鍵エラー
外部リポジトリを追加した際に GPG 鍵がインポートされていないとエラーになります。
実行コマンド:
# rpm --import https://example.corp/repos/RPM-GPG-KEY-example
GPG 鍵の URL はリポジトリの提供元が公開しているものを使います。信頼できない提供元の鍵をインポートしないでください。インポート済みの鍵は rpm -qa gpg-pubkey* で確認できます。
モジュールストリームの切替エラー
すでに有効化されているストリームがある状態で別のストリームを有効化しようとするとエラーになります。
実行コマンド(リセットしてから有効化する):
# dnf module reset php
# dnf module enable php:8.3
リセット後にインストール済みのパッケージを新しいストリームに合わせるため、dnf update も実行してください。
