パッケージ管理の基礎知識

AlmaLinuxでサーバーを運用していると、「このソフトウェアのバージョンは何だっけ?」と確認したくなる場面がありますよね。
パッケージとは、ソフトウェアをインストールしやすい形式にまとめたものです。
AlmaLinuxでは、これらのパッケージを簡単に管理できる仕組みが整っています。
パッケージマネージャーって何?
パッケージマネージャーは、ソフトウェアのインストール、更新、削除を管理するツールのことです。
AlmaLinuxでは、主に3つのツールを使います:
dnf(ディーエヌエフ)
- AlmaLinux 8以降の標準パッケージマネージャー
- 高機能で使いやすい
- yumの後継
yum(ヤム)
- 従来からあるパッケージマネージャー
- 実はdnfへのエイリアス(別名)
- 古い習慣でyumを使う人も多い
rpm(アールピーエム)
- 最も低レベルなパッケージ管理ツール
- 直接パッケージを操作
- 依存関係は自動解決しない
これらを使い分けることで、効率的にパッケージを管理できます。
なぜバージョン確認が重要なのか
パッケージのバージョンを知ることは、サーバー管理の基本です。
重要な理由:
セキュリティ対策
- 脆弱性のあるバージョンを使っていないか確認
- セキュリティパッチの適用状況を把握
- 定期的な更新の必要性を判断
互換性の確認
- アプリケーションが要求するバージョンを満たしているか
- 新しいソフトウェアをインストールできるか
- ライブラリの依存関係を確認
トラブルシューティング
- 問題が起きた時の原因調査
- バグが修正されたバージョンかどうか
- 動作環境の記録
システム管理
- インストール済みソフトウェアの把握
- アップデート計画の立案
- ドキュメント作成
dnfコマンドでバージョンを確認する
AlmaLinux 8以降では、dnfが標準のパッケージマネージャーです。
まずはこのコマンドから見ていきましょう。
特定のパッケージのバージョン確認
基本的な確認方法:
dnf info パッケージ名
例:httpdのバージョン確認
dnf info httpd
実行結果の例:
インストール済みパッケージ
名前 : httpd
エポック : 0
バージョン : 2.4.57
リリース : 5.el9
アーキテクチャ: x86_64
サイズ : 1.4 M
ソース : httpd-2.4.57-5.el9.src.rpm
リポジトリー : @System
提供元リポジトリー: appstream
要約 : Apache HTTP Server
URL : https://httpd.apache.org/
ライセンス : ASL 2.0
説明 : The Apache HTTP Server is a powerful, efficient, and
: extensible web server.
表示される主な情報:
- バージョン:メジャーバージョン番号
- リリース:パッケージのリビジョン番号
- エポック:バージョン比較の優先度(通常は気にしなくてOK)
- アーキテクチャ:CPUアーキテクチャ(x86_64など)
- リポジトリー:インストール元
インストールされているか確認だけしたい
もっとシンプルに、インストールされているかだけ知りたい場合:
dnf list installed パッケージ名
実行結果の例:
インストール済みパッケージ
httpd.x86_64 2.4.57-5.el9 @appstream
1行で必要な情報が分かりますね。
すべてのインストール済みパッケージを表示
システムにインストールされているすべてのパッケージを確認:
dnf list installed
かなり大量に表示されるので、特定のものだけ探したい場合は:
dnf list installed | grep パッケージ名
例:Pythonに関連するパッケージをすべて表示
dnf list installed | grep python
実行結果の例:
platform-python.x86_64 3.9.16-1.el9 @baseos
python3.x86_64 3.9.16-1.el9 @baseos
python3-libs.x86_64 3.9.16-1.el9 @baseos
python3-pip.noarch 21.2.3-7.el9 @baseos
利用可能な最新バージョンを確認
アップデート可能なバージョンがあるか調べる:
dnf list パッケージ名
実行結果の例:
インストール済みパッケージ
httpd.x86_64 2.4.57-5.el9 @appstream
利用可能なパッケージ
httpd.x86_64 2.4.57-8.el9 appstream
「利用可能なパッケージ」に新しいバージョンが表示されていれば、アップデートできます。
アップデート可能なパッケージ一覧
システム全体でアップデート可能なものをチェック:
dnf check-update
実行結果の例:
httpd.x86_64 2.4.57-8.el9 appstream
openssl.x86_64 3.0.7-27.el9 baseos
kernel.x86_64 5.14.0-362.el9 baseos
各行が、更新可能なパッケージを示しています。
パッケージの詳細情報を表示
より詳しい情報を見たい場合:
dnf info パッケージ名
インストール済み、利用可能の両方の情報が表示されます。
yumコマンドでバージョンを確認する
AlmaLinuxでは、yumコマンドも使えます。
実はdnfへのエイリアスなので、結果は同じです。
yumとdnfの関係
AlmaLinux 8以降では:
# この2つは全く同じ動作
dnf info httpd
yum info httpd
どちらを使えばいい?
正直なところ、どちらでも構いません。
- dnfを使う:新しい標準に従う
- yumを使う:長年の習慣で慣れている
ドキュメントでは「dnf」を使うことが推奨されていますが、実際の動作は同じです。
yumコマンドの基本
パッケージ情報の表示:
yum info httpd
インストール済みパッケージの一覧:
yum list installed
アップデート確認:
yum check-update
すべてdnfと同じですね。
CentOSからの移行者へ
CentOS 7からAlmaLinuxに移行した方は、yumコマンドに慣れているでしょう。
良いニュース:
- yumコマンドはそのまま使える
- 既存のスクリプトも動作する
- 徐々にdnfに移行すればOK
rpmコマンドでバージョンを確認する
rpmは、最も基本的なパッケージ管理ツールです。
シンプルで高速なのが特徴です。
rpmの基本的な使い方
インストール済みパッケージのバージョン確認:
rpm -q パッケージ名
実行結果の例:
httpd-2.4.57-5.el9.x86_64
シンプルで速いですね!
詳細情報の表示:
rpm -qi パッケージ名
実行結果の例:
Name : httpd
Version : 2.4.57
Release : 5.el9
Architecture: x86_64
Install Date: 2024年11月01日 10時30分00秒
Group : System Environment/Daemons
Size : 1421824
License : ASL 2.0
Signature : RSA/SHA256, 2023年08月10日 15時20分00秒, Key ID 51d6647ec21ad6ea
Source RPM : httpd-2.4.57-5.el9.src.rpm
Build Date : 2023年08月10日 15時20分00秒
Build Host : x86-64-01.build.almalinux.org
URL : https://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and
extensible web server.
dnf infoと似た情報が表示されますが、こちらの方が速く取得できます。
すべてのインストール済みパッケージを表示
rpm -qa
数が多いので、絞り込む:
rpm -qa | grep httpd
実行結果の例:
httpd-2.4.57-5.el9.x86_64
httpd-tools-2.4.57-5.el9.x86_64
httpd-filesystem-2.4.57-5.el9.noarch
関連するすべてのパッケージが表示されます。
パッケージに含まれるファイル一覧
そのパッケージがどんなファイルをインストールしたか確認:
rpm -ql パッケージ名
実行結果の例:
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf/httpd.conf
/usr/sbin/httpd
/usr/lib64/httpd
...
トラブルシューティングの時に便利です。
特定のファイルがどのパッケージのものか調べる
逆に、このファイルはどのパッケージが提供しているのか知りたい場合:
rpm -qf ファイルのパス
例:/usr/sbin/httpdはどのパッケージ?
rpm -qf /usr/sbin/httpd
実行結果:
httpd-2.4.57-5.el9.x86_64
「このコマンドはどのパッケージで入れたんだっけ?」という時に使えます。
パッケージグループの確認

