当前位置: 当前位置:首页 > 时尚 > centos7一键换源脚本正文

centos7一键换源脚本

作者:时尚 来源:探索 浏览: 【大 中 小】 发布时间:2026-10-17 06:23:20 评论数:

CentOS 7 在 2024 年 6 月 30 日彻底停止维护,键换官方源直接下线。源脚你如果现在手里还有一台老 CentOS 7 机器,键换执行 yum update 大概率会看到一堆 404。源脚这不是键换网络问题,是源脚源地址已经没了。换源是键换唯一出路。

我上周帮朋友处理了一台跑了六年的源脚 CentOS 7 服务器,上面还挂着几个老 PHP 项目。键换他跟我说 yum 完全用不了,源脚我登上去一看,键换/etc/yum.repos.d/ 下面还是源脚默认的 mirrorlist 配置,指向 mirror.centos.org,键换那个域名现在返回 404。源脚手动换成阿里云的键换 vault 源,五分钟搞定。

为什么是 vault 而不是普通镜像源

CentOS 7 停止维护后,所有包被移到了 vault.centos.org。阿里云、腾讯云、华为云这些国内厂商同步了 vault 的内容,但路径变了。普通镜像源的 centos/7/ 目录已经清空,你得指向 centos-vault/7/ 才行。很多人换源失败就是因为路径没改对。

另一个坑是 GPG 密钥。CentOS 7 的签名密钥在 2024 年后过期了,换源后如果还开着 gpgcheck=1,yum 会报密钥验证失败。要么导入新的密钥,要么临时关掉检查。我一般建议直接关掉,毕竟 vault 源的内容本身是完整的,校验意义不大。

脚本干了什么

一键换源脚本的核心逻辑就三步:备份原有 repo 文件、写入新的 vault 源配置、清理缓存。听起来简单,但细节决定成败。

备份那步不能省。/etc/yum.repos.d/ 里可能有你自己加的第三方源,比如 epel、nginx、mysql 的 repo。脚本如果直接 rm -rf 全删了,后续装软件会出问题。我的做法是只处理 CentOS-Base.repo、CentOS-AppStream.repo 这些系统自带的文件,其他的不动。

写入新配置时,baseurl 要同时覆盖 os、updates、extras 三个仓库。CentOS 7 还有 centosplus 和 fasttrack,但一般用不到,脚本里可以注释掉。每个仓库的 baseurl 格式是:

https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/

注意版本号要写死 7.9.2009,因为 vault 里是按版本存放的。用 $releasever 变量会解析成 7,路径就错了。

脚本内容

下面是我自己用的版本,阿里云源,关掉 gpgcheck,带备份:

#!/bin/bash # CentOS 7 一键换源脚本 # 适用:CentOS 7.x 全版本 # 源:阿里云 vault set -e REPO_DIR="/etc/yum.repos.d" BACKUP_DIR="/etc/yum.repos.d/backup_$(date +%Y%m%d_%H%M%S)" echo "开始换源..." # 备份 mkdir -p "$BACKUP_DIR" cp "$REPO_DIR"/CentOS-*.repo "$BACKUP_DIR"/ 2>/dev/null || true echo "原配置已备份到 $BACKUP_DIR" # 写入新源 cat > "$REPO_DIR/CentOS-Base.repo" <<'EOF' [base] name=CentOS-7 - Base - Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck=0 enabled=1 [updates] name=CentOS-7 - Updates - Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck=0 enabled=1 [extras] name=CentOS-7 - Extras - Aliyun baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ gpgcheck=0 enabled=1 EOF # 清理缓存 yum clean all yum makecache echo "换源完成,当前源:" yum repolist 

把这段存成 change_repo.sh,chmod +x 后直接跑。脚本里用了 set -e,任何一步出错都会停,不会把系统搞成半吊子状态。

几个实际会遇到的问题

跑完脚本后 yum makecache 可能比较慢,因为 vault 源的响应速度不如原来的 mirrorlist。阿里云已经算快的了,腾讯云也差不多。如果你在海外,可以考虑用 vault.centos.org 官方地址,但国内访问不稳定。

另一个问题是 $basearch 变量。在 x86_64 机器上没问题,但如果是 ARM 或者 i686,路径里的 $basearch 会被替换成对应的架构名。vault 里这些架构的包都有,不用改。

还有 EPEL 源。CentOS 7 的 EPEL 也停止更新了,但归档还在 archives.fedoraproject.org。如果你之前装了 EPEL,换完系统源后 EPEL 还是报错,得单独处理。把 /etc/yum.repos.d/epel.repo 里的 mirrorlist 注释掉,baseurl 改成:

https://archives.fedoraproject.org/pub/archive/epel/7/$basearch/

最后说一句,CentOS 7 已经死了,换源只是让它多喘口气。生产环境该迁移就迁移,Rocky Linux 或者 AlmaLinux 都是平滑替代方案。这台机器我朋友也就是再撑几个月,等新服务器到位就下线。换源脚本解决的是眼前问题,不是长久之计。