挂载iso镜像最省事,因其自带完整repodata和packages目录,无需生成元数据;createrepo适用于自定义rpm包集合,但需严格匹配路径、权限及配置格式。

直接用光盘挂载或 createrepo 生成元数据,是唯二真正可用的方式;其他“复制 RPM 包 + 改 baseurl”的写法,99% 会报 repodata/repomd.xml not found 错误,根本无法 yum list。
为什么挂载 ISO 镜像最省事
CentOS/RHEL 光盘镜像本身已自带完整 repodata 目录和 Packages/,无需任何生成步骤。只要挂载成功,baseurl 指向挂载点即可立即生效。
-
mount -o ro /dev/sr0 /mnt(确认光驱设备名,常见为/dev/sr0或/dev/cdrom) - 检查挂载内容:
ls /mnt/Packages/ | head -n 3和ls /mnt/repodata/必须都非空 -
baseurl必须写成file:///mnt/(注意是三个斜杠,不是两个) - 若系统无光驱,可
mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt
用 createrepo 手动建 repo 的关键步骤
适用于自定义 RPM 包集合(比如内部编译的软件、补丁包),但必须确保 createrepo 已安装,且元数据生成路径与 baseurl 严格一致。
- 先装依赖:
yum install -y createrepo yum-utils(若离线,需提前下载createrepo-*.rpm并rpm -ivh --force --nodeps) - RPM 包统一放至目录如
/opt/app/,确保该路径下只有.rpm文件,无子目录干扰 - 执行:
createrepo /opt/app/(会生成/opt/app/repodata/) -
baseurl必须为file:///opt/app/,末尾不加斜杠,也不能写成file://opt/app/(少一个/就失败) - 每次新增 RPM 后,必须重新运行
createrepo --update /opt/app/,否则新包不会被识别
repo 配置文件里最容易错的三项
.repo 文件看着简单,但三处格式错误会导致整个仓库被忽略或静默失效。
-
enabled=1:必须是数字1,写成yes、true或空值均无效 -
gpgcheck=0:若未导入 GPG key,此项必须为0;设为1但无gpgkey=行,yum会直接拒绝加载 -
baseurl值中不能含空格、中文、特殊字符;路径区分大小写,/mnt/CentOS/≠/mnt/centos/
验证时别只信 yum repolist
yum repolist 显示 repolist: 0 不代表配置失败,只说明当前仓库没启用或没扫描到包;真正有效的验证是:
-
yum clean all && yum makecache(强制刷新元数据缓存) -
yum list available | head -n 5(看是否真能列出包) -
yum deplist httpd(测试依赖解析是否工作,这是元数据有效的铁证) - 若仍失败,直接查看错误源头:
cat /var/log/yum.log | tail -20
最常被忽略的是:挂载点权限(/mnt 目录需对 yum 进程可读)、SELinux 上下文(ls -Z /mnt 若显示 unconfined_u:object_r:unlabeled_t:s0,需 restorecon -Rv /mnt)、以及 createrepo 生成的 repodata 权限(必须是 644,不能是 600)。










