「リポジトリのエラーが出て、パッケージのインストールが進まない」
Red Hat系Linux(RHEL、CentOS、AlmaLinux、Rocky Linux等)では、パッケージ管理にyumまたはdnfコマンドを使います。RHEL8以降ではdnfが標準ですが、yumコマンドもそのまま使えます。
この記事では、yum/dnfの基本操作からリポジトリ管理、トラブル対処まで、現場で必要な知識をまとめて解説します。
yumとdnfの違い(どちらを使えばいいのか)
dnfはyumの後継として開発されたパッケージマネージャです。依存関係の解決が高速化され、メモリ使用量も改善されています。・RHEL7/CentOS7以前:yumを使う(dnfは標準では入っていない)
・RHEL8/CentOS8以降:dnfが標準。yumはdnfへのシンボリックリンクになっている
・RHEL9/AlmaLinux9/Rocky Linux9:dnfが標準。yumコマンドも引き続き使える
つまり、RHEL8以降では「yum install httpd」と打っても「dnf install httpd」と打っても、実行されるのは同じdnfです。
# RHEL8以降でyumの実体を確認 ls -l /usr/bin/yum # 出力例: /usr/bin/yum -> dnf-3
※rpmコマンドとの違い:rpmは個別の.rpmファイルを直接操作するコマンドです。依存関係の自動解決はできません。dnf/yumはリポジトリ(パッケージの配布元サーバー)から依存パッケージも含めて自動でダウンロード・インストールしてくれます。
基本的な使い方(インストール・削除・更新)
1. パッケージをインストールする(dnf install)
# httpdをインストール sudo dnf install httpd # 確認プロンプトを省略して自動でyesを返す(-y) sudo dnf install -y httpd # 複数パッケージを同時にインストール sudo dnf install -y httpd php php-mysqlnd
2. パッケージを削除する(dnf remove)
# httpdを削除 sudo dnf remove httpd # 確認なしで削除 sudo dnf remove -y httpd
3. パッケージを更新する(dnf update)
# 特定のパッケージを更新 sudo dnf update httpd # インストール済みの全パッケージを更新 sudo dnf update # セキュリティ関連のアップデートだけ適用 sudo dnf update --security
※更新可能なパッケージを事前に確認するには、以下を使います。
# 更新可能なパッケージの一覧を表示 dnf check-update
4. インストール済みパッケージを一覧表示する
# インストール済みパッケージの一覧 dnf list installed # キーワードで絞り込む dnf list installed | grep php # 利用可能な全パッケージ(インストール済み+未インストール) dnf list available
パッケージの検索と情報確認
パッケージを検索する(dnf search)
パッケージ名や説明文からキーワード検索できます。# パッケージを検索 dnf search httpd # 名前だけでなく説明文も含めて検索 dnf search all "web server"
パッケージの詳細情報を確認する(dnf info)
バージョン、リリース、アーキテクチャ、リポジトリなどを確認できます。# パッケージの詳細情報を表示 dnf info httpd # 出力例 Name : httpd Version : 2.4.57 Release : 11.el9_4.1 Architecture : x86_64 Size : 59 k Source : httpd-2.4.57-11.el9_4.1.src.rpm Repository : appstream Summary : Apache HTTP Server
あるファイルがどのパッケージに含まれるか調べる(dnf provides)
「このコマンドが使えない。どのパッケージをインストールすればいいのか」という場面で役立ちます。# /usr/sbin/httpdがどのパッケージに含まれるか調べる dnf provides /usr/sbin/httpd # コマンド名でも検索可能 dnf provides dig # ワイルドカードも使える dnf provides "*/nslookup"
リポジトリの管理
リポジトリとは、パッケージの配布元サーバーのことです。dnf/yumはリポジトリからパッケージをダウンロードしてインストールします。有効なリポジトリを一覧表示する
# 有効なリポジトリの一覧 dnf repolist # 無効なリポジトリも含めて全て表示 dnf repolist all
EPELリポジトリを追加する
EPEL(Extra Packages for Enterprise Linux)は、Red Hat系OSで使える追加パッケージのリポジトリです。標準リポジトリにないツール(htop、jq等)をインストールする際に必要です。# RHEL9/AlmaLinux9/Rocky Linux9の場合 sudo dnf install -y epel-release # RHEL8/CentOS8の場合 sudo dnf install -y epel-release # CentOS7の場合 sudo yum install -y epel-release # EPELが追加されたことを確認 dnf repolist | grep epel
# RHEL9の場合:CRBリポジトリを有効化してからEPELを追加 sudo dnf config-manager --set-enabled crb sudo dnf install -y epel-release
特定のリポジトリを一時的に有効・無効にする
普段は無効にしているリポジトリから、一時的にパッケージをインストールしたい場面で使います。# 特定のリポジトリを一時的に有効にしてインストール sudo dnf install --enablerepo=epel-testing パッケージ名 # 特定のリポジトリを一時的に無効にしてインストール sudo dnf install --disablerepo=epel パッケージ名 # リポジトリを恒久的に有効化・無効化 sudo dnf config-manager --set-enabled リポジトリ名 sudo dnf config-manager --set-disabled リポジトリ名
応用・実務Tips
dnf historyでインストール履歴を確認・取り消す
「いつ、何をインストールしたか」を確認できます。誤ってインストールしたパッケージを元に戻す(undo)機能もあります。# インストール・削除・更新の履歴を表示 dnf history # 特定のトランザクションの詳細を確認 dnf history info 15 # 特定のトランザクションを取り消す(元に戻す) sudo dnf history undo 15
dnf groupinstallでパッケージグループをまとめて導入する
開発ツール一式など、関連するパッケージをグループとしてまとめてインストールできます。# 利用可能なグループの一覧を表示 dnf group list # 開発ツール一式をインストール sudo dnf groupinstall "Development Tools" # グループに含まれるパッケージを確認 dnf group info "Development Tools"
キャッシュの管理(dnf clean)
dnfはダウンロードしたパッケージやメタデータをキャッシュとして保存します。ディスク容量が逼迫した場合や、リポジトリ情報を最新に更新したい場合にキャッシュを削除します。# 全てのキャッシュを削除 sudo dnf clean all # メタデータのキャッシュだけ削除 sudo dnf clean metadata # キャッシュを再構築 sudo dnf makecache
トラブルシュート・エラー対処
「Cannot find a valid baseurl for repo」が出た時の対処法
このエラーは、リポジトリのURLに接続できない場合に発生します。主な原因と対処方法は以下の通りです。
・ネットワーク未接続:pingでインターネット接続を確認する
・DNSが未設定:/etc/resolv.confにネームサーバーが設定されているか確認する
・リポジトリURLが古い:CentOS 8はEOL(サポート終了)のため、mirrorlistが無効になっている
# ネットワーク接続を確認 ping -c 3 8.8.8.8 # DNS解決を確認 ping -c 3 google.com # リポジトリ設定ファイルを確認 cat /etc/yum.repos.d/CentOS-Base.repo
「Another app is currently holding the yum lock」の解消法
別のdnf/yumプロセスが実行中か、前回のプロセスが異常終了してロックファイルが残っている場合に発生します。# 1. 他のdnf/yumプロセスが動いていないか確認 ps aux | grep -E "dnf|yum" | grep -v grep # 2. プロセスが見つかった場合は終了を待つ # 見つからない場合はロックファイルが残っているので削除 # RHEL7/CentOS7の場合 sudo rm -f /var/run/yum.pid # RHEL8以降の場合 sudo rm -f /var/cache/dnf/metadata_lock.pid # 3. それでも解消しない場合 sudo kill プロセスID
依存関係エラーが出た時の対処法
「Error: Problem: conflicting requests」や「nothing provides」と表示された場合の対処です。# 1. キャッシュをクリアして再試行 sudo dnf clean all sudo dnf makecache sudo dnf install パッケージ名 # 2. 依存関係を無視して強制インストール(非推奨・最終手段) sudo rpm -ivh --nodeps パッケージ名.rpm # 3. 壊れた依存関係を検出 sudo dnf repoquery --unsatisfied # 4. 不要な依存パッケージを一括削除 sudo dnf autoremove
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| パッケージをインストールする | sudo dnf install パッケージ名 |
| パッケージを削除する | sudo dnf remove パッケージ名 |
| パッケージを更新する | sudo dnf update パッケージ名 |
| 全パッケージを更新する | sudo dnf update |
| 更新可能なパッケージを確認する | dnf check-update |
| インストール済みパッケージを一覧表示する | dnf list installed |
| パッケージを検索する | dnf search キーワード |
| パッケージの詳細情報を確認する | dnf info パッケージ名 |
| ファイルからパッケージを逆引きする | dnf provides ファイルパス |
| 有効なリポジトリを一覧表示する | dnf repolist |
| EPELリポジトリを追加する | sudo dnf install -y epel-release |
| インストール履歴を確認する | dnf history |
| 操作を取り消す | sudo dnf history undo トランザクションID |
| キャッシュを全て削除する | sudo dnf clean all |
パッケージ管理だけで終わらせていませんか?
dnf/yumによるパッケージ管理はサーバー構築の入り口にすぎません。本番環境では、セキュリティ設定やネットワーク構成、サービスの起動管理まで一通りの知識が求められます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
