本記事には広告(アフィリエイトリンク)が含まれます。

AlmaLinux 9 パッケージ管理 dnf リファレンス

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>

前提条件

項目
OSAlmaLinux 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/yumdnf-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 phpdnf module enable php:8.3dnf 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 localinstalldnf 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 ファイルの baseurlfile:///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:通知方法。emailstdiomotd から選択

タイマーの有効化

実行コマンド(通知のみ。本番サーバー向け):

# 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 も実行してください。

AlmaLinux 9 総合リファレンスガイド シリーズ一覧

  1. システム基本情報の確認
  2. 初期設定
  3. ネットワーク設定(nmcli)
  4. パッケージ管理(dnf)(この記事)
  5. ユーザー・グループ管理
  6. ファイアウォール(firewalld)
  7. SSH設定・鍵認証
  8. systemd / サービス管理
  9. ストレージ・LVM
  10. ログ管理(journalctl / rsyslog)
  11. cron / systemd timer
  12. セキュリティ強化
  13. パフォーマンス監視
  14. コンテナ管理(Podman)
  15. バックアップ・リストア