结论其实很清楚:把 ISO 镜像挂载后,直接作为本地 yum 源来使用,是 CentOS 7 配置本地软件库最稳定、最省心的方法。CentOS 7 安装 ISO 本身就是一套完整且自洽的 yum 仓库,自带可用的仓库元数据,一般不需要额外执行 createrepo。真正影响配置是否成功的关键,并不在于“要不要重建仓库”,而在于挂载和 repo 配置是否准确:挂载时必须使用 -o loop,baseurl 必须写成 file:///mnt/cdrom,同时 enabled=1 和 gpgcheck=0 这两项也不能写错;如果还希望系统重启后依然可用,就要通过 /etc/fstab 一并配置开机自动挂载,这样本地 yum 源才算真正配置稳定。

直接说结论:使用挂载好的 ISO 镜像来配置本地 yum 源,是最可靠、最省事的做法;不要轻易选择手动复制 RPM 包再配合 createrepo,除非你确实需要自定义软件包集合或删除某些包。
CentOS 7 的安装 ISO 镜像本身就是一个完整、自带 repodata 的 yum 仓库,挂载后即可直接使用,无需额外重新生成仓库元数据。
挂载 ISO 镜像并启用 file:// 源
这通常是大多数离线安装、内网部署场景下配置 CentOS 7 本地 yum 源的首选方案。重点不在“如何新建仓库”,而在“如何挂载稳定、配置正确”:
mount -o loop /path/to/CentOS-7-x86_64-DVD-1804.iso /mnt/cdrom—— 必须带上-o loop,否则通常会报错 “you must specify the filesystem type”baseurl路径必须写为file:///mnt/cdrom(注意是三个斜杠),少写一个都会导致解析失败,执行yum makecache时可能会被静默跳过- 挂载点目录(例如
/mnt/cdrom)需要提前通过mkdir -p创建,同时还要确认 SELinux 不会拦截访问(如果启用了 enforcing 模式,可临时切换为 permissive:setenforce 0) - 尽量不要使用
/media/cdrom作为挂载点——很多教程会这样写,但该目录默认可能被 udev 或桌面环境占用,容易出现挂载后目录为空或只读异常的问题
yum.repos.d/ 配置文件里最容易写错的三项
完成 ISO 挂载后,下一步就是编写 repo 配置文件。下面几个参数看起来简单,但往往最容易导致 CentOS 7 本地软件库失效:
enabled=1:必须写成数字1,如果写成yes、true,或者格式不规范,都可能让 yum 源无法正常启用gpgcheck=0:ISO 镜像中的 GPG key 路径并不完全统一(有的在/mnt/cdrom/RPM-GPG-KEY-CentOS-7,有的在/mnt/cdrom/misc/keys/),因此很多情况下直接关闭校验更省事;如果一定要开启,请务必确认gpgkey路径真实存在且当前系统可读name值尽量避免包含空格或特殊字符(例如[centos-local]是合法的,但像name=CentOS Local这种写法在旧版本 yum 中可能出现解析截断)
开机自动挂载 ISO 镜像
系统重启后挂载丢失,是配置本地 yum 源时最常见的问题之一。通过 /etc/fstab 设置开机自动挂载,通常是最稳妥的处理方式:
- 先确认 ISO 文件路径长期稳定(例如放在
/opt/CentOS-7-x86_64-DVD-1804.iso,不要放在/tmp或普通用户家目录中) - 在
/etc/fstab文件末尾添加一行:/opt/CentOS-7-x86_64-DVD-1804.iso /mnt/cdrom iso9660 defaults,loop 0 0 - 执行
mount -a测试配置语法是否正确;如果失败,可以查看dmesg | tail,常见原因包括 ISO 路径不存在,或者 loop 设备已被占满(可用losetup -a检查) - 不建议依赖 systemd mount unit——CentOS 7 默认环境下,对 ISO 挂载相关支持并不完善,某些情况下还可能导致启动过程卡顿
验证本地源是否真正生效
不要只看 yum makecache 输出 “Metadata cache created”,因为它有可能跳过了你新配置的本地源而没有明显报错:
- 运行
yum repolist enabled,确认输出中存在你配置的 repo ID(例如local),并且状态显示为enabled - 运行
yum --disablerepo="*" --enablerepo="local" list httpd,强制仅查询本地 yum 源;如果返回 “A vailable Packages”,通常说明路径和 repodata 都没有问题 - 如果执行
yum install httpd时系统依然尝试连接公网,那么大概率是其他 repo 文件中仍然存在enabled=1的网络源,可以通过ls /etc/yum.repos.d/*.repo检查,并将暂时不用的 .repo 文件改名或移走
真正棘手的问题,往往不在配置命令本身,而在于挂载点的持续可用性、GPG key 路径变化,以及多个 repo 配置文件之间的优先级冲突——这些细节看似不起眼,却很容易导致 CentOS 7 本地 yum 源“表面已经配好,实际却无法正常工作”。