複数の関連パッケージをまとめた「グループ」という概念があります。
グループの一覧表示
dnf group list
実行結果の例:
利用可能な環境グループ:
サーバー
最小限のインストール
ワークステーション
仮想化ホスト
インストール済みのグループ:
開発ツール
利用可能なグループ:
コンテナー管理
システムツール
セキュリティツール
グループの詳細情報
特定のグループに含まれるパッケージを確認:
dnf group info "開発ツール"
実行結果の例:
グループ: 開発ツール
説明: 開発用の基本的なツール群
必須のパッケージ:
autoconf
automake
gcc
gcc-c++
make
デフォルトのパッケージ:
git
patch
...
グループ単位でインストールすると、関連ツールをまとめて入れられて便利です。
リポジトリの確認と管理
パッケージは「リポジトリ」から取得されます。
どのリポジトリが有効か確認する方法を見ていきましょう。
有効なリポジトリの一覧
dnf repolist
実行結果の例:
repo id repo の名前
appstream AlmaLinux 9 - AppStream
baseos AlmaLinux 9 - BaseOS
extras AlmaLinux 9 - Extras
主なリポジトリの役割:
- baseos:OSの基本パッケージ
- appstream:アプリケーション
- extras:追加パッケージ
すべてのリポジトリを表示(無効なものも含む)
dnf repolist --all
実行結果の例:
repo id repo の名前 状態
appstream AlmaLinux 9 - AppStream 有効
baseos AlmaLinux 9 - BaseOS 有効
crb AlmaLinux 9 - CRB 無効
extras AlmaLinux 9 - Extras 有効
特定のリポジトリから利用可能なパッケージ
dnf repository-packages リポジトリ名 list
例:appstreamリポジトリのパッケージ一覧
dnf repository-packages appstream list
膨大な数が表示されます。
リポジトリの詳細情報
dnf repoinfo リポジトリ名
実行結果の例:
Repo-id : appstream
Repo-name : AlmaLinux 9 - AppStream
Repo-status : enabled
Repo-revision : 9.3
Repo-updated : 2024年10月15日 10時30分00秒
Repo-pkgs : 5,234
Repo-available-pkgs: 5,150
Repo-size : 8.2 G
Repo-baseurl : https://repo.almalinux.org/almalinux/9/AppStream/x86_64/os/
パッケージの依存関係を確認
パッケージは、他のパッケージに依存していることがあります。
依存関係の表示
dnf deplist パッケージ名
例:httpdの依存関係
dnf deplist httpd
実行結果の例:
package: httpd-2.4.57-5.el9.x86_64
dependency: /bin/sh
provider: bash-5.1.8-6.el9.x86_64
dependency: /usr/sbin/useradd
provider: shadow-utils-4.9-8.el9.x86_64
dependency: httpd-filesystem = 2.4.57-5.el9
provider: httpd-filesystem-2.4.57-5.el9.noarch
dependency: httpd-tools = 2.4.57-5.el9
provider: httpd-tools-2.4.57-5.el9.x86_64
...
どのパッケージが必要か、一目で分かりますね。
このパッケージに依存しているものを調べる
逆に、このパッケージを必要としているものを確認:
dnf repoquery --whatrequires パッケージ名
例:opensslを必要としているパッケージ
dnf repoquery --whatrequires openssl
削除する前に、影響範囲を確認できます。
提供しているファイルやコマンドから検索
特定のファイルを提供しているパッケージを探す:
dnf provides ファイル名
例:/usr/bin/pythonを提供しているパッケージは?
dnf provides /usr/bin/python3
実行結果の例:
python3-3.9.16-1.el9.x86_64 : Python 3.9 interpreter
Repo : @System
Matched from:
Filename : /usr/bin/python3
セキュリティアップデートの確認
セキュリティに関わるアップデートだけをチェックする方法です。
セキュリティアップデートの一覧
dnf updateinfo list --security
実行結果の例:
ALSA-2023:4536 Important/Sec. httpd-2.4.57-8.el9.x86_64
ALSA-2023:4610 Moderate/Sec. openssl-3.0.7-27.el9.x86_64
ALSA-2023:5147 Critical/Sec. kernel-5.14.0-362.el9.x86_64
重要度の意味:
- Critical:最優先で対応すべき
- Important:重要、早めに対応
- Moderate:中程度、計画的に対応
- Low:低、定期メンテナンスで対応
特定のCVEに関する情報
CVE(脆弱性識別番号)から検索:
dnf updateinfo list --cve CVE-2023-XXXXX
実際のCVE番号を入れると、該当するアップデートが表示されます。
セキュリティアップデートの詳細
dnf updateinfo info ALSA-2023:4536
実行結果の例:
===============================================================================
ALSA-2023:4536: httpd security update (Important)
===============================================================================
Update ID: ALSA-2023:4536
Issued: 2023-08-15
Updated: 2023-08-15
Bugs: 2222255 - CVE-2023-27522
: 2222256 - CVE-2023-25690
Severity: Important
Description:
Security fix(es):
* httpd: mod_proxy_uwsgi HTTP response splitting (CVE-2023-27522)
* httpd: HTTP request splitting with mod_rewrite and mod_proxy (CVE-2023-25690)
どんな脆弱性が修正されたか、詳しく分かります。
セキュリティアップデートだけを実行
確認だけでなく、実際に更新する場合:
sudo dnf update --security
セキュリティ関連のパッケージだけが更新されます。
バージョン比較とダウングレード
バージョンを比較したり、古いバージョンに戻したい時の方法です。
利用可能なすべてのバージョンを表示
dnf list --showduplicates パッケージ名
実行結果の例:
httpd.x86_64 2.4.57-5.el9 @appstream
httpd.x86_64 2.4.57-5.el9 appstream
httpd.x86_64 2.4.57-8.el9 appstream
リポジトリに残っている古いバージョンも表示されます。
特定のバージョンにダウングレード
sudo dnf downgrade パッケージ名-バージョン
例:httpdを古いバージョンに戻す
sudo dnf downgrade httpd-2.4.57-5.el9
注意点:
- セキュリティリスクがあるため、通常は推奨されません
- テスト環境での検証後に限定すべき
- 依存関係の問題が発生する可能性
バージョンロック(更新を止める)
特定のパッケージを更新したくない場合:
# dnf-pluginsのインストール(必要に応じて)
sudo dnf install python3-dnf-plugin-versionlock
# バージョンをロック
sudo dnf versionlock add パッケージ名
ロックの確認:
dnf versionlock list
ロックの解除:
sudo dnf versionlock delete パッケージ名
カーネルなど、慎重に更新したいパッケージに使います。
パッケージ履歴の確認
過去のパッケージ操作履歴を確認できます。
操作履歴の表示
dnf history
実行結果の例:
ID | Command line | Date and time | Action(s) | Altered
------------------------------------------------------------------------
5 | update | 2024-11-01 10:30 | Update | 15
4 | install git | 2024-10-25 14:20 | Install | 8
3 | update | 2024-10-15 09:15 | Update | 22
2 | install httpd | 2024-10-10 11:00 | Install | 5
1 | | 2024-10-01 10:00 | Install | 450
いつ、何をしたか記録されています。
特定の操作の詳細
dnf history info 履歴ID
例:ID 4の詳細を見る
dnf history info 4
実行結果の例:
Transaction ID : 4
Begin time : 2024年10月25日 14時20分00秒
Begin rpmdb : 450:1234567890abcdef
End time : 2024年10月25日 14時21分00秒
End rpmdb : 458:abcdef1234567890
User : root <root>
Return-Code : Success
Command Line : install git
Transaction performed with:
Installed dnf-4.14.0-8.el9.noarch
Packages Altered:
Install git-2.39.3-1.el9.x86_64
Install git-core-2.39.3-1.el9.x86_64
...
どのパッケージがインストールされたか、詳しく分かります。
操作を取り消す(ロールバック)
sudo dnf history undo 履歴ID
例:ID 4の操作を取り消す
sudo dnf history undo 4
gitをインストールした操作を取り消すので、gitがアンインストールされます。
注意:
- 依存関係の問題が起きる可能性
- 重要なシステムパッケージでは慎重に
パッケージのキャッシュ管理

