直接挂载iso镜像最省事,因其自带repodata和packages目录,只需mount成功并正确配置baseurl=file:///mnt/cdrom/、enabled=1、gpgcheck=0,即可被yum识别,无需createrepo或拷贝rpm包。

直接用挂载的 ISO 镜像最省事,不用生成 repodata,99% 的“复制 RPM + createrepo”失败,都是因为元数据路径、baseurl 或权限没对齐。
挂载 ISO 镜像后直接当 repo 用
CentOS/RHEL 官方 ISO 里自带 /repodata/ 和 Packages/,只要挂载成功,yum 就能认。不用装 createrepo,也不用拷包、生成索引。
-
mount -o loop /root/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom(确认/mnt/cdrom/repodata/repomd.xml存在) -
baseurl必须写成file:///mnt/cdrom/(开头三个/,结尾带斜杠) - 检查挂载点权限:
ls -l /mnt/cdrom/确保普通用户(或yum进程)有读权限;SELinux 上下文异常时加chcon -t public_content_t /mnt/cdrom - 如果系统无光驱又不想传 ISO,可用
mount -t iso9660 -o ro,loop /path/to.iso /mnt/cdrom
用 createrepo 手动建 repo 的真实条件
只适用于自定义 RPM 包集合(比如内部编译的工具、补丁包),但必须满足三个硬性前提,缺一不可:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- RPM 包必须全部放在同一级目录下,不能有子目录——
createrepo /opt/myrepo/要求/opt/myrepo/下直接是xxx.rpm,不是/opt/myrepo/Packages/xxx.rpm -
createrepo必须安装,离线环境需提前下载createrepo-*.rpm和依赖(如python-deltarpm),再用rpm -ivh --force --nodeps *.rpm - 生成完元数据后,
baseurl必须严格等于仓库根路径:file:///opt/myrepo/(末尾斜杠不能少,也不能多写一个/变成file://opt/myrepo/)
repo 配置文件里三处静默失效点
写完 /etc/yum.repos.d/local.repo 后,yum repolist 显示为 0 不代表配置错,但以下三项任一出错,仓库就完全被忽略:
-
enabled=1:只能是数字1,写yes、true、空值或注释掉这行,yum都不加载 -
gpgcheck=0:若设为1却没配gpgkey=行,yum直接跳过该源,不报错也不提示 -
baseurl值里不能含空格、中文、括号、特殊符号;路径大小写敏感:/mnt/CentOS/≠/mnt/centos/
验证仓库是否真生效,别只看 repolist
yum repolist 显示数量为 0,可能是缓存未刷新或路径无效;真正有效的验证方式是:
- 强制清缓存并重建:
yum clean all && yum makecache - 列出可用包:
yum list available | head -n 5(能看到包名才说明元数据可读) - 测试依赖解析:
yum deplist httpd(输出一堆dependency: xxx才证明repodata完整且被正确解析) - 查日志定位根源:
tail -20 /var/log/yum.log,常见错误如repodata/repomd.xml not found或Permission denied
最常被跳过的其实是挂载点或仓库目录的 SELinux 上下文和读权限,尤其在 CentOS 7+ 默认开启 SELinux 的场景下,ls -Z /mnt/cdrom 如果显示 context 不是 public_content_t 或 system_u:object_r:public_content_t,yum 就会静默拒绝访问。










