直接用file://挂载ISO仅限单机,多机共享须用HTTP/NFS/FTP并由createrepo生成repodata;否则YUM无法解析依赖,因ISO中BaseOS/AppStream等子目录未被正确baseurl指向且缺repodata元数据。

直接用 file:// 挂载 ISO 是最快能跑通的方案,但仅限单机;若需内网多台机器共用,必须走 HTTP(或 NFS/FTP),且 repodata 必须由 createrepo 生成——光有 RPM 包目录,YUM 客户端根本识别不了依赖关系。
挂载 ISO 后为什么 yum install 还报错“no package found”
常见错误现象是执行 yum install httpd 提示 “No match for argument”,或 yum repolist 显示 0 个包。根本原因不是挂载失败,而是仓库配置没指向正确的子目录。
- RHEL/CentOS 7/8/9 的 ISO 结构已拆分:
/mnt/BaseOS和/mnt/AppStream(Rocky/AlmaLinux 同理),不能只写baseurl=file:///mnt -
gpgcheck=0必须显式设置,否则默认启用校验,而本地 ISO 无 GPG 密钥会直接拒绝加载 - 旧版 CentOS 7 ISO 中的
Packages/目录虽含 RPM,但缺少repodata/,YUM 无法解析——除非你用createrepo手动补全
createrepo 生成 repodata 的关键参数和坑点
createrepo 不是“一键生成就完事”的工具,参数选错会导致客户端查不到包、groupinstall 失败、甚至元数据损坏。
- 首次生成必须加
-v(verbose)观察输出,确认是否扫描到所有.rpm文件;若提示 “0 packages” 就说明路径错了 - 同步 EPEL 或自定义包时,务必加
-g comps.xml(如果已有组定义文件),否则yum grouplist为空,@^development-tools这类组安装失效 - 后续新增 RPM 后,用
createrepo --update /path/to/repo,避免全量重刷——大仓库(>5000 包)全量耗时可能超 10 分钟 - CentOS Stream / Rocky 9+ 需要
createrepo_c(C 版本),原生createrepo可能报错 “unsupported metadata format”
HTTP 共享仓库时 baseurl 路径必须与 Web 根目录严格对齐
很多内网部署失败,问题不出在服务启动,而出在 URL 路径映射错位。比如 systemctl start httpd 成功,curl http://192.168.1.100 返回 index.html,但 yum makecache 仍失败。
- Apache 默认根目录是
/var/www/html,若仓库实际放在/var/www/html/localrepo,则客户端baseurl必须写成http://192.168.1.100/localrepo,少一个/localrepo就 404 - 不要用软链接“偷懒”:如
ln -s /data/myrepo /var/www/html/centos7,某些 Apache 配置下会因FollowSymLinks未启用导致 403 - SELinux 启用时,
httpd无法读取非标准路径(如/data/yum-repo),需执行semanage fcontext -a -t httpd_sys_content_t "/data/yum-repo(/.*)?" && restorecon -Rv /data/yum-repo
客户端验证时最容易忽略的三步
yum makecache 成功不代表源真正可用,必须实测依赖解析能力。
- 先运行
yum clean all,否则旧缓存可能掩盖baseurl错误 - 再执行
yum makecache,重点看最后几行是否出现 “Metadata Cache Created”,而非只看 “OK” - 最后必须测一个带依赖的包,例如
yum install nginx(非telnet这种单文件包),确认是否自动拉取openssl-libs、pcre等依赖——这才是 YUM 仓库生效的核心标志
真正麻烦的从来不是生成 repodata,而是路径层级、SELinux 上下文、HTTP 权限这三者交叉出的问题;一次配错,排查起来比重做还费时间。


