dnfは、ダウンロードしたパッケージをキャッシュします。
キャッシュの確認
du -sh /var/cache/dnf
どれくらいのディスク容量を使っているか確認できます。
キャッシュのクリア
sudo dnf clean all
何が削除されるか:
- ダウンロードしたパッケージファイル
- メタデータ
- キャッシュデータベース
実行後:
次回のdnfコマンドで、リポジトリのメタデータを再ダウンロードします。
メタデータだけ更新
sudo dnf makecache
キャッシュを削除せずに、最新のメタデータを取得します。
よくあるトラブルと解決方法
パッケージ管理でよく遭遇する問題と対処法です。
問題1:「パッケージが見つかりません」エラー
症状:
エラー: 一致したものはありません: パッケージ名
原因:
- パッケージ名のスペルミス
- 必要なリポジトリが無効
- パッケージが存在しない
解決方法:
# パッケージ名を曖昧検索
dnf search キーワード
# すべてのリポジトリを確認
dnf repolist --all
# 無効なリポジトリを有効化
sudo dnf config-manager --set-enabled リポジトリ名
問題2:依存関係のエラー
症状:
エラー:
問題: nothing provides libxxx.so.1 needed by パッケージ名
原因:
必要な依存パッケージがインストールされていない
解決方法:
# リポジトリのメタデータを更新
sudo dnf clean all
sudo dnf makecache
# システム全体を更新
sudo dnf update
# EPELリポジトリを追加(必要に応じて)
sudo dnf install epel-release
問題3:ロックファイルのエラー
症状:
Waiting for process with pid XXXXX to finish.
原因:
別のdnf/yumプロセスが実行中
解決方法:
# 実行中のプロセスを確認
ps aux | grep dnf
# 強制的にロックを削除(注意して使用)
sudo rm -f /var/run/dnf.pid
問題4:「GPGキーがインポートされていません」
症状:
警告: パッケージ名.rpm: ヘッダー V4 RSA/SHA256 Signature、鍵 ID XXXXXXXX: NOKEY
原因:
リポジトリのGPGキーが未インポート
解決方法:
# GPGキーのインポート
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
# または、自動インポートを許可
sudo dnf install --nogpgcheck パッケージ名
ただし、セキュリティのため、通常は鍵を正しくインポートすべきです。
問題5:バージョンが古いまま
症状:dnf updateしても最新版にならない
原因:
- リポジトリのキャッシュが古い
- バージョンロックがかかっている
解決方法:
# キャッシュをクリア
sudo dnf clean all
sudo dnf makecache
# バージョンロックを確認
dnf versionlock list
# ロックを解除
sudo dnf versionlock delete パッケージ名
コマンドのチートシート
よく使うコマンドを一覧にまとめました。
バージョン確認系
# 基本的な情報表示
dnf info パッケージ名
yum info パッケージ名
rpm -qi パッケージ名
# インストール済み確認
dnf list installed パッケージ名
rpm -q パッケージ名
# すべてのインストール済みパッケージ
dnf list installed
rpm -qa
# 利用可能なバージョン
dnf list パッケージ名
dnf list --showduplicates パッケージ名
# アップデート可能なパッケージ
dnf check-update
yum check-update
検索系
# パッケージ名で検索
dnf search キーワード
# ファイル名からパッケージを探す
dnf provides ファイル名
rpm -qf ファイルのパス
# パッケージに含まれるファイル一覧
rpm -ql パッケージ名
# 依存関係の確認
dnf deplist パッケージ名
dnf repoquery --whatrequires パッケージ名
リポジトリ系
# リポジトリ一覧
dnf repolist
dnf repolist --all
# リポジトリ情報
dnf repoinfo リポジトリ名
# リポジトリの有効化/無効化
sudo dnf config-manager --set-enabled リポジトリ名
sudo dnf config-manager --set-disabled リポジトリ名
セキュリティ系
# セキュリティアップデート確認
dnf updateinfo list --security
# CVE検索
dnf updateinfo list --cve CVE-番号
# アドバイザリの詳細
dnf updateinfo info ALSA-番号
# セキュリティアップデートのみ実行
sudo dnf update --security
履歴・キャッシュ系
# 操作履歴
dnf history
dnf history info 履歴ID
# 操作の取り消し
sudo dnf history undo 履歴ID
# キャッシュのクリア
sudo dnf clean all
# メタデータの更新
sudo dnf makecache
アップデート・ダウングレード系
# パッケージの更新
sudo dnf update パッケージ名
# システム全体の更新
sudo dnf update
# ダウングレード
sudo dnf downgrade パッケージ名-バージョン
# バージョンロック
sudo dnf versionlock add パッケージ名
sudo dnf versionlock list
sudo dnf versionlock delete パッケージ名
スクリプトでの活用例
パッケージバージョン確認を自動化する例です。
特定パッケージの監視スクリプト
#!/bin/bash
# パッケージバージョン監視スクリプト
PACKAGE="httpd"
LOG_FILE="/var/log/package-check.log"
# 現在のバージョンを取得
CURRENT_VERSION=$(rpm -q $PACKAGE)
# 利用可能な最新バージョンを取得
LATEST_VERSION=$(dnf list $PACKAGE 2>/dev/null | grep "^$PACKAGE" | tail -1 | awk '{print $2}')
# ログに記録
echo "$(date): Current=$CURRENT_VERSION, Latest=$LATEST_VERSION" >> $LOG_FILE
# 更新が必要か判定
if [ "$CURRENT_VERSION" != "$PACKAGE-$LATEST_VERSION" ]; then
echo "更新が利用可能です: $LATEST_VERSION"
# メール通知やSlack通知などを追加可能
fi
セキュリティアップデート確認スクリプト
#!/bin/bash
# セキュリティアップデート確認
SECURITY_UPDATES=$(dnf updateinfo list --security 2>/dev/null | wc -l)
if [ $SECURITY_UPDATES -gt 0 ]; then
echo "警告: $SECURITY_UPDATES 件のセキュリティアップデートがあります"
dnf updateinfo list --security
# Critical/Importantのカウント
CRITICAL=$(dnf updateinfo list --security 2>/dev/null | grep -c "Critical")
IMPORTANT=$(dnf updateinfo list --security 2>/dev/null | grep -c "Important")
echo "Critical: $CRITICAL, Important: $IMPORTANT"
else
echo "セキュリティアップデートはありません"
fi
全パッケージのバージョン一覧をCSVで出力
#!/bin/bash
# インストール済みパッケージをCSV出力
OUTPUT="packages.csv"
echo "パッケージ名,バージョン,リリース,アーキテクチャ" > $OUTPUT
rpm -qa --qf '%{NAME},%{VERSION},%{RELEASE},%{ARCH}\n' | sort >> $OUTPUT
echo "出力完了: $OUTPUT"
まとめ:パッケージ管理を習慣化しよう
この記事では、AlmaLinuxでパッケージのバージョンを確認する様々な方法を解説してきました。
重要なポイントのおさらい:
- AlmaLinuxではdnf/yum/rpmの3つのツールを使い分ける
- dnfは高機能で使いやすい現代的なツール
- rpmはシンプルで高速な基本ツール
- バージョン確認は
dnf infoまたはrpm -qが基本 - セキュリティアップデートは
dnf updateinfoで確認 - 履歴管理で過去の操作を追跡できる
- リポジトリの管理も重要
- 定期的な確認とアップデートが安全な運用の鍵
パッケージ管理の基本サイクル:
- 週次確認:セキュリティアップデートをチェック
- 月次確認:システム全体のアップデート計画
- 履歴記録:変更内容を記録
- テスト:本番環境の前にテスト環境で確認
今すぐできること:
# 1. 現在の状態を確認
dnf list installed | wc -l # パッケージ数
# 2. セキュリティアップデートをチェック
dnf updateinfo list --security
# 3. アップデート可能なパッケージを確認
dnf check-update
# 4. 重要なパッケージのバージョンを記録
rpm -q kernel httpd openssl > /root/packages-$(date +%Y%m%d).txt
パッケージのバージョン管理は、サーバーの安全性と安定性を保つための基本中の基本です。
定期的にチェックする習慣をつけて、常に最新かつ安全な状態を維持しましょう!


コメント