配置yum源需完成三步闭环:yum clean all清缓存、baseurl/mirrorlist指向有效地址、yum makecache重建元数据;漏任一步易致“no package found”错误。

直接说结论:配置 yum 源不是改一个文件就完事,关键在三步闭环——yum clean all 清旧缓存、baseurl 或 mirrorlist 指向真实可用地址、yum makecache 重建元数据。漏掉任意一步,yum install 都可能报 No package found 或 Cannot retrieve metalink。
怎么判断当前系统用的是哪个 yum 版本和发行版
不同发行版的 repo 文件写法差异很大,CentOS 7/8、RHEL 8/9、AlmaLinux、Rocky Linux 的 $releasever 替换值、GPG 校验路径、默认启用仓库名都不一样。不先确认,照搬网上的 repo 配置大概率失败。
- 运行
cat /etc/redhat-release或rpm -q centos-release看基础版本 - 运行
dnf --version或yum --version判断底层是 yum 还是 dnf(RHEL 8+ 默认用 dnf,但yum命令仍是软链) - 运行
uname -m确认架构,$basearch在 x86_64 系统里就是x86_64,别写成amd64或留空
网络源配置时 baseurl 和 mirrorlist 到底该选哪个
mirrorlist 看起来更智能,但实际生产环境建议优先用 baseurl。因为 mirrorlist 依赖外部 HTTPS 服务返回镜像列表,一旦该服务不可达(比如防火墙拦截、DNS 故障),yum 就会卡住或直接报错;而 baseurl 指向固定 URL,可控性强。
- 国内推荐用清华、中科大、阿里云源,例如 CentOS 7 的
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/$basearch/ - 若必须用
mirrorlist,记得把metalink地址里的https改成http(部分内网环境不支持 TLS 1.2 以下协议) -
enabled=1必须显式写出,不能省略;gpgcheck=0仅限测试环境,生产环境务必设为1并确保gpgkey路径存在且可读
本地 ISO 挂载源为什么总是提示 “No packages found”
根本原因不是挂载失败,而是 baseurl=file:///mnt/cdrom 指向的目录下缺少 repodata 子目录。很多用户直接挂载 ISO 后就去写 repo 文件,但没意识到:标准 ISO 镜像里的 repodata 只存在于根目录或 Packages/ 同级位置,而某些精简版 ISO 或自制镜像压根没生成它。
- 挂载后先执行
ls /mnt/cdrom/repodata,确认该目录存在且含repomd.xml - 如果不存在,需手动运行
createrepo -v /mnt/cdrom/Packages/(需提前yum install createrepo) - 挂载命令要用
mount -o ro,loop /path/to/CentOS-7-x86_64-DVD.iso /mnt/cdrom,-o ro不可少,否则yum会拒绝读取 - 开机自动挂载要写进
/etc/fstab,格式示例:/dev/sr0 /mnt/cdrom iso9660 ro,noauto,loop 0 0,注意noauto避免启动卡死
repo 文件放错位置或重名会导致什么后果
/etc/yum.repos.d/ 是唯一有效路径,文件名必须以 .repo 结尾,且不能有空格或中文。多个 repo 文件共存时,yum 会全部加载,但若两个文件里定义了同名仓库(如都叫 [base]),后加载的会覆盖前一个——这个顺序由文件名 ASCII 码决定,不是按修改时间。
- 备份旧 repo 建议用
mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ - 新建 repo 文件名推荐带发行版和源类型,例如
centos7-tuna.repo,避免用1.repo或new.repo - 写完立刻执行
yum repolist enabled,确认只看到你期望启用的仓库,数量对不上说明有文件被误启用了
最容易被忽略的是 yum clean all 的作用范围:它清的是 /var/cache/yum 下所有 metadata 缓存,但不会删掉已下载的 rpm 包。如果之前用过别的源,残留的旧 repodata 会干扰新源解析,所以每次换源都必须执行这一步——哪怕你刚重装系统。











