プログラムの開発や検証作業をしていると、こんな場面に出会うことがありますよね:
- 「新しいバージョンでバグが出たから、前のバージョンに戻したい」
- 「開発環境と本番環境で同じバージョンを使いたい」
- 「特定のバージョンでしか動かないソフトがある」
通常、dnfでパッケージをインストールすると最新版が自動的に選ばれますが、実は特定のバージョンを指定してインストールすることも可能なんです。
この記事では、dnfで特定バージョンを調べて、インストールして、維持する方法を、初心者の方にも分かりやすく説明していきます。
実際の作業で使えるコマンドと、よくあるトラブルの対処法も含めて解説しますね。
なぜ特定バージョンが必要になるの?

よくある使用場面
特定バージョンのインストールが必要になる場面を具体的に見てみましょう:
開発・検証での使用
- 新バージョンでの不具合:最新版にバグがあり、安定版を使いたい
- 互換性テスト:複数バージョンでの動作確認
- 本番環境との一致:開発環境を本番と同じバージョンに揃える
システム運用での使用
- 安定性重視:動作確認済みのバージョンを継続使用
- 段階的更新:一気に最新版にせず、段階的にアップデート
- 依存関係の管理:他のソフトとの相性問題を回避
dnfでのバージョン管理の特徴
dnfは、以下の特徴を持っています:
- 複数バージョンの共存:基本的には1つのバージョンのみ
- リポジトリベース:利用可能なバージョンはリポジトリ次第
- 依存関係の自動解決:指定バージョンに合わせて依存関係も調整
特定バージョンのインストールは、開発・検証・安定運用のために重要な機能です。
dnfでも適切な方法で実現できます。
利用可能なバージョンを調べる方法

基本的なバージョン確認コマンド
特定バージョンをインストールする前に、まずどんなバージョンが利用可能かを確認しましょう:
dnf list --showduplicates パッケージ名
実際の使用例
Nginxのバージョンを調べてみましょう:
dnf list --showduplicates nginx
出力例:
Available Packages
nginx.x86_64 1.24.0-1.fc38 fedora
nginx.x86_64 1.22.1-5.fc37 updates
nginx.x86_64 1.20.2-3.fc36 archives
出力の見方
- nginx.x86_64:パッケージ名とアーキテクチャ
- 1.24.0-1.fc38:バージョン-リリース番号.ディストリビューション
- fedora:リポジトリ名
より詳しい情報を取得
特定バージョンの詳細情報
dnf info nginx-1.22.1-5.fc37
インストール済みと利用可能の両方を表示
dnf list --showduplicates nginx --installed --available
バージョン情報の読み方
Fedora/RHELのパッケージバージョンは、以下の形式になっています:
[エポック:]バージョン-リリース[.アーキテクチャ]
例:nginx-1.22.1-5.fc37.x86_64
- 1.22.1:アップストリーム(本家)のバージョン
- 5:パッケージのリリース番号
- fc37:Fedora 37用
- x86_64:64ビットx86アーキテクチャ
検索範囲を広げる方法
無効化されたリポジトリも含める
dnf list --showduplicates nginx --enablerepo='*'
特定のリポジトリのみ検索
dnf list --showduplicates nginx --repo=fedora
dnf list --showduplicates
を使えば、利用可能な全バージョンを確認できます。
出力されたバージョン文字列は、インストール時にそのまま使用します。
特定バージョンをインストールする実践方法

