【保存版】dnfで特定バージョンをインストールする完全ガイド

Linux

プログラムの開発や検証作業をしていると、こんな場面に出会うことがありますよね:

  • 「新しいバージョンでバグが出たから、前のバージョンに戻したい」
  • 「開発環境と本番環境で同じバージョンを使いたい」
  • 「特定のバージョンでしか動かないソフトがある」

通常、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での特定バージョン管理は、開発・検証・安定運用において非常に重要なスキルです。

適切に使いこなせば、柔軟で安全なシステム運用が可能になります。

基本的な流れ

  1. バージョン確認dnf list --showduplicates パッケージ名
  2. 特定バージョンインストールsudo dnf install パッケージ名-バージョン
  3. バージョン固定sudo dnf versionlock add パッケージ名
  4. 動作確認:各種確認コマンドで検証

重要なコマンド一覧

# バージョン確認
dnf list --showduplicates パッケージ名

# 特定バージョンインストール  
sudo dnf install パッケージ名-バージョン

# バージョンロック
sudo dnf versionlock add パッケージ名

# ロック状況確認
dnf versionlock list

# ロック解除
sudo dnf versionlock delete パッケージ名

よく使うオプション

  • --allowerasing:競合パッケージの削除を許可
  • --skip-broken:依存関係の問題をスキップ
  • --enablerepo='*':全リポジトリを有効化

コメント

タイトルとURLをコピーしました