CentOS 8の「Failed to download metadata for repo 'appstream'」エラー解決方法
問題の概要
CentOS 8でyum
コマンドを使用してパッケージをインストールしようとすると、以下のエラーが発生することがあります:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
このエラーはDocker環境、AWS EC2インスタンス、WSL(Windows Subsystem for Linux)など、様々な環境で発生します。
原因
重要
このエラーの根本的な原因は、CentOS 8が2021年12月31日でサポート終了(EOL) となったことにあります。公式ミラーサイトのURLが変更され、従来のリポジトリが利用できなくなったため、パッケージのダウンロードやメタデータの取得に失敗します。
解決方法
方法1: リポジトリURLの修正(一時的な解決策)
最も一般的な解決方法は、リポジトリ設定ファイルを修正して、アーカイブされたミラーサイトを指すように変更することです。
# リポジトリ設定ファイルがあるディレクトリに移動
cd /etc/yum.repos.d/
# mirrorlistの行をコメントアウト
sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# baseurlをvault.centos.orgに変更
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 更新を実行
sudo yum update -y
FROM centos
# リポジトリ設定を修正
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 必要なパッケージをインストール
RUN yum -y install java
CMD /bin/bash
方法2: CentOS Streamへの移行(推奨)
CentOS公式が推奨する方法は、CentOS Linux 8からCentOS Stream 8に移行することです。
# CentOS Streamリポジトリに切り替え
dnf --disablerepo '*' --enablerepo extras swap centos-linux-repos centos-stream-repos
# パッケージの同期
dnf distro-sync
# GPGキーの取得(必要な場合)
wget 'http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-3.el8.noarch.rpm'
sudo rpm -i 'centos-gpg-keys-8-3.el8.noarch.rpm'
# リポジトリの切り替え
dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos
# パッケージのアップグレード
sudo dnf distro-sync
メリット
- 公式サポートを受けることができる
- 最新のセキュリティアップデートが適用される
- 将来の互換性が確保される
方法3: リポジトリの無効化(特定の場合)
特定のリポジトリのみを使用したい場合、他のリポジトリを無効化することもできます。
# 特定のリポジトリのみを有効化してパッケージインストール
dnf --disablerepo=* --enablerepo=base,extras,updates install [パッケージ名]
選択ガイド
方法 | 使用場面 | 長所 | 短所 |
---|---|---|---|
リポジトリURL修正 | 緊急の対応、短期間の利用 | 簡単で迅速に対応可能 | 長期的なサポートなし |
CentOS Stream移行 | 長期的な利用、本番環境 | 公式サポート、継続的な更新 | 移行作業が必要 |
リポジトリ無効化 | 最小限のパッケージのみ必要 | シンプルな解決策 | 機能が制限される |
注意点
重要
- リポジトリURLを変更する方法は一時的な解決策であり、セキュリティアップデートが提供されません
- 本番環境では、CentOS Streamへの移行や他のRHEL互換ディストリビューション(Rocky Linux、AlmaLinuxなど)への移行を検討してください
まとめ
CentOS 8のリポジトリエラーはサポート終了による必然的な問題です。短期間的にはリポジトリURLの修正で対応可能ですが、長期的にはCentOS Streamへの移行または他のサポートされているディストリビューションへの移行を強く推奨します。
どの方法を選択する場合も、システムの要件とセキュリティニーズを慎重に評価してください。