yum源无法使用,并报404 解决办法

问题背景

修改yum源配置文件,删除yum源,又重新在另一台主机上复制了无问题的yum配置文件,导致yum源无法使用。

yum报错如下

[root@java152 ~]# yum makecache
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.tencentyun.com
 * extras: mirrors.tencentyun.com
 * updates: mirrors.tencentyun.com
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
#####报错信息是%24releasever 和404,意思就是无法解析腾讯云的$releasever变量。
To address this issue please refer to the below wiki article
https://wiki.centos.org/yum-errors
If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
base                                                                                                         | 1.0 kB  00:00:00     
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno -1] Error importing repomd.xml for base: Damaged repomd.xml file
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30000 milliseconds')
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
正在尝试其它镜像。
http://mirrors.tencentyun.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
正在尝试其它镜像。
 One of the configured repositories failed (CentOS-$releasever - Base - mirrors.aliyun.com),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:
     1. Contact the upstream for the repository and get them to fix the problem.
     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).
     3. Run the command with the repository temporarily disabled
            yum --disablerepo=base ...
     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:
            yum-config-manager --disable base
        or
            subscription-manager repos --disable=base
     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:
            yum-config-manager --save --setopt=base.skip_if_unavailable=true
failure: repodata/repomd.xml from base: [Errno 256] No more mirrors to try.
http://mirrors.aliyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno -1] Error importing repomd.xml for base: Damaged repomd.xml file
http://mirrors.tencentyun.com/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30000 milliseconds')
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 30001 milliseconds')

1.查看DNS没有问题,且主机可以访问到外网。
在这里插入图片描述
2.重装yum服务,还是不能用。

yum-3.4.3-161.el7.centos.noarch.rpm
yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
 命令:rpm -ivh yum-3.4.3-161.el7.centos.noarch.rpm --nodeps --force           //nodeps 强制安装    force 避免依赖
 命令:rpm -ivh yum-metadata-parser-1.1.4-10.el7.x86_64.rpm --nodeps --force
 命令:rpm -ivh yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm --nodeps --force

最终解决方法

上边一直提示 404 错误,然后我直接访问
http://mirrors.tencentyun.com/centos/$releasever/os/x86_64/repodata/repomd.xml
发现这个地址打不开

将腾讯yum源仓库的$releasever变量都改为7

命令:vim /etc/yum.repos.d/Centos-Base.repo
vim /etc/yum.repos.d/Centos-Epel.repo

命令::%s/$releasever/7/g #文本编辑器中的替换命令

在这里插入图片描述
修改完之后执行

# yum  makecache                         # OK

知识扩展:

问题分析一下
1、对比.repo文件和报错信息,可以发现$releasever变量没有被系统识别,在连接网络yum源的时候,变成了%24releasever。

2、查询资料得知,yum中的变量$releasever是由/etc/yum.conf中的distroverpkg定义的。centos-release为一个rpm包,所谓“distroverpkg=centos-release”的意思,其实是将 $releasever设置为centos-release 这个RPM包的版本号;打开yum的配置文件
vim /etc/yum.conf
在这里插入图片描述
通过rpm可以查询到改软件包并没有被安装:
在这里插入图片描述

解决思路

由于centos-release依赖关系比较复杂,约40个左右依赖包,我们可以修改yum源文件,把$releasever全部替换为7(上边已操作),修改以下爱两个配置文件。

# vim /etc/yum.repos.d/Centos-Base.repo   # 修改腾讯内部yum源Base仓库
# vim /etc/yum.repos.d/Centos-Epel.repo    # 修改腾讯内部yum源EPEL源仓库

在这里插入图片描述

此时yum可以正常使用,通过yum安装centos-release

命令:yum -y install centos-release

下载完centos-release源之后,再将base和epel源的7改回$releasever。yum makecache制作缓存yum即可恢复使用。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值