问题现象
在 Linode 主机上使用 yum 安装软件包时,出现无法获取仓库元数据(repomd.xml)的错误。错误信息通常表现为无法解析 CentOS 官方镜像或 Linode 内部镜像的域名,例如:
Loaded plugins: fastestmirror
Setting up Install Process
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=extras&infra=stock error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=updates&infra=stock error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
http://mirrors.linode.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.linode.com'"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
问题原因
此错误通常由以下一个或多个原因导致:
- DNS 解析失败:系统无法解析 mirrorlist.centos.org 或 mirrors.linode.com 等域名。
- 网络配置问题:防火墙(如 iptables)规则可能阻止了 DNS 查询或 HTTP/HTTPS 流量。
- 系统 DNS 设置错误:/etc/resolv.conf 文件中的 DNS 服务器配置不正确或不可用。
- CentOS 6 生命周期结束:原文示例为 CentOS 6,该系统已于 2020 年 11 月结束生命周期(EOL),官方镜像已移至 vault.centos.org,可能导致默认镜像源失效。
解决方案
1. 检查并修复 DNS 配置
首先测试域名解析是否正常:
ping -c 4 google.com
nslookup mirrorlist.centos.org
如果无法解析,需要检查并编辑 /etc/resolv.conf 文件,确保配置了有效的 DNS 服务器。对于 Linode 主机,可以添加以下公共 DNS:
nameserver 8.8.8.8
nameserver 8.8.4.4
2. 检查防火墙设置
临时停止 iptables 防火墙以确认是否为防火墙规则导致:
service iptables stop # CentOS 6
# 或
systemctl stop firewalld # CentOS 7/8
如果停止防火墙后 yum 工作正常,则需要调整防火墙规则,放行 DNS(端口 53)和 HTTP/HTTPS(端口 80、443)的出站流量。
3. 更新或替换镜像源(针对旧系统)
对于已结束生命周期的 CentOS 版本(如 CentOS 6),需要将基础镜像源替换为归档地址(vault.centos.org)。编辑对应的 .repo 文件(如 /etc/yum.repos.d/CentOS-Base.repo),将 mirrorlist 和 baseurl 中的 mirror.centos.org 替换为 vault.centos.org。
例如,将:
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
改为:
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
4. 清理 yum 缓存并重试
执行以下命令清理缓存并重新尝试:
yum clean all
yum makecache
总结
遇到“Cannot retrieve repository metadata”错误时,应首先排查 DNS 解析和网络连通性问题。对于旧版操作系统,还需考虑镜像源是否已失效并相应更新。建议将系统升级至受支持的版本(如 CentOS 7/8 或 AlmaLinux/Rocky Linux),以获得持续的安全更新和软件支持。