
1. 先把话说清楚CentOS7 的源为什么必须自己配CentOS7 配 yum 源这件事三年前是五分钟的活现在却成了每台机器落地前都得先过一遍的开机仪式。原因不复杂CentOS 7 在 2024 年 6 月 30 日走完了十年生命周期官方镜像站上的 7 号目录被整批挪进了 vault 归档站原来那份复制粘贴就能用的CentOS-Base.repo一夜之间全线 404。你装完系统第一件事敲yum install net-tools大概率等来的是Cannot find a valid baseurl for repo: base/7/x86_64这一行红字。这篇文章想解决的问题很具体把 CentOS7 的 yum 源从能连但没内容变成稳定可用并且把几种典型场景都覆盖掉。手里有公网、能解析域名走网络换源方案机房内网隔离、机器压根出不去走本地 ISO 源或者自建仓库源需要给一整个机架批量化供包走 HTTP 内网源。内容偏向实操默认你已经能用 root 或者 sudo 登录机器对vi、systemctl这些基础命令不陌生。完全没接触过 Linux 的朋友也能看我会把每条命令为什么这么写讲清楚避免你照抄之后一知半解出了报错无从下手。需要先摆明一个态度换源不是随便找个国内镜像站把地址一替就完事。这里面有几个变量替换、优先级、GPG 校验的细节不理解它们你迟早会在某台机器上撞墙。1.1 官方源下线之后机器上到底发生了什么很多人以为源挂了是网络问题其实不是。CentOS 的 yum 体系是靠repo文件里写的baseurl或mirrorlist去拉两份元数据一份是repodata/repomd.xml描述当前仓库有哪些索引文件、各自的校验值另一份是具体的primary.xml.gz、filelists.xml.gz这些包清单。yum 拿到清单后才知道nginx这个包在哪个子目录、版本号多少、依赖哪些东西。官方把mirror.centos.org/centos/7/目录下线之后mirrorlist指向的那台服务器还会响应但它返回的镜像列表里已经没有有效节点了所以你的 yum 走到一半就断在这儿。表现就是你看到Loaded plugins: fastestmirror之后卡很久然后报Could not retrieve mirrorlist。这时候去 ping 域名是有响应的甚至用浏览器打开镜像站首页也正常于是很容易误判成网络没问题啊然后在错误方向上浪费一两个小时。判断方法很简单把 repo 文件里的baseurl手工 curl 一下curl -I http://mirror.centos.org/centos/7/os/x86_64/repodata/repomd.xml返回 404 或者 301 跳到别的地方就说明这条路已经断了别再纠结直接换源。这里顺带提一句7.9.2009是 CentOS 7 的最后一个版本号vault 归档站上的目录结构就是按这个版本号切的所以你在写baseurl的时候要么写死7.9.2009要么想办法让变量解析成这个值两者不能混。1.2 五种源方案的适用边界同样是配 yum 源不同环境的做法差别很大选错了方案会白折腾。我按自己的使用频率列一下方案适用场景优点明显短板公网镜像源阿里云、清华、中科大等机器能出公网配置两分钟包最全依赖外网内网机器完全没法用本地 ISO 挂载源单机离线、临时救急零依赖ISO 就是全部只有 base 包没有 updates 补丁自建 createrepo 仓库有固定的一批私有 rpm可以把自研包、第三方包一起管需要自己维护元数据内网 HTTP 源httpd/nginx 托管一个机房几十上百台机器只下一份全内网共享得有一台常驻服务器纯离线 rpm 搬运极端隔离环境不依赖任何服务依赖关系靠人工理容易漏包新手最常见的误区是明明机器在内网出不去还死磕网络换源最后把/etc/resolv.conf改来改去越改越乱。判断方法就是ping -c 2 223.5.5.5能通但域名解析不了是 DNS 问题连 IP 都不通就是纯隔离直接走本地源。1.3 动手之前的三道保险改 yum 源是少数几个改错了会导致机器没法自救的操作之一因为你想装个wget去下 rpm 包而wget本身要从源里装。所以动手前我固定做三件事第一备份整个 repo 目录不是只备份要改的那个文件mkdir -p /root/repo-backup-$(date %F) cp -a /etc/yum.repos.d/. /root/repo-backup-$(date %F)/-a保留权限和时间戳.这个点号别漏它的意思是目录下的所有内容不加的话复制的是目录本身恢复的时候位置就错了。第二确认系统版本号别凭印象cat /etc/redhat-release uname -rCentOS 7.9 会输出CentOS Linux release 7.9.2009 (Core)。有些人是 7.6 或者 7.8虽然大概率也能用同一份 vault 源但心里要有数。第三确认磁盘空间。/var/cache/yum是 yum 的缓存目录yum makecache会把元数据全下下来实测在 7.9 上大概 100MB 出头。空间不够会报很奇怪的错误df -h /var注意如果你是在生产机器上操作尽量避开业务高峰期执行yum clean all因为清缓存之后短时间内 yum 响应会变慢万一有其他脚本依赖 yum可能会超时失败。2. yum 找包的整条链路搞懂原理才敢改配置配源配到一半卡住的人十个里有八个是因为只记住了把地址换成阿里云却不知道 yum 每一行配置在干什么。这一节我把链路拆开讲后面查错你自己就能定位。2.1 从 yum install 到 rpm 落地中间经过了什么你敲下yum install nginxyum 内部大致走这么几步先读取/etc/yum.repos.d/下所有.repo文件把enabled1的仓库纳入候选然后对每个候选仓库检查本地缓存的元数据是否过期由metadata_expire控制默认 90 天但 yum 通常会根据repomd.xml的 Last-Modified 判断过期就去baseurl拉新的repomd.xml比对校验值决定哪些索引文件需要重新下载。拿到包清单之后yum 做依赖求解把nginx以及它依赖的nginx-filesystem、nginx-all-modules之类全部列出来进入事务确认。你点y之后yum 按baseurl拼出每个 rpm 的下载地址下到/var/cache/yum/x86_64/7/repo-name/packages/逐个校验 GPG 签名最后交给 rpm 执行安装。这个链路里有两个关键点一是元数据一定要能下成功二是 rpm 包的实际 URL 必须可达。很多人把baseurl配成了一个只有repodata没有Packages的目录makecache能过安装包的时候才报错就是栽在第二点上。2.2 repo 文件里每一行的作用与易错点拿一个标准的三段式配置来拆[base] nameCentOS-7 - Base - aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1[base]是仓库 ID必须唯一而且不能有空格。你要是两个文件里都写了[base]yum 会取其中一个另一个直接被忽略而且不会报错这是很阴的一手排查的时候记得yum repolist看一眼仓库 ID 有没有重名。name只是给人看的描述随便写但建议写清楚来源将来repolist输出一眼就能分辨。baseurl是核心注意结尾那个斜杠少了斜杠在某些拼接场景下会出错。$basearch会被解析成x86_64、aarch64这类架构值写死也行但用变量更通用。gpgcheck1表示要校验包的签名。这个参数强烈建议开着代价是首次安装需要导入公钥收益是能挡住被篡改的包。gpgkey我习惯指向本机自带的公钥文件CentOS 7 系统里/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7一直都在比远程拉取稳得多也不怕镜像站临时抽风。enabled1控制这个仓库是否参与解析。做本地源的时候我会把所有网络仓库设成enabled0只留一个本地源避免 yum 跑到外网去等超时。2.3 变量 $releasever 与 $basearch 的坑这是最容易踩的一个坑。在 CentOS 7 上$releasever的值是7不是7.9.2009。而 vault 归档站的目录是按7.9.2009切的。如果你照搬网上老教程写baseurlhttps://mirrors.aliyun.com/centos-vault/$releasever/os/$basearch/实际会被拼成.../centos-vault/7/os/x86_64/这个路径在 vault 上不存在于是 404。解决办法有两个要么把版本号写死7.9.2009要么用releasever这个别名覆盖掉默认值但后者在 yum 3.4.3 上不支持得装额外的插件麻烦。我的选择是永远写死版本号。代价是将来虽然 CentOS 7 已经不会有新版本了需要手工改收益是结果完全可预期。$basearch可以放心用它在所有架构上都解析正确ARM 环境会解析成aarch64这也是为什么 ARM 机器配源的时候不能照抄 x86 的地址却忘了改架构。验证变量解析结果有个小技巧用yum-config-manageryum install -y yum-utils yum-config-manager base输出里会显示baseurl的最终展开值配错了立刻能看到。3. 网络源更换实操把阿里云源配到能跑起来这一节是完整可抄的流程我用阿里云的 vault 目录举例清华、中科大、华为云的目录结构基本一致换域名和路径前缀就行。3.1 第一步一定是备份不是替换先看一眼现状ls -l /etc/yum.repos.d/CentOS 7 默认会有CentOS-Base.repo、CentOS-CR.repo、CentOS-Debuginfo.repo、CentOS-Sources.repo、CentOS-Vault.repo、CentOS-fasttrack.repo这一堆。很多人只改了CentOS-Base.repo结果安装某些包的时候 yum 又跑去读CentOS-CR.repo里的 mirrorlist继续报错白白多折腾半小时。我的做法是一刀切把整个目录清空只留自己要用的配置文件mkdir -p /root/repo-backup mv /etc/yum.repos.d/*.repo /root/repo-backup/ ls /etc/yum.repos.d/挪走之后目录应该是空的或者只剩.和..。这一步不心疼因为原文件都在备份目录里躺着随时能恢复。注意别用rm -rf /etc/yum.repos.d/*这种命令。手一抖多打一个空格后果就不是换源失败这么简单了。挪走比删掉安全而且不占什么空间。3.2 写入 base/extras/updates 三段配置三个仓库是必须的base提供主包updates提供补丁更新extras提供一些附加组件比如centos-release-*系列。少配updates的直接后果是你装完只能拿到出厂版本安全补丁一个都没有。cat /etc/yum.repos.d/CentOS-Base.repo EOF [base] nameCentOS-7.9.2009 - Base - aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 [updates] nameCentOS-7.9.2009 - Updates - aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 [extras] nameCentOS-7.9.2009 - Extras - aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 EOF用EOF而不是EOF是有讲究的。加了单引号之后shell 不会对文件内容做变量展开$basearch会原样写进文件交给 yum 自己去解析。如果漏了单引号shell 会把$basearch展开成空字符串最后baseurl就变成了.../os//报错信息会非常迷惑。如果你的机器对 HTTPS 有顾虑比如老旧环境的 CA 证书过期把https://换成http://也同样能用阿里云的这两个协议都开着。我一般选 HTTPS因为多一层传输保护。3.3 清缓存、重建缓存、验证配置写完之后缓存里可能还留着一堆失效的旧元数据必须清掉yum clean all yum makecacheyum clean all会清空/var/cache/yum下的所有内容包括包缓存和元数据。yum makecache则重新下载所有启用仓库的元数据这一步的输出能直接看出仓库是否可达。正常的话你会看到类似Metadata cache created的提示如果是base仓库失败说明baseurl有问题。然后验证yum repolist输出应该有三行分别对应 base、extras、updates每个后面有包数量。数量大概是 base 一万个左右、updates 几千个、extras 几百个数量级对不上就说明有仓库没配好。真正的验收是装一个包yum -y install net-tools ifconfig -anet-tools是很小的包下载快装完能立刻验证效果。装不上再回头查日志tail -50 /var/log/yum.log3.4 顺手把 epel 和常用插件补齐系统源配好只是第一步实际运维里 EPEL 仓库的使用频率可能比 base 还高htop、jq、fail2ban这些都在里面。EPEL 对 CentOS 7 的支持也同期结束了同样要指向归档地址cat /etc/yum.repos.d/epel.repo EOF [epel] nameExtra Packages for Enterprise Linux 7 - aliyun baseurlhttps://mirrors.aliyun.com/epel-archive/7/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 enabled1 EOF注意 EPEL 的公钥文件本机不一定有可以用rpm --import从镜像站导入或者装epel-release包之后就有了。如果嫌麻烦第一次先把gpgcheck0装完epel-release再改回1也是个务实的做法。顺手装两个插件yum-plugin-fastestmirror会在多个镜像间自动选快的yum-utils里的yumdownloader是做离线包搬运的必备工具提前装上省事。yum -y install yum-utils yum-plugin-fastestmirror4. 本地 yum 源搭建无网环境的救命方案内网机器、隔离环境、临时装环境的虚拟机这三种场景我用本地源最多。它的本质是把 ISO 或者一个装满 rpm 的目录通过file://协议当成仓库用完全不依赖网络。4.1 挂载 ISO虚拟机光驱与 loop 两种姿势先说 ISO 从哪来。CentOS 7.9.2009 有三个常用镜像CentOS-7-x86_64-Minimal-2009.iso只是最小安装介质里面没有可用的仓库CentOS-7-x86_64-DVD-2009.iso包含 base 全量包是最常用的CentOS-7-x86_64-Everything-2009.iso包最全适合拿来搭自己的源。做本地源一定要用 DVD 或者 Everything用 Minimal 会白忙一场。如果你在 VMware 或者 VirtualBox 里直接把 ISO 挂到虚拟光驱虚拟机里就能看到/dev/sr0lsblk mkdir -p /mnt/cdrom mount /dev/sr0 /mnt/cdrom ls /mnt/cdrom如果没有光驱或者 ISO 是直接传到服务器上的用 loop 挂载mkdir -p /mnt/cdrom mount -o loop,ro /opt/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom-o loop告诉内核把这个文件当块设备处理ro是只读挂载防止误操作改了 ISO 内容。想开机自动挂载写进/etc/fstab/opt/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom iso9660 loop,ro 0 0写完别急着重启先mount -a验证一遍fstab 写错会导致系统启动失败这个坑我年轻时踩过进单用户模式改回来折腾了很久。4.2 写 local.repo 并验证挂载好之后配置就很简单了cat /etc/yum.repos.d/local.repo EOF [local] nameCentOS-7.9.2009 - Local DVD baseurlfile:///mnt/cdrom gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 EOF注意这里用的是file://加三个斜杠第三个斜杠是路径的起始写成两个斜杠会报找不到仓库。如果这台机器同时有网络源希望优先走本地可以在网络源的配置里加enabled0或者在本地源里加cost500、在网络源里加cost1000数值小的优先。要精确控制优先级得装yum-plugin-priorities用priority1这种写法数字小的先被选中。这两个参数容易混参数所属插件生效方式常用取值costyum-plugin-fastestmirror只影响镜像选择倾向默认 1000小的优先priorityyum-plugin-priorities影响仓库间包的选择默认 99小的优先实测下来cost只是倾向并不保证离线场景我更推荐直接用enabled0把网络源关掉简单粗暴不出错。清缓存重建之后验证yum clean all yum repolist yum -y install vim-enhanced4.3 自建软件仓库createrepo 与目录规范本地 ISO 源有个硬伤只能装 ISO 里有的包。实际项目里总会遇到我要装一个自研的 rpm或者我要装某个第三方包这时候就得自己建仓库。目录结构我一般这样安排mkdir -p /data/yumrepo/centos7/{base,extras,updates,mylocal}把需要管的 rpm 全部集中到对应目录里然后生成元数据yum -y install createrepo createrepo /data/yumrepo/centos7/mylocal执行完目录里会多出一个repodata子目录repomd.xml就在里面。以后新增或删除 rpm都要重新生成一次createrepo --update /data/yumrepo/centos7/mylocal--update会增量更新不重算全部速度快很多。但如果改动量大建议直接重跑一次全量createrepo避免残留的旧索引引发诡异问题。对应的 repo 文件cat /etc/yum.repos.d/mylocal.repo EOF [mylocal] nameMy Local Packages baseurlfile:///data/yumrepo/centos7/mylocal gpgcheck0 enabled1 EOF自建包一般没有签名所以gpgcheck0。如果你们内部有签名流程把公钥导入之后照常开1。注意createrepo生成的元数据会和目录里的实际内容绑定。手工往目录里扔一个 rpm 但忘记--updateyum 是看不到这个包的这是新手最常问的我明明放进去了为什么搜不到。4.4 用 httpd 把本地源变成内网共享源只有一台机器用本地源file://就够了。但如果是一个机架二三十台机器每台都挂一份 ISO 就太蠢了。这时候把仓库放到一台内网服务器上用 httpd 或者 nginx 提供 HTTP 访问yum -y install httpd systemctl enable --now httpd ln -s /data/yumrepo /var/www/html/repo然后在客户端机器上配[shared] nameShared Intranet Repo baseurlhttp://10.0.0.10/repo/centos7/mylocal gpgcheck0 enabled1内网源有几个细节要注意。一是 httpd 的默认根目录/var/www/htmlSELinux 打开的情况下权限会拦建议用软链接配合chconchcon -R -t httpd_sys_content_t /data/yumrepo二是防火墙要放行 80 端口firewall-cmd --permanent --add-servicehttp firewall-cmd --reload三是如果内网服务器本身也配了 yum 源可以让它每天自动同步一次元数据客户端只管用省心。5. 离线场景下的软件包获取与安装有些环境真的连不到任何源连内网 HTTP 都不允许只能靠 U 盘或者跳板机搬运 rpm。这条路能走通但依赖关系必须自己理清楚否则装到一半给你来一句Failed dependencies。5.1 yumdownloader 连依赖一起下载在一台有网且版本架构完全一致的机器上操作这是前提版本不一致下下来的包大概率装不上。先把yum-utils装上然后mkdir -p /tmp/offline-pkgs yumdownloader --resolve --destdir/tmp/offline-pkgs nginx--resolve是关键它会让 yumdownloader 递归解析依赖把nginx依赖的所有 rpm 一并下载。不加这个参数你只会拿到一个孤零零的nginx-1.20.1-10.el7.x86_64.rpm拷到目标机上必然报缺依赖。下载完之后看一眼文件数量ls /tmp/offline-pkgs | wc -l du -sh /tmp/offline-pkgs装nginx大概会带下来七八个包如果你只看到一个说明--resolve没生效检查一下命令拼写。还可以考虑用--downloadonly配合yum install的方式yum install --downloadonly --downloaddir/tmp/offline-pkgs nginx效果类似区别是--downloadonly走的是完整的依赖求解流程某些边界情况下比yumdownloader更准。我一般两个都试谁的结果完整用谁。5.2 拷贝到目标机的安装姿势与顺序把整个目录打包拷过去tar czf offline-pkgs.tar.gz -C /tmp offline-pkgs目标机上解压后不要傻乎乎地按字母顺序rpm -ivh依赖顺序错了会失败。正确姿势是让 rpm 自己处理rpm -ivh --nodeps --force *.rpm这个写法很粗暴不推荐。更稳妥的是先把目录变成一个临时源createrepo /tmp/offline-pkgs然后写一个临时 repo 指向它yum install nginx让 yum 自己去排依赖顺序。前提是目标机上得有createrepo命令如果没有就先从yum-utils包里把createrepo的 rpm 和它的依赖单独拷过去装上这算是个先有鸡还是先有蛋的问题实际操作里我会在打包阶段就把createrepo一起塞进离线目录。如果目标机上实在啥都没有那就退回手动顺序安装。判断顺序的方法是用rpm -qpR看依赖rpm -qpR /tmp/offline-pkgs/nginx-1.20.1-10.el7.x86_64.rpm输出里列出的包名说明必须先装它们。反复迭代几轮就能理出一条正确顺序。5.3 用 createrepo 把下载目录变成可用的源这一步值得单独说因为它把一次性搬运变成了可复用的仓库。做完之后这个离线目录可以持续往里加包每加一次createrepo --update一下就是一个活的私有源。将来这台机器还要装别的软件不用重复走网络下载流程只在这台打包机上下载、更新、同步过去就行。实际操作中我会在打包机上维护一个固定目录/data/offline-repo每隔一段时间把常用软件批量下载进去然后整体 rsync 到内网各机器。内网机器的 repo 配置指向本地file://路径整个流程跑通之后运维效率提升非常明显。6. 报错排查速查表与踩坑实录配源这件事报错信息就那几类见多了基本一眼能定位。下面这张表是我这些年攒下来的。6.1 八大高频报错对照表报错关键字根本原因处理动作Cannot find a valid baseurl for repobaseurl 路径写错或已下线curl 一下 URL换成 vault 路径Could not resolve hostDNS 解析失败检查/etc/resolv.conf加nameserver 223.5.5.5curl#60 - SSL certificate problem系统时间不对导致证书校验失败date看时间用chronyd或ntpdate校准All mirror URLs are not using ftp, http[s] or file老版本 yum 不支持某种 URL 格式把https://改成http://GPG check FAILED公钥未导入或包被篡改rpm --import对应 GPG 公钥Another app is currently holding the yum lock有其他 yum 进程在跑确认无进程后rm -f /var/run/yum.pidLoaded plugins: fastestmirror长时间卡住镜像探测慢编辑/etc/yum/pluginconf.d/fastestmirror.conf设enabled0Error: Package: xxx requires: yyy依赖缺失补仓库或走离线--resolve方案表格里最值得展开的是时间问题。SSL 证书校验依赖准确的系统时间如果机器时间是 2020 年或者 2030 年握手直接失败报错信息又含糊很容易误判成镜像站挂了。判断方法很土但有效date和手机上的时间对一下差超过几分钟就得校准。6.2 三个容易被忽略的环境因素第一个是 DNS。内网机器经常被配置成只有内网 DNS解析不了公网域名。临时测试可以这样加一行echo nameserver 223.5.5.5 /etc/resolv.conf但注意/etc/resolv.conf如果被 NetworkManager 管理重启会被覆盖得改网卡配置文件里的DNS1。第二个是代理。有些机房要求走 HTTP 代理才能出网yum 需要在/etc/yum.conf里显式配置proxyhttp://10.0.0.1:3128只设环境变量http_proxy对 yum 是不生效的这一点和curl的行为不一样。第三个是 SELinux 和防火墙。本地 HTTP 源场景下如果客户端报Connection refused先确认服务端systemctl status httpd是 active再firewall-cmd --list-all看 80 端口有没有放行。这两个都排除了再看 SELinuxgetenforce ausearch -m avc -ts recent有 AVC 拒绝记录就说明是 SELinux 拦的按前面说的方法打标签。6.3 我踩过的几个坑第一个坑是仓库 ID 重名。有一次我把CentOS-Base.repo和新建的配置文件放在同一个目录里两者的[base]ID 撞了yum 从头到尾没报错但装出来的包版本不对。排查了半个多小时才发现是重名覆盖。从那以后我养成习惯新配的源一律用带前缀的 ID比如[aliyun-base]、[local-dvd]绝不和官方默认的撞。第二个坑是yum clean all之后忘了makecache。清完缓存直接装包yum 会自己重新拉元数据看起来也能用但如果当时网络抖动缓存只下了一半后面就会持续报一些莫名其妙的元数据错误。现在我的习惯是这两条命令永远连着写yum clean all yum makecache中间不插入任何操作。第三个坑是 ISO 挂载点被误删。有次磁盘清理脚本把/mnt下的空目录清了本地源直接失效。后来我把挂载点改到/data/cdrom并且在/etc/fstab里显式声明减少被误伤的概率。第四个坑是 ARM 机器照抄 x86 的地址。某次在 ARM 服务器上配源baseurl里写死了x86_64yum 能拉到元数据但装包时报架构不匹配。改成$basearch就解决了。所以我现在写baseurl一律用变量能省掉一类低级错误。最后一个算是经验换源之后别急着装大包先拿net-tools或者tree这种几十 KB 的小包试一下。小包成功说明整条链路通了包括元数据下载、GPG 校验、rpm 安装再去装几百 MB 的东西才踏实。这个习惯帮我省过好几次时间因为大包下到一半失败你还得判断是网络问题还是源的问题小包则直接给出答案。以后再遇到新的 CentOS 7 机器我会先看三样东西cat /etc/redhat-release确认版本、curl -I试一下目标仓库地址、df -h /var看空间三样都过了再动手写配置比一上来就改文件稳当得多。