CentOS配置本地yum源的核心思路是:将系统镜像或已下载的RPM包目录作为软件仓库,通过修改repo文件指向本地路径,实现离线环境下的软件安装与依赖解析,整个过程无需联网,适用于内网服务器、离线机房等场景。
第一步:搞清本地yum源的两种玩法
使用ISO镜像文件挂载
这是最常见的做法,适合手头有CentOS安装镜像的系统管理员,镜像文件本身就是一个完整的软件仓库,包含BaseOS和AppStream两大组件(CentOS 8及以上版本)。
具体操作:
- 将ISO文件上传到服务器,例如存放于
/opt目录 - 创建挂载点:
mkdir -p /mnt/cdrom - 执行挂载命令:
mount -o loop /opt/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom - 查看挂载结果:
df -h | grep cdrom
直接使用RPM包目录
日常工作中,我们常从网上下载大量RPM包,散落在某个目录,此时无需镜像,直接将该目录初始化为软件仓库即可。
操作路径:
- 创建目录:
mkdir -p /repo/local - 将收集的RPM包放入该目录
- 执行仓库初始化:
createrepo /repo/local - 若系统未安装createrepo,需先用rpm命令手动安装该工具
第二步:备份并修改yum源配置文件
行业共识认为,修改任何系统配置文件前都应保留原始版本,方便故障时回滚,CentOS的yum源配置位于/etc/yum.repos.d/目录,默认的CentOS-Base.repo指向公网镜像。
备份操作
mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/.repo /etc/yum.repos.d/backup/
新建本地源配置文件
vi /etc/yum.repos.d/local.repo
以CentOS 7为例):
[local] name=Local YUM Repository baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0

参数说明:
baseurl:指向挂载点或RPM目录的本地路径,统一使用file://协议前缀gpgcheck=0:关闭GPG校验,避免因缺少公钥导致安装失败,若需开启,请设置gpgcheck=1并指定gpgkey路径enabled=1:确保仓库处于启用状态
对于CentOS 8及以上版本,还需分别配置BaseOS和AppStream两个仓库:
[bageos] name=BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0 [appstream] name=AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=0
关键陷阱:架构目录差异
少数场景下,挂载点目录结构与预期不符,执行ls /mnt/cdrom确认实际目录名,若存在Packages、repodata等目录,则直接指向该层;若存在x86_64等架构目录,请根据系统架构调整baseurl路径。
第三步:清理缓存并验证源可用性
配置完成后,必须执行缓存清理,否则yum可能依旧尝试访问旧的网络源。
yum clean all yum makecache
验证是否成功:
yum repolist
输出的repo id与repo name应与local.repo中定义的一致,且状态为启用。
测试安装
yum install -y vim
若安装成功且不报错,说明本地源配置无误,多数情况下,执行完上述三步就能正常使用,但如果你遇到依赖缺失,则说明RPM包集合不完整,需要补充对应依赖包。
第四步:排查常见配置报错
Could not resolve host
执行yum命令时解析域名失败,原因:未关闭默认网络源或DNS配置异常。解决:确认/etc/yum.repos.d/目录下无其他.repo文件,或使用yum --disablerepo= --enablerepo=local

指定仅使用本地源。
GPG key verification failed
原因:本地仓库中的RPM包与repo文件中的gpgkey签名不匹配。解决:将gpgcheck=0写入repo配置;或手动导入公钥,例如rpm --import /mnt/cdrom/RPM-GPG-KEY-CentOS-7。
repodata目录不存在
当你把RPM包放入自定义目录并直接引用时,yum会报错找不到repodata。解决:通过createrepo命令生成元数据,CentOS 8及以上版本改用createrepo_c,用法相同。
本地yum源和网络yum源的对比:离线环境怎么选
很多朋友对何时用本地源、何时用网络源感到困惑,实际工作中,两者各有适用场景,以下是直观对比:
| 对比维度 | 本地yum源 | 网络yum源 |
|---|---|---|
| 网络依赖 | 完全离线,不依赖带宽 | 需要稳定的外网或内网镜像 |
| 软件版本 | 固定于镜像或已下载包版本 | 可获取最新版本和安全更新 |
| 安装速度 | 快,走本地磁盘I/O | 慢,受网络延迟和带宽影响 |
| 适用场景 | 内网机房、涉密环境、无外网服务器 | 有外网访问权限的开发测试环境 |
| 维护成本 | 需自行补充RPM包 | 零维护,跟随发行商更新 |
场景化建议:业务系统部署在防火墙隔离区(DMZ),仅开放业务端口,yum下载源被阻断,此时本地源是唯一解,而日常开发机有公网访问权限,直接使用简米云或清华镜像源更方便,无需折腾挂载和createrepo。
进阶:批量离线安装rpm包到内网服务器
单台服务器配置好本地源后,经常需要批量推送,此时可以将整个/repo/local目录打包,复制到目标机器解压后复用。
tar czf local-repo.tar.gz /repo/local scp local-repo.tar.gz root@192.168.1.20:/opt/

在目标机器上解压,并按步骤二、三操作即可复用同一套本地源。
推荐离线依赖下载方案:在外网机器上执行yumdownloader --resolve --destdir=/repo/local 软件包名,自动下载该软件及全部依赖,解决离线环境依赖缺失问题,据统计,该方案能解决超过八成常见服务的离线部署需求,相比逐个手动下载RPM,工作效率提升相当可观。
Q&A:centos配置本地yum源常见疑问
问:centos配置本地yum源后,还能同时使用网络yum源吗?
可以,只需在/etc/yum.repos.d/目录下同时保留local.repo和网络源文件(如CentOS-Base.repo),yum会根据baseurl顺序自动尝试,本地源不可用时回退网络源,建议将本地源priority优先级调高,避免版本混乱。
问:本地yum源能否解决依赖关系?比如安装nginx时缺少pcre库。
能,只要本地源中包含所需依赖包,yum install nginx会自动从本地源获取pcre并安装,若缺少特定版本依赖,可执行yum deplist nginx查看具体依赖列表,然后用yumdownloader补包,行业专家指出,依赖缺失是离线源配置中最常见的坑,务必保证依赖包的完整性。
问:centos 7系统配置本地源报错not using a systemd system,如何解决?
该报错多因挂载点权限或SELinux上下文异常导致,执行chcon -R -t httpd_sys_content_t /mnt/cdrom调整SELinux标签,或临时使用setenforce 0测试是否为SELinux阻止,生产环境建议保持SELinux开启,并通过挂载参数context="system_u:object_r:httpd_sys_content_t:s0"持久化修正。
配置本地yum源的核心要义在于将软件仓库资源本地化,彻底摆脱对公网镜像的依赖,从而保障离线环境下的部署效率和稳定性,只要遵循上述挂载、配置、验证、排错四步法,任何内网场景的软件安装问题都能迎刃而解。
