LoginSignup
70
23

More than 1 year has passed since last update.

CentOS 8でyum/dnfに失敗! Failed to download metadata for repo 'AppStream'

Last updated at Posted at 2022-02-17

1. 突然のdnf/yumエラー

昨年(2021年)に構築したCentOS 8でyum/dnfを実行しようとしたところ、次のエラーが発生した。

# dnf install nc
CentOS-8 - AppStream                            105  B/s |  38  B     00:00
Error: Failed to download metadata for repo 'AppStream': Cannot prepare internal
 mirrorlist: No URLs in mirrorlist

あれ、yum/dnfが効かない!

CentOS 8が2021年末にサポート切れになったのは記憶も新しい。筆者もCentOS 8ネタを何本か書いていたにもかかわらず、パッケージのインストールに失敗して焦ってしまった。この対処法を説明したい。

1-1. 対象環境

  • CentOS 8

2. 原因は何か?

このようなエラーが発生した原因は、サポート切れでミラーサイトが停止したからだ。エラーメッセージにも「No URLs in mirrorlist」と表示されている。つまり「CentOS 8のサポート停止」は次の2つのことを意味している。

  • 今後新しいアップデートパッケージを提供しない
  • ミラーサイトが停止する

3. 暫定対処に失敗

それならCentOS Streamリポジトリからwgetしちゃえと思ったら、wgetが入っていない。うーむ。

$ wget http://hogehoge
bash: wget: command not found...

残された選択肢は、次の2つ。

  1. wgetなど最低限必要なパッケージを他サーバからscpで送り込み、以降はwgetで取得する
  2. CentOS Streamに移行するか、AlmaLinuxやRocky Linux、Oracle LinuxなどのRHELクローンに移行する

1の方法は力技。自力で依存性を解決しなければならず、パッケージ数が多くなるとしんどい。

趣味で使っている環境だったこともあり、

いっそのことCentOS Streamに移行してしまおう

と、公開されている次の移行手順を実行すると、これまたエラーで実行できず。

CentOS-Streamへの移行手順
# dnf install centos-release-stream
# dnf swap centos-linux-repos centos-stream-repos
# dnf distro-sync

リポジトリにアクセスできないので、この手順通りではできないことはわかるだろう。だけれどcentos-release-streamパッケージをwgetして、ローカルインストールすればいいと思っていたら、依存関係でcentos-release-streamをインストールできず。クー。

4. 根本解決策は?

解決策は、参照先のリポジトリをミラーサイトからhttp://vault.centos.orgに変更すること。つまり/etc/yum.repos.d/CentOS*repoファイルの以下のように変更する。

一か所目
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
↓ コメントアウト
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
二か所目
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
↓ baseurlのコメントを外して、mirrorをvaultに置換
baseurl=http://vault.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/

修正後のファイル全体の内容は次のとおり。

修正後:/etc/yum.repos.d/CentOS-Base.repo
[BaseOS]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=http://vault.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
修正後:/etc/yum.repos.d/CentOS-AppStream.repo
[AppStream]
name=CentOS-$releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=http://vault.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

手で修正するのが面倒な人は、次のコマンドで一括置換できる。

sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror/baseurl=http:\/\/vault/g' /etc/yum.repos.d/CentOS-*repo

まあ「根本解決か」と聞かれると微妙で、根本解決はAlmalinuxやCentOS Streamに移行することなのだけれど...。今回はCentOS 8のサポート切れは痛いほどわかっていたのに、それに戸惑ったという話でした。

70
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
23