热搜:fiddler git ip ios 代理
历史搜索

解决CentOS8 yum官方源下线后无法使用问题及具体原因分析

游客2024-10-18 12:33:01
目录文章目录
  1. 问题背景
  2. 解决方案
  3. 具体原因分析
  4. 扩展

问题背景

想私有化部署 sentry,但是在使用 yum 时报错,yum list 或 yum 安装任何东西都报错。主要报错信息如下:

CentOS-8 - Base - mirrors.aliyun.com                                       299  B/s | 2.3 kB     00:07    
Errors during downloading metadata for repository 'base':
  - Status code: 404 for https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml (IP: 39.96.118.194)
  - Curl error (7): Couldn't connect to server for http://mirrors.aliyuncs.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml [Failed to connect to mirrors.aliyuncs.com port 80: Connection timed out]
  - Status code: 404 for http://mirrors.cloud.aliyuncs.com/centos/8/BaseOS/x86_64/os/repodata/repomd.xml (IP: 100.100.2.148)
Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

关键信息:Cannot download repodata/repomd.xml: All mirrors were tried。意思是说:无法下载 repodata/repomd.xml,已尝试所有镜像

解决方案

这里其实给大家一个建议,也算是自己的一个心得吧:很多时候我们看到报错,都会习惯性的复制报错信息,然后百度或者谷歌搜索看别人是如何解决的。但是很多时候,问题并不一致,或者说,报错的关键信息复制的不对的话,也很容易就走到岔路上去。很多时候,我建议是好好阅读一下报错信息,了解主要是因为什么报错,然后再去对症下药,有针对性的搜索和过滤更适合的解决方案。

所以呢,其实我最开始没有认真阅读报错信息,想当然的复制了第一行报错:Errors during downloading metadata for repository ‘base’,然后去搜索,最后走了很多弯路,试了网上别人的很多种解决方案,都不生效。最后,静下心来,好好阅读了一下报错全部信息,找到了关键报错:Cannot download repodata/repomd.xml,才发现了问题所在。

所以这里就主要说一下最终解决,其实主要还是官方的问题,详见阿里云官方文档:点击这里

1、原因分析

centos8 项目官方已于 2021 年底停止,相关源已无法使用,所以网上 22 年前的换源教程都已无法使用。

2、如何解决

(1)进入配置文件内,删除所有的.repo 文件(最好是先先备份):

# 进入配置文件夹
cd /etc/yum.repos.d/
# 删除旧的配置文件
rm *.repo
# 输入“y”回车确认

(2)ls 查看下,确保该目录下的.repo 文件已完全删除

注意:必须全部删除,或全部移除备份到别处,否则就算你切换了 yum 源,也还是会报上面的错(因为我就踩了这个坑的)

(3)下载可以用的.repo 文件

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

如果你没有安装 wget,也可以用下面命令:

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

(4)清除缓存,然后再运行 yum makecache 生成缓存

yum clean all
yum makecache

3、如果你是非阿里云 ECS 用户,可能回会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 的信息,不过不影响使用。你可以修改相关的配置:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

Linux 的 sed 命令设置配置文件相关信息,建议了解一下常规使用方式,还是挺好用的

具体原因分析

主要原因就是:镜像库丢了。正常的是有这个 repomd.xml 文件的,比如这个 /centos/8-stream/

解决CentOS8 yum官方源下线后无法使用问题及具体原因分析 1

PS:可以到《阿里云开源镜像目录》查看各版本情况。

比如我们可以去看 CentOS8 的情况,就会看到这样的一行提示:This directory (and version of CentOS) is deprecated. 官方都不推荐了,我们肯定就不能用啦。

扩展

其实我们了解到主要原因就是因为 centos8 的镜像库 repomd.xml 文件丢了,但是比如 centos8-stream 是有的,也就是说我们可以把 yum 源的 repo.xml 里代表 8 的这个 releasever 全部改成 releasever-stream,这样也是可以解决问题的。

如何操作呢?修改 CentOS-Base.repo 文件内容如下:替换 “releasever/” 为 “releasever-stream/”

[root@mo12-0003 ~]# sed -i 's/releasever//releasever-stream//g' /etc/yum.repos.d/CentOS-Base.repo

然后重置缓存即可:

[root@mo12-0003 ~]# yum clean all
[root@mo12-0003 ~]# yum makecache

作者:古兰精