结论其实很明确:把ISO镜像挂载起来,直接作为本地 yum 源,用起来最稳,也最省心。CentOS 7 的安装 ISO 本身就是一套完整、自洽的 yum 仓库,不需要额外跑 createrepo。真正决定成败的,不是“仓库要不要重建”,而是挂载和配置要不要做对:挂载时必须带上 -o loop,baseurl 要写成 file:///mnt/cdrom,enabled=1、gpgcheck=0 这两项也不能配错;如果还想避免重启后失效,那就通过 /etc/fstab 把开机自动挂载一并处理好,这才算真正配稳了。

直接说结论:用挂载的 ISO 镜像配本地 yum 源,是最可靠、最省事的方式;别试图手动复制 RPM 包再用 createrepo,除非你真要定制包集合或剔除某些包。
CentOS 7 的安装 ISO 本身就是一个完整、自洽、带 repodata 的 yum 仓库,直接挂上就能用,不需要额外生成元数据。
挂载 ISO 镜像并启用 file:// 源
这是绝大多数离线场景下的首选做法。关键不是“怎么建”,而是“怎么挂得稳、配得准”:
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/ 配置文件里最容易错的三项
配完挂载,下一步就是写 repo 文件。以下参数看似简单,但每项都卡过人:
enabled=1:必须是数字1,写成yes、true或空格都会让源失效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 镜像
重启后挂载消失,是新手最常踩的坑。靠 /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 默认没启用
systemd-fsck@.service对 ISO 的支持,容易启动卡住
验证本地源是否真正生效
别只信 yum makecache 输出 “Metadata cache created”,它可能跳过了你的源:
- 运行
yum repolist enabled,确认输出里有你配置的源 ID(如local)且状态是enabled - 运行
yum --disablerepo="*" --enablerepo="local" list httpd,强制只查本地源;如果返回 “A vailable Packages”,说明路径和 repodata 都对 - 如果
yum install httpd还去连公网,大概率是其他 repo 文件里有enabled=1的网络源没禁用,用ls /etc/yum.repos.d/*.repo检查,把不用的 .repo 文件改名或移走
真正的麻烦不在配置步骤,而在于挂载点生命周期管理、GPG key 路径漂移、以及多个 repo 文件之间的优先级冲突——这些细节不显眼,但会让整个本地源“看起来配好了,实际不工作”。