centos下yum镜像源失效的问题

想要在centos7虚拟机下安装个docker尝试,结果在配置完虚拟机网络之后使用 yum install docker 安装出错。错误信息是:

cannot find a valid baseurl for repo base/7/x86_64

排查了下发现网络配置没有问题(ping命令),应该是镜像源或者配置出了问题。进入到/etc/yum.repo.d目录下查看文件:

cd /etc/yum.repos.d
ls 

/etc/yum.repo.d
yum 是根据CentOS-Base.repo中的配置的url来进行请求下载的。之前尝试过原本的镜像源也是有点问题,所以这里将它替换为国内镜像源(163,阿里,搜狐等等都挺快的)。看看163的镜像源文件网站:
在这里插入图片描述
yum就是根据CentOS-Base.repo中的几个baseurl,从这里的目录下载的。例如我们想要更换成阿里的镜像源,可以进入/etc/yum.repos.d,先给原本的CentOS-Base.repo做个备份

mv CentOS-Base.repo CentOS-Base.repo.backup

下载 http://mirrors.aliyun.com/repo/ 下对应centos版本对应的repo文件,可以使用wget命令:

wget http://mirrors.aliyun.com/repo/Centos-7.repo

虚拟机也可以使用SSH secure,先下载到windows然后再拉到虚拟机上面。然后将下载的repo替换原来掉原来的CentOS-Base.repo

mv /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo

清空yum缓存以及运行 yum makecache生成缓存

yun clean all
yum makecache

到这里会发现在生成缓存的时候出现错误,错误原因是在访问镜像源文件网站的一个xml配置文件的时候发生了404错误:

http://mirrors.163.com/centos/7/os/x86_64/repodata/repomd.xml: 404 Not Fount

一开始不知道是什么原因,然后上网找看到很多帖子说是repo里面一个$releasever变量的问题,说把里面url中的这个变量改成具体的centos 版本号就可以。但是日志里面打印出来的请求url已经是将变量解析成centos版本号的了,所以应该不是这个地方出现了问题。所以我就直接上镜像源网址找这个xml文件,发现它是可以访问的。
centos中请求发生404的xml页面
然后检查了一下请求发现是传输协议的问题。 在浏览器发现访问镜像源的某些文件必须是使用https协议才可以,http协议是无法访问的。
https访问
http访问
检查发现从网上下载的repo文件中的url都是使用http来访问这个xml的,所以在yum makecache的时候一直是404,而使用浏览器访问这个文件却不会出现问题。这样就简单了,将repo中的http都改为https就可以了。
修改CentOS-Base.repo
更改后不发生错误
下载正常。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