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つ。
- wgetなど最低限必要なパッケージを他サーバからscpで送り込み、以降はwgetで取得する
- CentOS Streamに移行するか、AlmaLinuxやRocky Linux、Oracle LinuxなどのRHELクローンに移行する
1の方法は力技。自力で依存性を解決しなければならず、パッケージ数が多くなるとしんどい。
趣味で使っている環境だったこともあり、
いっそのこと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/
修正後のファイル全体の内容は次のとおり。
[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
[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のサポート切れは痛いほどわかっていたのに、それに戸惑ったという話でした。