基本的なインストール方法
基本構文
sudo dnf install パッケージ名-バージョン
実際の例
sudo dnf install nginx-1.22.1-5.fc37
重要なポイント:
- バージョン文字列は
dnf list --showduplicates
の出力をそのまま使う - アーキテクチャ部分(.x86_64)は通常省略可能
- ハイフン(-)でパッケージ名とバージョンを繋ぐ
より確実なインストール方法
完全なバージョン指定
sudo dnf install nginx-1.22.1-5.fc37.x86_64
ワイルドカードを使った指定
sudo dnf install 'nginx-1.22.1*'
実際のインストール手順
ステップ1:現在のバージョン確認
# インストール済みかチェック
rpm -q nginx
# または
dnf list installed nginx
ステップ2:利用可能バージョン確認
dnf list --showduplicates nginx
ステップ3:特定バージョンをインストール
sudo dnf install nginx-1.22.1-5.fc37
ステップ4:インストール確認
rpm -q nginx
nginx -v
既存バージョンがある場合の対処
ダウングレード
sudo dnf downgrade nginx-1.20.2-3.fc36
強制的に特定バージョンに変更
sudo dnf install nginx-1.22.1-5.fc37 --allowerasing
よく使うオプション
オプション | 意味 | 使用例 |
---|---|---|
--allowerasing | 競合パッケージの削除を許可 | sudo dnf install nginx-1.22.1* --allowerasing |
--skip-broken | 依存関係の問題をスキップ | sudo dnf install nginx-1.22.1* --skip-broken |
--downloadonly | ダウンロードのみ(インストールしない) | sudo dnf install nginx-1.22.1* --downloadonly |
-y | 確認なしで実行 | sudo dnf install nginx-1.22.1* -y |
実用的な使用例
開発環境用のNode.jsを特定バージョンに
# 利用可能バージョン確認
dnf list --showduplicates nodejs
# 特定バージョンをインストール
sudo dnf install nodejs-16.20.0-1.fc37
# 確認
node --version
Pythonの特定バージョンを追加
# Python 3.9の利用可能バージョン確認
dnf list --showduplicates python3.9
# インストール
sudo dnf install python3.9-3.9.18-1.fc38
# 確認
python3.9 --version
特定バージョンのインストールは、パッケージ名-バージョン
の形式で指定します。
事前にバージョンを確認し、必要に応じて適切なオプションを使用しましょう。
バージョンを固定して自動更新を防ぐ方法

なぜバージョン固定が必要?
特定バージョンをインストールしても、システム全体のアップデート時に自動的に最新版に更新されてしまうことがあります。
これを防ぐためには、バージョンロック機能を使います。
dnf-plugins-coreのインストール
バージョンロック機能を使うには、プラグインが必要です:
sudo dnf install dnf-plugins-core
バージョンロックの基本操作
特定パッケージをロック
sudo dnf versionlock add nginx
複数パッケージを同時にロック
sudo dnf versionlock add nginx httpd mysql
ワイルドカードを使ったロック
sudo dnf versionlock add 'nginx*'
バージョンロックの管理
現在のロック状況確認
dnf versionlock list
出力例:
nginx-1:1.22.1-5.fc37.*
httpd-2:2.4.57-1.fc38.*
特定パッケージのロック解除
sudo dnf versionlock delete nginx
全てのロックを解除
sudo dnf versionlock clear
実践的なバージョン固定手順
完全な手順例:Nginxを特定バージョンで固定
# 1. 現在のバージョン確認
rpm -q nginx || echo "nginxはインストールされていません"
# 2. 利用可能バージョン確認
dnf list --showduplicates nginx
# 3. 特定バージョンをインストール
sudo dnf install nginx-1.22.1-5.fc37
# 4. バージョンロック
sudo dnf versionlock add nginx
# 5. 確認
dnf versionlock list | grep nginx
nginx -v
ロック状態でのアップデート動作
通常のアップデート(ロックされたパッケージはスキップ)
sudo dnf update
ロックを無視してアップデート
sudo dnf update --disableplugin=versionlock
バージョンロックファイルの直接編集
ロックファイルの場所
/etc/dnf/plugins/versionlock.list
手動編集例
sudo nano /etc/dnf/plugins/versionlock.list
ファイル内容例:
nginx-1:1.22.1-5.fc37.*
httpd-2:2.4.57-1.fc38.*
注意事項とベストプラクティス
セキュリティアップデートの考慮
- 重要:セキュリティ修正が含まれる場合は、ロック解除を検討
- 定期的にセキュリティ情報をチェック
- 必要に応じて安全なバージョンにアップデート
依存関係の管理
# 依存関係も含めてロック
sudo dnf versionlock add nginx nginx-filesystem nginx-mod-*
dnf versionlock
を使えば、特定バージョンを維持できます。
ただし、セキュリティアップデートには注意が必要です。
よくあるトラブルと対処法

