yum install Could not retrieve mirrorlist问题

675 阅读2分钟

问题背景

为了升级gcc, 安装了一下centos-release-scl,导致插入了新的repo文件CentOS-SCLo-scl-rh.repo,之后运行任何yum install xxx命令都会报一下信息,执行卸载也不生效(yum remove centos-release-scl)

安装脚本
sudo yum install centos-release-scl
报错信息:
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-rh
Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-rh error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

问题定位和解决方法

/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo,导致yum源配置问题,修改报错的源其中的enable为0,不扫描即可或者直接删除此配置文件。仅仅保留Base和Epel即可。

image.png

以下是在CentOS系统中,yum源的配置文件遵循特定的扫描规则和格式。


1. 配置文件位置

yum源配置文件通常位于以下目录:

/etc/yum.repos.d/
  • 每个.repo文件都会被yum扫描并加载。
  • 文件名可以自定义,但必须以.repo结尾。

2. 配置文件格式

每个.repo文件包含一个或多个仓库配置块,格式如下:

[repository-id]
name=Repository Name
baseurl=http://mirror.example.com/path/
mirrorlist=http://mirrorlist.example.com/path/
enabled=1
gpgcheck=1
gpgkey=file:///path/to/key
  • [repository-id]:仓库的唯一标识符,不能重复。
  • name:仓库的描述名称。
  • baseurl:仓库的URL地址,可以指定多个baseurl,每行一个。
  • mirrorlist:镜像列表的URL地址,yum会从中选择一个可用的镜像。
  • enabled:是否启用该仓库,1表示启用,0表示禁用。
  • gpgcheck:是否检查软件包的GPG签名,1表示检查,0表示不检查。
  • gpgkey:GPG密钥文件的路径,用于验证软件包签名。

3. 变量替换

yum支持以下变量,可以在配置文件中动态替换:

  • $releasever:CentOS的版本号(如78)。
  • $basearch:系统架构(如x86_64)。
  • $infra:基础设施类型(如containermetal)。

例如:

baseurl=http://mirror.example.com/centos/$releasever/os/$basearch/

4. 优先级规则

  • 如果同时指定了baseurlmirrorlistyum会优先使用mirrorlist
  • 如果mirrorlist不可用,yum会回退到baseurl

5. 缓存机制

  • yum会缓存仓库的元数据,默认存储在:
    /var/cache/yum/
    
  • 可以使用以下命令清理缓存:
    yum clean all
    

6. 配置文件扫描规则

  • yum会扫描/etc/yum.repos.d/目录下的所有.repo文件。
  • 如果多个仓库的repository-id相同,yum会使用最后一个加载的配置。
  • 如果某个仓库配置错误(如无效的URL或格式错误),yum会跳过该仓库并继续加载其他仓库。

7. 调试配置

  • 使用以下命令检查yum加载的仓库:
    yum repolist all
    
  • 使用以下命令测试仓库是否可用:
    yum --disablerepo=* --enablerepo=repository-id makecache
    

8. 最佳实践

  • 使用可靠的镜像源(如阿里云、腾讯云)。
  • 为每个仓库添加failovermethod=priority,以便在镜像不可用时自动切换。
  • 定期清理yum缓存,确保获取最新的元数据。