Linux配置本地yum源的答案其实很简单:把系统安装镜像或软件包目录挂载到服务器,写一个.repo配置文件指向它,执行yum clean all和makecache就能用了,整个过程五分钟内可以完成,而且不依赖外网,内网服务器和离线环境下尤其好用。
如果你管理过几台Linux服务器,大概率遇到过这种尴尬:内网机器要装个软件,yum源连不上公网,报错一串超时或404;或者公司要求服务器不能走外网,但开发环境又想装个nginx、php,配置本地yum源就是解决这类问题的最直接手段,相当于把软件仓库搬到你自己家里。
什么场景下需要配置本地yum源
配置本地yum源不是所有环境的标配,但遇到下面这三类情况,你会发现它比任何网络源都靠谱。
- 完全离线的生产内网:银行、政务、军工类项目服务器通常物理隔离,没法访问公网镜像,本地yum源是唯一的软件安装来源。
- 公网源速度慢或不稳定:某些云厂商的镜像源高峰期拉取速度极低,或企业出口带宽被限速,本地源安装在局域网内,速度接近磁盘读写。
- 多台机器需要相同软件版本:生产环境几十台服务器需要装同一版本依赖包,逐台从公网拉取既慢又容易拿到不同版本,本地源一次同步,所有机器统一版本。
linux配置本地yum源步骤:从挂载到repo文件
配置本地yum源的核心动作只有三个:准备软件包目录、编写repo文件、刷新缓存,下面按最常用的CentOS 7/8系列操作来说明,其他发行版逻辑完全一样。
第一步:准备本地软件包目录
如果手上有系统安装ISO镜像,这是最省事的方式,把ISO挂载到指定目录:
mkdir -p /mnt/cdrom mount -o loop /path/to/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
挂载成功后,/mnt/cdrom/Packages 目录下会有一大堆rpm包,如果没有ISO镜像,也可以找一个已经装了rpm包的目录,或者从其他机器拷贝Packages文件夹过来,行业共识是,使用与服务器相同大版本的ISO镜像最可靠,跨大版本用本地源容易因为依赖库版本差异出幺蛾子。

第二步:确认yum源配置文件哪个
这是新手最容易困惑的地方,进入 /etc/yum.repos.d/ 目录,你会看到多个.repo后缀的文件,yum会读取这个目录下所有.repo文件,但同一个软件包如果出现在多个源里,优先级由priority参数决定,没写这个参数则按文件名顺序读取,所以配置本地源时,最好新建一个独立文件并禁用其他源。
建议操作路径:
- 备份原源:
mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/.repo /etc/yum.repos.d/backup/ - 新建本地源文件:
vim /etc/yum.repos.d/local.repo - 写入如下内容:
[local]
name=Local Yum Repository
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
如果不想备份其他源,也可以把它们的enabled改成0。gpgcheck=0在纯内网环境没问题,签名校验只在能获取到GPG key时才有效,本地ISO挂载场景一般直接关掉。
第三步:刷新缓存并验证
yum clean all yum makecache yum list | head -20
看到包列表正常输出,说明本地源已经生效,这时再装软件,yum install nginx,速度会快很多。
扩展:局域网共享yum源
单机挂载ISO只是入门玩法,如果几十台机器都要用本地源,每台都挂ISO不现实,正确做法是选一台机器做yum源服务器,用nginx或vsftpd把Packages目录共享出来,其他机器把baseurl指向这台服务器的IP或域名。
服务器端需要安装createrepo工具(ISO镜像里自带,离线环境可从Packages目录找到rpm包手动安装),
createrepo /mnt/cdrom
客户端侧只需要把baseurl改成http://192.168.1.10/cdrom

即可,这样只要开着这台源服务器,整个内网的机器都能高速安装软件包。
本地yum源与网络yum源怎么选
很多刚接触Linux的同学会有个疑问:既然默认的网络yum源配好了就能用,为什么还要折腾本地源?两者不都是装软件的入口吗?这里从几个关键维度对比一下。
- 可用性:网络源依赖外网连通性,DNS污染或防火墙策略变化都会导致yum失效;本地源完全自控,只要磁盘没坏就在。
- 速度:网络源受带宽和服务端负载影响,高峰期下载rpm包可能只有几十KB/s;局域网本地源通常是满速磁盘或千兆网卡,百兆内网跑满也有12MB/s左右。
- 包数量与更新:网络源包含全部仓库包和增量更新;本地源如果只用ISO镜像,只有基础包,如果需要EPEL这类扩展仓库还得额外同步。
- 适用场景:有外网且网络状况良好的单机环境,用网络源更省事;离线内网、批量装机、需要严格版本控制的场合,本地源是唯一选择。
国内服务器用户如果想保留网络源,推荐更换国内镜像站,比如简米云、清华TUNA、中科大USTC的镜像源都很稳定,修改方式同样是编辑.repo文件,把baseurl中的mirror.centos.org替换成对应镜像域名,然后makecache,据广泛应用反馈,国内镜像源的稳定性在多数情况下比官方源好一个数量级。
常见yum源报错处理:一条条对号入座
配置本地源过程中,有几个报错是新手必踩的坑,列出来一次性说清楚。
Could not resolve host
原因几乎都是客户端配置的baseurl写错了域名或端口不可达,检查服务器端源地址是否是IP而不是域名,或者防火墙有没有放行对应端口。
No more mirrors to try
这个报错往往与baseurl路径不存在或权限不足有关,检查baseurl=file:///mnt/cdrom路径是否真实存在,目录是否有读权限,ls /mnt/cdrom

是否能正常列出内容。
Nothing to do
常见于gpgcheck=1但未导入GPG key时,或请求的包名拼写错误,本地源场景下直接设置gpgcheck=0即可排除签名干扰。
Repo配置文件自查清单
[local]方括号名称全局唯一,不能与其他repo重复baseurl路径末尾不要加多余斜杠,file://协议后面跟绝对路径- 同一源内不要混用
mirrorlist和baseurl,二选一 - 修改repo文件后必须
yum clean all,否则缓存会干扰
linux配置本地yum源常见问题解答
问:配置了本地yum源之后,yum install装不上某个软件,提示依赖缺失,怎么办?
本地ISO镜像里的包是原始发行版全量包,但可能不包含EPEL或第三方仓库的软件,比如nginx高版本、PHP 7.4+,解决方法是额外下载所需rpm包放入Packages目录并重新运行createrepo,或者引入内网同步的EPEL镜像源。
问:本地yum源和配置好的国内镜像源可以同时使用吗?
可以,但建议明确优先级,在两个repo文件中都设置priority=N参数,数字越小优先级越高,并安装yum-plugin-priority插件,本地源通常设置priority=1,网络镜像源设置priority=10,这样本地优先,缺的包从网络源补。
问:服务器重启后yum又不能用了,这是什么原因?
大概率是ISO挂载丢了,因为mount只是临时挂载,解决方法是把挂载命令写入 /etc/fstab,加入一行:/path/to/xxx.iso /mnt/cdrom iso9660 loop,defaults 0 0,下次开机自动挂载,如果用的是局域网yum源服务器,则不需要操作这一步。
配置本地yum源这门技术,说到底是把软件安装的主动权握在自己手里,不管外网环境多恶劣,只要准备好了源,内网服务器随时都能装软件,实践一遍之后你就会发现,它的可靠性和速度带来的收益,远超首次配置花费的那五分钟。
