马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
CentOS 的软件安装靠 yum 走仓库,仓库地址就写在 repo 文件里。CentOS-Base.repo 是其中最核心的一个,里面的 baseurl 和 mirrorlist 两个选项控制着“去哪儿下载包”,但两者行为差别不小,很多人换源失败其实是因为没搞清谁生效。本文把这两个选项拆开讲,并给出一套可执行的换源步骤。
一、repo 文件在哪里
CentOS 7 上主仓库文件是 /etc/yum.repos.d/CentOS-Base.repo,其余还有 CentOS-Update.repo、CentOS-Extras.repo 等。查看当前生效的仓库列表:
yum repolist all
改之前先把原文件留一份:
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
二、baseurl:直接指向某一个仓库地址
baseurl 指定一个或多个具体的 URL,指向仓库的实际位置。设了它,yum 会直接从这个(或这些)地址拉包。
- 举例:
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/,装软件时就去这个地址找。
- 优点:地址明确、可控,指定一个快而稳的镜像站点后速度就稳定了;排查问题时也容易定位。
- 缺点:镜像慢或挂了就直接影响下载;选择权在你手上,需要自己判断哪个站快。
三、mirrorlist:先拿列表再挑最快的一个
mirrorlist 指向的是一个能返回多个镜像地址的列表地址,yum 先去问它拿到一堆 URL,再从中挑一个。
- 举例:
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=vagrant,yum 从这个地址取回镜像列表后自己选。
- 优点:能自动挑相对近的镜像,理论上速度更好,也天然有冗余。
- 缺点:一旦 mirrorlist 服务器不可用、或者列表里的站点都连不上,安装会直接失败;多一次请求也多一处故障点。
四、两者同时写会怎样
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=vagrant
同一段里两个都写时,baseurl 通常覆盖 mirrorlist,也就是说以 baseurl 为准。想让 mirrorlist 生效,往往要把它注释掉,或者反过来只保留一个。
五、换源实操:以阿里云镜像为例
- 备份原有 repo 文件(上面那条 cp 已做)。
- 清空
/etc/yum.repos.d/ 里不再需要的 repo,避免多个源互相抢。
- 写入新的 CentOS-Base.repo:
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.aliyun.com/centos/7/updates/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
写的时候注意几点:
$releasever 会被替换成系统版本号,但有些镜像站路径不含这一层,CentOS 7 直接写 7 更稳。
- 云厂商的 ECS 上,很多时候镜像源已经做了内网适配(比如
mirrors.cloud.aliyun.com 的内网域名),优先用内网地址能省下大量公网带宽。
- EOL 之后的 CentOS 7 / 8,官方源可能已经下线,需要改用
vault 归档源,换源时留意 404。
六、改完必须重建缓存
sudo yum clean all
sudo yum makecache fast
这一步不能省。yum 会缓存仓库元数据的索引,换了地址不清缓存, yum 还在拿旧地址去请求,表现就是“换了源却没变快”或者报一堆 404。
七、怎么判断换源成功了
sudo yum repolist all
sudo yum --showduplicates list list
如果看到的仓库地址已经是新镜像,说明生效;如果不确定,用 yum -v install 某个包 看它实际去哪里下载。
八、常见坑
- 注释掉 mirrorlist 但没留空行:TOML/INI 格式对空行不敏感,但每行末尾多余的空格和中文全角冒号会导致解析失败,报错通常是 “Cannot find a valid baseurl”。
- gpgcheck=1 但 gpgkey 路径不对:密钥文件不在
/etc/pki/rpm-gpg/ 下就会校验失败,换源时一并处理密钥,或临时改成 gpgcheck=0 但需要知晓风险。
- 同时留着多个第三方源:EPEL、Remi、Docker 源一起指向同一个旧镜像,元数据的 basearch 路径不一致就会冲突。
- CentOS 8 流(Stream)路径不同:Stream 的仓库结构跟点版本不一样,直接用 7 的 URL 会 404,需要单独查对应镜像站的目录。
九、总结
baseurl 和 mirrorlist 的选择其实很简单:追求可控、确定就去用某个镜像站,写 baseurl;希望自动挑最近的就去用 mirrorlist。两者同时出现时以 baseurl 为准。换源之后 yum clean all 加 makecache 是必经步骤,跳过它等于没改。真正花时间的是排查 404 和密钥校验,记住“看 repolist 输出的实际地址”这一步,绝大部分问题都能当场确认方向对不对。
qidao123.com企服评测-应用市场 编辑提示 |