古い CentOS で yum upgrade
などを実行した際、YumRepo Error: ... (略) ... Cannot find a valid baseurl for repo: base
のようなエラーが発生してしまった場合の対処法です。
ググれば情報はたくさん見つかるのですが、色んな情報が錯綜していて分かりにくかったため、改めてまとめておきます。
記事は CentOS 6.10 を対象に書いていますが、他のバージョンでも応用が効くと思います。
エラー内容
Google 等から検索してくる人のために、エラー文を長めにコピペしておきます。
$ yum upgrade
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
原因
Yum リポジトリの設定で、[base]
に書かれたデータ取得先 URL がおかしいよ…と教えてくれています。
CentOS 6 系 は 2020年11月30日にサポートが終了されたため、デフォルトの設定が使えなくなってしまったわけです。
対応
上記から適切な URL を探し、設定しなおせば良いです。
なお、この手の URL で vault
というサブドメインが付いていたら、サポートが終わったデータのスナップショットを保管している場所…みたいな意味になります。
例えば、私の大好きなゲーム Fallout シリーズに登場する地下核シェルターに Vault○○ という名前が付いていたり、地下にあるワイン貯蔵庫の事を Wine Vault と呼んだりもしますね。
具体的な修正方法
Yum リポジトリの設定は、/etc/yum.repos.d/
以下にあります。
[base]
の URL は CentOS-Base.repo
というファイルに記述されていますので、元の URL を #
でコメントアウトし、適切な URL を追記します。
$ vi /etc/yum.repos.d/CentOS-Base.repo
[base]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
補足
なお、$releasever
や $basearch
といった変数の意味については、yum info centos-release
の結果を見るのが手っ取り早いです。
$ yum info centos-release
Name : centos-release
Arch : x86_64
Version : 6
From repo : base
より詳細は、適当な Red Hat 系のドキュメントを参考にしてください。
つまり、修正後の http://vault.centos.org/centos/$releasever/os/$basearch/
は、私の環境であれば http://vault.centos.org/centos/6/os/x86_64/ と同じ意味になり、アクセスすると実際にデータ存在する事が分かります。
逆に、修正前の http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
は、私の環境であれば http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock と同じ意味になり、アクセスすると無効である事が分かります。
修正内容まとめ
修正後にもう一度コマンドを実行すると、今度は Error: Cannot find a valid baseurl for repo: updates
といったエラー内容に変化すると思います。
この場合、[updates]
の URL もおかしいという事になりますが、1 つ 1 つ確認&修正するのは手間だと思いますので、まとめて書いておきます。
$ vi /etc/yum.repos.d/CentOS-Base.repo
[base]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
[updates]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
[extras]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
[centosplus]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
[contrib]
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
# baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
baseurl=http://vault.centos.org/centos/$releasever/contrib/$basearch/
追加の修正
もし、上記の修正を行ってもなお Error: Cannot find a valid baseurl for repo: centos-sclo-rh
といったエラーが出る際は、[centos-sclo-rh]
の記述があるファイルを探して同様に修正します。
$ vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
# baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/rh/
# mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-rh
baseurl=http://vault.centos.org/centos/$releasever/sclo/$basearch/rh/
Error: Cannot find a valid baseurl for repo: centos-sclo-sclo
というエラーであれば、[centos-sclo-sclo]
の記述があるファイルを探して同様に修正します。
$ vi /etc/yum.repos.d/CentOS-SCLo-scl.repo
[centos-sclo-sclo]
# baseurl=http://mirror.centos.org/centos/6/sclo/$basearch/sclo/
# mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-sclo
baseurl=http://vault.centos.org/centos/$releasever/sclo/$basearch/sclo/
エラーが出なくなるまで修正すれば OK です。