从 2024 年 6 月开始,CentOS 7 的最新源已经停止维护。也就是说,想让新的源配置真正生效,光替换源还不够,还得同步更新配置文件、清理缓存,并把 GPG 验证路径一并修正。通常更推荐直接使用阿里云的 CentOS-7.repo 在线源;如果这个源已经失效,那么就需要把 $releasever 明确改成 7.9.2009,同时将地址切换到 centos-vault 路径。

yum 仓库在 CentOS 7 上不是“改一个地方就生效”的东西,必须同步处理配置文件、缓存、GPG 验证逻辑三者,否则大概率出现 yum repolist 不显示源、yum install 报 404 或 GPG signature 错误。
直接换阿里云在线源(推荐新手)
这是最稳妥的路径,适用于能联网、系统仍可运行 yum 的常规环境。
- 先备份:进入
/etc/yum.repos.d/,用mv *.repo backup/移走所有现有.repo文件,避免冲突 - 下载最新适配的配置:
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo - 注意路径必须是
Centos-7.repo(小写s),不是centos-7.repo—— 阿里云该链接大小写敏感,错一个字母就 404 - 执行
sudo yum clean all && sudo yum makecache,不要跳过clean all,否则旧缓存会干扰新源解析
手动编辑 baseurl 时必须改掉 $releasever
CentOS 7 已经走到 EOL 阶段,当前大多数镜像站——包括阿里云的默认配置——都不再提供实时更新源了,不过 Vault 存档还保留着。要是执行 yum makecache 时一直卡在 base 或 updates,通常问题就出在这里:$releasever 很可能被解析成了 7,但真正需要填写的,其实是更具体的子版本号,比如 7.9.2009。
- 打开
/etc/yum.repos.d/CentOS-Base.repo,把所有baseurl=...行里的$releasever替换为7.9.2009 - 例如原行:
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/→ 改为:baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgkey也要同步改到 vault 路径,比如:gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7保持不变,但若提示 key 找不到,需确认该 URL 是否返回 200
本地 ISO 挂载源常见失败点
离线环境或批量部署时常用挂载 ISO 做本地源,但 file:// 协议极易出错。
- 挂载必须用
-o loop,且路径不能含空格或中文;建议统一用/mnt/cdrom,挂载后ls /mnt/cdrom必须能看到Packages/目录 .repo文件中baseurl必须以file:///开头(三个斜杠),少一个就报 “No module named yum.plugins” 类似错误gpgcheck=0是必须项,ISO 镜像里的 RPM 包不带签名,设为 1 必然失败- 别忘了
enabled=1,否则yum repolist根本不会列出这个源
启用 EPEL 前要确认基础源已就位
epel-release 包本身依赖 centos-release 提供的 GPG key 和仓库元数据。如果基础源没配好,直接装 EPEL 会卡在依赖检查。
- 先确保
yum repolist enabled能列出至少一个非epel的源(比如base或local) - 再运行:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm(注意是https,不是http) - 装完后检查
/etc/yum.repos.d/epel.repo,确认enabled=1,且baseurl指向的是https://mirrors.aliyun.com/epel/7/这类国内镜像(否则仍走国外慢链)
yum 就会静默跳过该仓库,既不报错也不加载。验证时别只看 yum repolist,一定要跑一次 yum install -y tree 看是否真能拉包。