トラブル1:指定バージョンが見つからない
症状
No package nginx-1.22.1-5.fc37 available.
原因
- リポジトリにそのバージョンが存在しない
- リポジトリが無効化されている
- バージョン文字列の間違い
対処法
# 1. 利用可能バージョンを再確認
dnf list --showduplicates nginx
# 2. 全リポジトリを有効化して確認
dnf list --showduplicates nginx --enablerepo='*'
# 3. アーカイブリポジトリの確認
sudo dnf config-manager --set-enabled fedora-archives
dnf list --showduplicates nginx
トラブル2:依存関係の競合
症状
Error: Problem: package nginx-1.22.1-5.fc37.x86_64 requires libssl.so.1.1
原因
- 指定バージョンが現在のシステムと互換性がない
- 依存パッケージのバージョンが合わない
対処法
# 1. 依存関係を含めて情報確認
dnf info nginx-1.22.1-5.fc37
# 2. 依存関係の問題を許可してインストール
sudo dnf install nginx-1.22.1-5.fc37 --allowerasing
# 3. 特定のパッケージをスキップ
sudo dnf install nginx-1.22.1-5.fc37 --skip-broken
# 4. 依存パッケージも特定バージョンに合わせる
sudo dnf install nginx-1.22.1-5.fc37 openssl-libs-1.1.1q-1.fc37
トラブル3:アップグレード時の意図しない更新
症状
バージョンロックを設定したはずなのに、アップデート時に更新されてしまう
原因
- versionlockプラグインが無効化されている
- ロック設定の記述ミス
対処法
# 1. プラグインが有効か確認
dnf plugin list | grep versionlock
# 2. ロック状況を確認
dnf versionlock list
# 3. プラグインを有効化
sudo dnf config-manager --set-enabled versionlock
# 4. 正しいロック設定を再設定
sudo dnf versionlock delete nginx
sudo dnf versionlock add nginx
トラブル4:古いバージョンへのダウングレード失敗
症状
Error: No package nginx-1.20.2-3.fc36 available.
原因
- 古いバージョンがリポジトリから削除されている
- アーカイブリポジトリが無効
対処法
# 1. アーカイブリポジトリを有効化
sudo dnf config-manager --set-enabled fedora-archives
# 2. キャッシュをクリアして再確認
sudo dnf clean all
dnf list --showduplicates nginx
# 3. 手動でRPMをダウンロードしてインストール
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/36/Everything/x86_64/os/Packages/n/nginx-1.20.2-3.fc36.x86_64.rpm
sudo dnf install ./nginx-1.20.2-3.fc36.x86_64.rpm
トラブル5:バージョンロックが効かない
症状
ロックしたはずのパッケージが更新されてしまう
原因
- ロックファイルの権限問題
- 設定ファイルの記述ミス
対処法
# 1. ロックファイルの確認
sudo cat /etc/dnf/plugins/versionlock.list
# 2. 権限確認
ls -la /etc/dnf/plugins/versionlock.list
# 3. プラグイン設定確認
sudo cat /etc/dnf/plugins/versionlock.conf
# 4. ロックを再設定
sudo dnf versionlock clear
sudo dnf versionlock add nginx
まとめ
dnfでの特定バージョン管理は、開発・検証・安定運用において非常に重要なスキルです。
適切に使いこなせば、柔軟で安全なシステム運用が可能になります。
基本的な流れ
- バージョン確認:
dnf list --showduplicates パッケージ名
- 特定バージョンインストール:
sudo dnf install パッケージ名-バージョン
- バージョン固定:
sudo dnf versionlock add パッケージ名
- 動作確認:各種確認コマンドで検証
重要なコマンド一覧
# バージョン確認
dnf list --showduplicates パッケージ名
# 特定バージョンインストール
sudo dnf install パッケージ名-バージョン
# バージョンロック
sudo dnf versionlock add パッケージ名
# ロック状況確認
dnf versionlock list
# ロック解除
sudo dnf versionlock delete パッケージ名
よく使うオプション
--allowerasing
:競合パッケージの削除を許可--skip-broken
:依存関係の問題をスキップ--enablerepo='*'
:全リポジトリを有効化
コメント