问题背景
为了升级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即可。
以下是在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的版本号(如
7或8)。 - $basearch:系统架构(如
x86_64)。 - $infra:基础设施类型(如
container或metal)。
例如:
baseurl=http://mirror.example.com/centos/$releasever/os/$basearch/
4. 优先级规则
- 如果同时指定了
baseurl和mirrorlist,yum会优先使用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缓存,确保获取最新的元数据。