「Failed to download metadata」。その一行がエンジニアを絶望させる。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
AlmaLinux 9(RHEL 9互換)は、その堅牢性と安定性から、2026年現在多くの企業や個人サーバーで採用されています。
しかし、どんなに優れたOSであっても、運用の要であるパッケージ管理システム DNF (Dandified YUM) が動かなくなれば、ただの箱になってしまいます。
「セキュリティパッチを当てようとしたらエラーで止まった」
「新しいミドルウェアを入れようとしたらリポジトリが見つからないと言われる」
「進捗バーが99%で止まってタイムアウトする」
これらのトラブルは、サーバー管理者にとって冷や汗が出る瞬間です。
先生、大変です!
管理しているAlmaLinux 9のサーバーで sudo dnf update を打ったら、赤文字のエラーが大量に出て止まってしまいました。
「Could not resolve host」とか「GPG check FAILED」とか、何が原因なのかサッパリです。
再起動しても直らないし、このままだと脆弱性が放置されたままになっちゃいます……どうすればいいですか!?
コウ君、落ち着いて。
DNFのエラーは一見怖そうに見えるけど、実は「どこがおかしいか」を正確に教えてくれているのよ。
ネットワークが切れているのか、リポジトリの情報が古いのか、それともパッケージ同士が喧嘩しているのか。
エラーメッセージを読み解けば、必ず解決策は見つかるわ。
今日は、2026年の最新環境で起こりうるDNFトラブルを、基礎から応用まで全部解決していくわよ!
本記事では、AlmaLinux 9系において dnf update が失敗するあらゆるパターンを想定し、その原因切り分けと具体的な解決コマンドを、プロのエンジニア視点で徹底解説します。
🔧 本記事の対象環境
- OS: AlmaLinux 9.5 / 9.6 / 9.7 (2026年時点の最新)
- パッケージマネージャ: dnf 4.14以降 / dnf5
- ネットワーク: IPv4 / IPv6 デュアルスタック環境
目次
第1章:まずはエラーを読む。メッセージ別・診断チャート
解決策を試す前に、あなたの画面に出ているエラーメッセージを確認してください。
闇雲にコマンドを打つと、状況を悪化させる可能性があります。
よくあるエラーメッセージ一覧
| エラーメッセージ(一部抜粋) | 主な原因 | 参照章 |
|---|---|---|
| Could not resolve host: mirrorlist.almalinux.org | DNS解決失敗、ネットワーク切断 | 第2章 |
| Failed to download metadata for repo ‘appstream’ | キャッシュ破損、ミラーサイトのダウン | 第3章, 第4章 |
| Curl error (28): Timeout was reached | 通信速度低下、IPv6のタイムアウト、ファイアウォール | 第2章, 第6章 |
| Error: Problem: package X requires Y, but none of the providers can be installed | パッケージの依存関係競合 | 第5章 |
| GPG check FAILED | GPG署名鍵の期限切れ、不正なパッケージ | 第3章 |
| Waiting for process with pid XXXX to finish | 他のdnfプロセスが動いている(ロック) | 第7章 |
エラー文の中にヒントは必ずあります。
「何が起きているか」を把握した上で、適切な処置を行いましょう。
第2章:【基本】ネットワークとDNSの疎通確認
対象エラー:Could not resolve host / Network is unreachable
一番多いのが、単純な「インターネットに繋がっていない」または「名前解決ができていない」ケースです。
DNFは外部のリポジトリサーバーと通信する必要があるため、ここが遮断されていると何もできません。
1. 外部へのPing疎通確認
まずは、インターネットに出られるか確認します。
# IPアドレスへのPing(DNSを使わない通信) ping -c 4 8.8.8.8 # ドメイン名へのPing(DNSを使う通信) ping -c 4 google.com
判定:
8.8.8.8へのPingが通らない場合:
デフォルトゲートウェイの設定ミス、LANケーブル抜け、ルーターの不調、ファイアウォールでの遮断が疑われます。ip routeでゲートウェイを確認してください。8.8.8.8は通るが、google.comが通らない場合:
DNSの設定ミスです。次項へ進んでください。
2. DNS設定の修正 (/etc/resolv.conf)
DNSサーバーが正しく設定されていないと、リポジトリのURL(mirrorlist.almalinux.orgなど)をIPアドレスに変換できません。/etc/resolv.conf を確認します。
cat /etc/resolv.conf
もし空っぽだったり、無効なIPが書かれている場合は、一時的にGoogle Public DNSなどを設定して疎通を確認します。
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
※NetworkManagerを使用している場合、再起動で元に戻ることがあるため、恒久的な設定は nmcli コマンドで行う必要があります。
# インターフェース名を確認 nmcli device # DNSを設定(例:ens192の場合) sudo nmcli connection modify ens192 ipv4.dns "8.8.8.8 8.8.4.4" sudo nmcli connection up ens192
3. プロキシ環境下の場合
社内ネットワークなどでプロキシ(Proxy)が必要な場合、DNFの設定ファイルにプロキシ情報を記述する必要があります。
sudo vi /etc/dnf/dnf.conf
ファイルの末尾に以下を追記します。
proxy=http://proxy.example.com:8080 # 認証が必要な場合 proxy_username=myuser proxy_password=mypassword
第3章:【王道】メタデータのクリーンアップとキャッシュ削除
対象エラー:Failed to download metadata / Checksum error
ネットワークは正常なのにエラーが出る場合、手元のサーバーに保存されている「リポジトリ情報(メタデータ)」が壊れているか、古くなっている可能性があります。
これはDNFトラブル解決の「基本のキ」であり、8割の問題はこれで解決します。
1. クリーンアップコマンドの実行
以下のコマンドを順に実行し、溜まったキャッシュを全て綺麗にします。
# 一時ファイルを削除 sudo dnf clean all # キャッシュディレクトリを物理的に削除(念の為) sudo rm -rf /var/cache/dnf
2. メタデータの再構築
キャッシュを消した状態で、再度リポジトリ情報を取得します。
sudo dnf makecache
ここで「Metadata cache created」と表示されれば成功です。
この状態で再度 sudo dnf update を試してみてください。
3. GPG鍵の更新
「GPG check FAILED」が出る場合、リポジトリの署名に使われている公開鍵が更新されている可能性があります。
通常は dnf update 時に新しい鍵を取り込むか聞かれますが、手動でインポートすることも可能です。
sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux-9
※EPELリポジトリを使っている場合は、EPELの鍵も再インポートが必要な場合があります。
第4章:【リポジトリ】ミラーサイトの不調とBaseURLへの切り替え
対象エラー:Status code: 404 / 503 Service Unavailable / Connection timed out
dnf makecache すら失敗する場合、接続しようとしている「ミラーサイト(配布サーバー)」がダウンしているか、経路上の問題で接続できていない可能性があります。
DNFは通常、mirrorlist という仕組みを使って、自動的に近くのサーバーを選びますが、選ばれたサーバーが不調だと更新に失敗します。
1. baseurl を有効化して直接取りに行く
ミラーリスト経由ではなく、AlmaLinuxの公式リポジトリ(または特定の信頼できるサーバー)を直接指定するように設定を変更します。
リポジトリ設定ファイルがあるディレクトリに移動します。
cd /etc/yum.repos.d/
almalinux.repo ファイルを編集します(バックアップを推奨)。
sudo cp almalinux.repo almalinux.repo.bak sudo vi almalinux.repo
ファイル内で [baseos] や [appstream] などのセクションを探し、以下のように書き換えます。
mirrorlist=...の行をコメントアウト(行頭に # を付ける)baseurl=...の行のコメントアウトを外す(有効化する)
変更前:
[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
変更後:
[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
これを [appstream] や [extras] にも適用し、再度 sudo dnf clean all と sudo dnf update を実行します。
💡 プロのアドバイス:国内ミラーを指定する
公式の repo.almalinux.org は海外にあるため遅い場合があります。baseurl に日本の信頼できるミラー(理研やJAISTなど)を指定すると、爆速で安定することがあります。
例:baseurl=http://ftp.riken.jp/Linux/almalinux/$releasever/BaseOS/$basearch/os/
第5章:【競合】依存関係のエラーと「–allowerasing」の使い所
対象エラー:Problem: package X requires Y… / conflicting requests
「パッケージAを入れたいけど、それにはパッケージBのバージョン2が必要。でも既にバージョン1が入っていて、それを必要としているパッケージCがいる……」
これが依存関係の地獄(Dependency Hell)です。
サードパーティ製のリポジトリ(EPEL, Remi, RepoForgeなど)を多用している環境でよく発生します。
1. ベストエフォートでの更新
更新できないパッケージがあっても、更新できるものだけ先に進めるオプションです。
sudo dnf update --best --skip-broken
--skip-broken を付けることで、依存関係が解決できないパッケージをスキップして処理を続行します。
2. 古いパッケージの置換を許可する
新しいパッケージを入れるために、競合している古いパッケージを削除しても良い場合は、以下のオプションを使います。
※注意:重要なパッケージが消されないか、確認画面で必ずチェックしてください。
sudo dnf update --allowerasing
3. 重複パッケージの削除
以前のアップデートが途中で強制終了した場合など、同じパッケージの異なるバージョンが重複してインストールされていることがあります。
これを解消するコマンドです。
sudo dnf remove --duplicates
4. モジュールストリームのリセット
AlmaLinux 8/9では「AppStream」というモジュール機能があります。
PHPやNode.jsのバージョン切り替えなどでモジュール設定がおかしくなっている場合、一度リセットすると直ることがあります。
sudo dnf module reset [モジュール名]
第6章:【高度な問題】IPv6の罠とMTU設定
対象エラー:Curl error (28): Timeout was reached / 途中までDLして止まる
2026年現在、IPv6は広く普及していますが、サーバー環境やプロバイダによっては「IPv6アドレスは持っているが、通信が不安定」というケースが多々あります。
DNFはデフォルトでIPv6を優先して接続しようとするため、そこでタイムアウトが発生して失敗することがあります。
1. DNFでIPv4を強制する
OS全体のIPv6を無効化せず、DNFの通信だけIPv4に限定する方法です。/etc/dnf/dnf.conf を編集します。
sudo vi /etc/dnf/dnf.conf
以下の行を追記します。
ip_resolve=4
保存後、再度updateを試してみてください。これで劇的に改善するケースは非常に多いです。
2. MTUサイズの不整合
VPN経由や特定のクラウド環境(OpenStackなど)では、通信パケットの最大サイズ(MTU)の問題で、大きなファイルのダウンロードだけ失敗することがあります。
一時的にMTUを小さくして試してみます。
sudo ip link set dev [インターフェース名] mtu 1300
(インターフェース名は ip a で確認してください。通常は ens160 や eth0 です)
第7章:【最終手段】RPMデータベースの再構築とロック解除
ここまでやってもダメな場合、パッケージを管理している台帳(RPMデータベース)自体が壊れているか、プロセスがゾンビ化している可能性があります。
1. プロセスのロック解除
Waiting for process with pid... と出て進まない場合、前のDNFプロセスが裏でフリーズしています。
強制的に終了させます。
# dnf関連のプロセスを探す ps aux | grep dnf # プロセスをキルする(PIDは適宜変更) sudo kill -9 [PID]
また、ロックファイルが残っている場合は削除します。
sudo rm /var/lib/rpm/.rpm.lock
2. RPMデータベースの再構築
RPMの台帳が破損していると、正しい依存関係が計算できません。
以下のコマンドでデータベースを再構築します。
sudo rpm --rebuilddb
AlmaLinux 9(RHEL 9)からは、RPMデータベースが従来のBerkeley DBからSQLiteベースに変更され、破損しにくくなっていますが、それでもディスクフルなどが原因で壊れることはあります。
このコマンドは数分かかることがありますが、終わるまで待ってください。
3. ディスク容量の確認
そもそもディスクがいっぱいで、新しいパッケージを保存できないというオチもよくあります。
df -h
特に /(ルート)や /var パーティションの使用率が100%になっていないか確認してください。
もし100%なら、古いログファイル(/var/log/)などを削除して空き容量を作ります。
まとめ:DNFは怖くない。ログが全てを語っている
お疲れ様でした。
AlmaLinux 9で dnf update ができない場合のトラブルシューティングを網羅的に解説しました。
解決への最短ルート(チェックリスト):
- エラー文を読む: DNS系か、依存関係系かを見極める。
- ネットワーク確認:
ping 8.8.8.8とping google.com。 - キャッシュ削除:
dnf clean allは魔法の言葉。 - IPv4強制:
ip_resolve=4は現代の特効薬。 - リポジトリ変更: ミラーリストからBaseURLへ。
サーバー運用において「アップデート」は避けて通れない作業よ。
トラブルに出会うたびに、「なぜ動かないのか」を突き止めるスキルが身につくわ。
今回の対処法で、コウ君のサーバーが無事に最新の状態に戻ることを祈ってるわ!
無事にアップデートができたら、次は自動更新の設定(dnf-automatic)なども検討して、より堅牢なサーバー運用を目指しましょう!
▼ Linuxサーバー構築を極める ▼
学習用サーバーを立てるなら
「おすすめVPS」
インフラエンジニアへ
「ITエンジニア転職」


コメント