CentOS 6.10 换阿里源全攻略:从 yum 卡死到镜像配置实操

发布时间:2026/10/2 0:08:08
CentOS 6.10 换阿里源全攻略:从 yum 卡死到镜像配置实操
前阵子翻出一台快吃灰的 CentOS 6.10 服务器准备把上面的旧系统数据导出来结果刚敲下yum install就开始卡在 0%进度条死活不动最后直接超时报错。一开始我以为是网络波动试了几次都一样后来才反应过来这台机器的 yum 源还指着官方 mirrorlist.centos.org而 CentOS 6 早在 2020 年底就停止维护了官方仓库下架后老系统如果还想装软件最省事也是国内最熟的路子就是把源切成阿里源。这篇就把我整个换源过程写下来重点放在 CentOS 6.10 的完整操作上毕竟这是最近大家搜得最热的关键词。顺手也整理一下 pip、npm、Maven、Docker、apt 这些常用软件的阿里源地址和配置方式给还在跟老系统、慢镜像死磕的朋友做个参考。1. 为什么宁可换源也不硬等官方仓库1.1 直连官方源的真实体验很多人第一次意识到需要换源都是被卡进度条教会做人的。yum、apt 这类包管理器下载元数据时如果网络不好表现就是0% [running]挂在那里或者反复重试后丢出一句Connection timed out。原因不复杂CentOS 官方仓库服务器主要部署在海外国内直连要过国际链路晚高峰尤其明显。yum 是个对网络抖动很敏感的机制它要先拉 repomd.xml、再校验仓库元数据每包一次网络往返掉了就得从头再试。相比下载 RPM 包本身这种频繁的小请求反而最容易卡死。1.2 阿里源到底是什么很多人把阿里源当成一个神秘的东西其实它的本质就是官方仓库的国内镜像副本。阿里云镜像站mirrors.aliyun.com通过定期同步机制从上游官方仓库拉取文件再放到自己的 CDN 节点上分发。你在国内访问它链路短、带宽大、丢包少速度和稳定性自然好很多。这里有个容易误解的点镜像站不是盗版源也不是单独维护一套软件包它和你从官方装到的软件包内容完全一致只是下载位置换成了国内。同步周期通常在小时级到天级对绝大多数软件来说新鲜度完全够用。所以换源这件事的适用范围很明确国内服务器、本地开发环境、公司内网主机只要是访问官方源费劲的地方都值得换。尤其对 CentOS 6.10 这类官方已经停更、仓库被下架的系统来说换源不是优化网络体验而是能不能继续装软件的生存问题。2. CentOS 6.10 更换阿里源完整实操停维系统的自救方案2.1 先认清状态为什么 6.10 必须走 centos-vaultCentOS 6 在官方停止维护后原本的/centos/6/仓库路径就不再接收新的更新官方把所有归档内容挪到了 vault 目录。阿里云镜像站同样保留了centos-vault这个归档路径所以 CentOS 6.10 换源时baseurl 不能写常规的mirrors.aliyun.com/centos/6/...而要写mirrors.aliyun.com/centos-vault/6.10/...。很多教程没提这一茬直接让用户把 URL 里的官方域名换成阿里云域名结果老系统换上之后依然 404。原因就是路径层级对不上。动手之前先确认系统版本cat /etc/redhat-release如果输出是CentOS release 6.10 (Final)那下面的操作可以直接照抄。如果是 6.9、6.8把路径里的 6.10 改成对应的版本号即可。2.2 备份原 repo 文件回滚的底牌换源第一步不是删文件而是先备份。我习惯建一个专门的备份目录把/etc/yum.repos.d/下所有 repo 文件挪进去而不是直接改动原文件。这样万一换源失败或者镜像站路径又变了还能快速切回原来的配置排查问题。mkdir -p /etc/yum.repos.d/backup/ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/这一步做好之后即使后续操作乱成一锅粥至少系统不会因为缺 repo 文件而彻底没法用包管理器。2.3 写新 repobase、updates、extras 一条龙备份完成后新建一个CentOS-Base.repo文件内容直接写死阿里云 vault 路径。注意这里我故意没用$releasever变量而是写死 6.10是因为老系统的 yum 在变量展开时偶尔会有版本识别的问题与其排查变量不如直接把路径写死干净利落。vi /etc/yum.repos.d/CentOS-Base.repo[base] nameCentOS-6.10 - Base - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/RPM-GPG-KEY-CentOS-6 enabled1 [updates] nameCentOS-6.10 - Updates - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/RPM-GPG-KEY-CentOS-6 enabled1 [extras] nameCentOS-6.10 - Extras - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/RPM-GPG-KEY-CentOS-6 enabled1这里有个细节值得说一下为什么要保留 gpgcheck1GPG 校验虽然多一道步骤但能保证下载的 RPM 包确实来自 CentOS 官方签名体系。老系统上如果 gpgkey 配置在本地文件里比如/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6你也可以直接用file://方式引用效果一样。2.4 EPEL 6 的取舍与 key 校验CentOS 6 时代很多软件要从 EPELExtra Packages for Enterprise Linux仓库装比如 htop、iftop 这些。但 EPEL 6 同样已经官方归档阿里云镜像站的 epel 目录目前主要维护还在生命周期内的版本epel/6这个路径不一定还在同步。我的建议是先把 base 和 updates 换好确认能正常安装基础包再去单独处理 EPEL。先把 EPEL 的 repo 文件写出来用curl检查一下路径是否有效再决定保留还是禁用。vi /etc/yum.repos.d/epel.repo[epel] nameExtra Packages for Enterprise Linux 6 - $basearch baseurlhttp://mirrors.aliyun.com/epel/6/$basearch failovermethodpriority enabled1 gpgcheck0先别急着留这个文件用下面这条命令确认镜像站上是否还有对应目录curl -I http://mirrors.aliyun.com/epel/6/x86_64/repodata/repomd.xml如果返回 200说明这个源还能用如果 404就把文件里enabled1改成enabled0暂时禁用 EPEL先保证系统基础源正常。gpgcheck 这里我临时置为 0是为了在归档源上避免 GPG key 过期导致整个仓库不可用内网测试机可以这么干生产环境建议想办法找到 EPEL 6 的归档 GPG key 再开校验。2.5 清理缓存并验证配置写完之后老规矩清理缓存再重建元数据yum clean all yum makecacheyum clean all这步千万别省。yum 会缓存之前的 repomd.xml 和元数据索引不清理的话换了新源可能还在读旧缓存结果就是你已经换了源但命令报的错还是老源时代的错非常误导人。验证是否生效最直接的办法是装一个小软件试试yum install -y vim如果能看到base、updates仓库的下载进度条并且顺利装完说明源已经通了。还可以用yum repolist看一下当前启用的仓库列表和软件包数量。看到正常的软件包数量不是 0基本就可以放心使用了。3. CentOS 7/8 换源顺手解决的模板化配置3.1 CentOS 7 的 repo 写法CentOS 7 还在支持期内时换源比 6.10 简单得多。因为$releasever变量在 CentOS 7 上展开就是 7路径不会乱。把 repo 文件写成这样[base] nameCentOS-$releasever - Base - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled1 [updates] nameCentOS-$releasever - Updates - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled1 [extras] nameCentOS-$releasever - Extras - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos/$releasever/extras/$basearch/ gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled1CentOS 7 的 EPEL 还在维护所以epel/7路径一般都是可用的[epel] nameExtra Packages for Enterprise Linux 7 - $basearch baseurlhttp://mirrors.aliyun.com/epel/7/$basearch gpgcheck1 gpgkeyhttp://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 enabled1换完之后依然是yum clean all yum makecache再验证。3.2 CentOS 8 停维后要走 vault 路径CentOS 8 在 2021 年底结束维护所以它也面临和 6.10 一样的归档问题。不同的是CentOS 8 的仓库结构变成了 AppStream、BaseOS、PowerTools 等模块化目录不能像 CentOS 7 那样一个 base 仓库搞定所有事。CentOS 8 换阿里源时baseurl 应该指向centos-vault/8.5.2111/这个归档版本路径。这里以 8.5.2111 为例因为那是最后一个标准发行版本[BaseOS] nameCentOS-8 - Base - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/ gpgcheck1 enabled1 [AppStream] nameCentOS-8 - AppStream - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/ gpgcheck1 enabled1 [PowerTools] nameCentOS-8 - PowerTools - mirrors.aliyun.com baseurlhttp://mirrors.aliyun.com/centos-vault/8.5.2111/PowerTools/$basearch/os/ gpgcheck1 enabled13.3 顺手清理多余 repo 的排查经验我见过不少换源失败的情况其实是/etc/yum.repos.d/里残留了一堆旧 repo 文件导致的。比如系统里同时存在CentOS-Base.repo、epel.repo、remi.repo、docker-ce.repo如果某个仓库指向的域名已经失效yum 会在处理元数据时因为取不到那个仓库的 repomd.xml 而报错连带把其他正常仓库也卡住。换源时建议先执行yum repolist all把当前所有启用的仓库列出来看一遍。凡是status列显示为 0 或者已经废弃的仓库直接禁用掉不用客气。老系统中的 repo 文件多一个就多一个故障点。4. 常用开发工具的阿里源配置清单除了操作系统本身的源开发工具链的下载源也是日常卡顿重灾区。这里把我平时用得最多的几个配置方式都列出来都是可以直接抄作业的。4.1 pip 源PythonPython 包的官方 PyPI 源在国内访问也是一言难尽阿里云 PyPI 镜像地址是# 临时指定源安装 pip install -i https://mirrors.aliyun.com/pypi/simple/ requests # 写入全局配置以后不用每次带参数 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/执行pip config set后配置会写入~/.pip/pip.conf或~/.config/pip/pip.conf。如果是在公司内网统一管理环境也可以把配置放到全局/etc/pip.conf里效果对所有用户生效。注意一点阿里云 PyPI 源只支持 simple 协议不支持普通的 PyPI 页面访问使用 pip 时路径必须是pypi/simple/少写一个simple就会报 404。4.2 npm 源Node.js很多文章会把 npm 的阿里源和阿里云镜像站混在一起讲实际上 npm 的镜像由 npmmirror 团队维护域名是 registry.npmmirror.com也就是大家以前熟悉的淘宝 npm 镜像。老的 registry.npm.taobao.org 已经迁移到新域名还在用老域名的最好及时换掉。npm config set registry https://registry.npmmirror.com # 验证是否生效 npm config get registry也可以在使用时临时指定npm install lodash --registryhttps://registry.npmmirror.com4.3 Maven 源JavaJava 项目依赖下载慢基本是所有 Maven 用户的共同记忆。阿里云 Maven 仓库的公共地址是https://maven.aliyun.com/repository/public它聚合了中央仓库、JCenter 等多路来源。在 Maven 的settings.xml里配置mirror idaliyun/id mirrorOfcentral/mirrorOf namealiyun maven mirror/name urlhttps://maven.aliyun.com/repository/public/url /mirror如果项目里还依赖了 Spring 等框架的专用仓库可以把mirrorOf改成*让所有依赖都走阿里云聚合仓库。Gradle 用户则在build.gradle里加repositories { maven { url https://maven.aliyun.com/repository/public } }4.4 Docker CE 源和镜像加速器Docker 有两层源一层是安装 Docker 本身的 yum/apt 仓库另一层是拉取镜像用的 registry 加速器不要搞混。安装 Docker CE 时CentOS 系统用阿里源的 repoyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo如果服务器上还没有 yum-config-manager可以手动下载 repo 文件到/etc/yum.repos.d/然后替换文件里的 download.docker.com 为 mirrors.aliyun.com/docker-ce再执行yum makecache。镜像加速器则是在/etc/docker/daemon.json里配置{ registry-mirrors: [https://你的加速器专属地址.mirror.aliyuncs.com] }这个专属地址需要登录阿里云容器镜像服务控制台在镜像加速器页面复制粘贴每个人账号不同不能直接照抄网上的地址。改完配置文件后重启 Docker 生效systemctl daemon-reload systemctl restart dockerdocker pull 的时候拉镜像的进度条会明显快很多。4.5 Ubuntu/Debian 的 apt 源Ubuntu 换阿里源比较简单直接替换archive.ubuntu.com域名即可sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update这里有一个细节security.ubuntu.com我一般不建议一起替换。安全更新仓库的同步有更严格的要求镜像站不一定能够保证和官方完全同步。留着他官方地址最多是速度稍慢一点但能保证安全补丁第一时间拿到。以下是常用源的速查表方便收藏类别地址生效方式CentOS 6.10 基础源mirrors.aliyun.com/centos-vault/6.10/配置 repo 文件CentOS 7 基础源mirrors.aliyun.com/centos/7/os/配置 repo 文件EPEL 7mirrors.aliyun.com/epel/7/配置 repo 文件Python pipmirrors.aliyun.com/pypi/simple/pip config / -inpmregistry.npmmirror.comnpm config set registryMavenmaven.aliyun.com/repository/publicsettings.xml mirrorDocker CE 仓库mirrors.aliyun.com/docker-ce/yum-config-managerUbuntu aptmirrors.aliyun.com/ubuntu/sources.list 替换5. 换源之后最容易踩的坑我是怎么排查的5.1 404路径变了还是版本号没写对换源后最常见的报错是404 Not Found表现形式是 yum 提示找不到 repodata/repomd.xml。这类问题的排查思路是先确认报错的是哪个仓库再用浏览器或者 curl 直接访问对应的 baseurl 路径。我第一次换 CentOS 6.10 的时候就是吃了路径的亏把 source URL 写成了mirrors.aliyun.com/centos/6.10/os/结果一直 404。后来 curl 试到centos-vault/6.10/才发现归档路径和常规路径是完全分开的。遇到 404第一反应应该是去镜像站目录列表看一眼实际路径长什么样而不是反复重试。5.2 gpgkey 校验失败换了新源之后有时会报GPG key retrieval failed或者Public key for xxx.rpm is not installed。这说明 gpgcheck1 但系统里没有对应的 GPG key。解决办法有两种。第一种是手动导入 keyrpm --import http://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/RPM-GPG-KEY-CentOS-6第二种方法是在仓库配置里用file://指向本地已有的 key 文件gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6如果本机装过配套的 centos-release 包本地大概率已经存在这个 key 文件。生产环境建议保留 gpgcheck1 并妥善导入 key内网测试机临时把 gpgcheck 改成 0 排查问题可以但不要把 gpgcheck0 当作长期配置。5.3 缓存欺骗不 clean 就白换很多时候源明明换对了命令报的错却还是老源时代的提示比如一直指向一个已经不存在的域名。这就是 yum 缓存里的旧 metadata 在作怪。yum 会把仓库的元数据缓存到本地下次执行安装操作时如果缓存没过期它会优先用缓存。换了新 repo 文件后不执行yum clean allyum 可能还在读旧仓库的缓存索引自然还是连接旧地址。我的习惯是任何一次换源不管配置多简单都先 clean all 再 makecache绝不做例外。别嫌这两条命令啰嗦它能帮你避开大量玄学报错。5.4 老系统的 https 兼容性CentOS 6.10 自带的 yum 基于 Python 2.6在处理某些 https 源时会因为证书链问题报CERTIFICATE_VERIFY_FAILED。我在这台老服务器上试过 https 的 baseurl结果直接卡在证书校验后来换成 http 的 baseurl 才顺利通过。所以我在上面的 repo 配置里都写的是http://而不是https://。这个选择针对老系统是务实的CentOS 6.10 的软件源仓库里本身没有高敏信息国内镜像站的链路也相对可控。如果你一定要在生产环境走 https建议先把 ca-certificates 和 yum 相关组件在最小范围内升级到位再切 https 源。5.5 系统时间不准也会导致源连接失败还有一个非常隐蔽的坑老服务器如果长时间断过电、清过 CMOS系统时间可能会漂移。https 源在 TLS 握手阶段会校验证书有效期如果本机时间比真实时间偏了好几年哪怕证书和路径都完全正确也会握手失败。排查这种问题只需要看一眼date如果时间明显不对直接用date -s设置成当前时间或者配置好 NTP 同步。这个问题很容易被忽略因为它跟源地址一点关系都没有但症状却和源失效一模一样。换源操作做到这里CentOS 6.10 以及常用开发工具的国内源就都搞定了。最后再说点个人体会老系统换源本质上是把命运交给第三方镜像站的维护周期阿里源用着确实快但谁也不能保证归档目录永远不变。我的习惯是换完源之后把yum.repos.d里的所有 repo 文件在本地备份一份同时把当前机器上装过的关键软件版本记录下来哪天镜像站路径又调整了三分钟就能切到备用方案。如果你也在维护类似的旧机器别嫌麻烦先把备份这一步做了后面能省很多事。