最稳妥方式是reposync+createrepo搭建局域网yum源,比挂iso更全、更可控;挂iso仅适用于应急或极简场景,包少、无更新、不包含extras/epel等扩展仓库。

直接用 reposync + createrepo 搭建局域网YUM源最稳妥,比挂ISO更全、更可控;挂ISO只适合应急或极简场景,包数量少、没更新、不带 extras/epel 等扩展仓库。
用 reposync 同步远程源到本地(需联网机器)
这是生成高质量离线源的核心步骤。必须在能联网的机器上操作,目标是把 BaseOS、AppStream、EPEL 等完整同步下来,不是只拷几个 RPM。
-
reposync会按仓库配置自动下载所有 RPM 包,保留目录结构,比手动复制/mnt/cdrom/Packages强得多 - 先确认要同步的 repo 已启用:
yum repolist enabled,重点关注baseos、appstream、epel(如果已配置) - 执行同步(以 Rocky 9.2 为例):
reposync --download-metadata --downloadcomps --repoid=baseos --download-path=/data/yum-mirror - 加
--download-metadata才能拿到repodata/原始数据,否则createrepo会慢且可能漏信息;--downloadcomps保证 groupinstall 可用 - 同步完目录结构类似:
/data/yum-mirror/baseos/repodata/+/data/yum-mirror/baseos/Packages/
用 createrepo 生成元数据(关键一步,不能跳)
离线环境里 YUM 依赖 repodata/ 下的 primary.xml.gz、filelists.xml.gz 等文件解析依赖和搜索包。没有它,yum install 会报错 “No package found” 或 “Cannot retrieve repository metadata”。
- 进入同步后的仓库根目录:
cd /data/yum-mirror/baseos - 运行:
createrepo -v --workers=4 --database .(--database启用 sqlite 支持,加速后续查询) - 如果同步了多个 repo(如 baseos + appstream),每个都要单独跑一次
createrepo,不能只在父目录跑 - 常见错误:
createrepo报 “no packages found”,说明路径不对,或者Packages/目录下没 RPM;检查ls Packages/*.rpm | head
通过 HTTP 提供服务(推荐 httpd,别用 file://)
客户端用 file:// 虽然能跑,但不支持并发、没缓存控制、无法跨主机访问,真要部署到多台服务器,必须走 HTTP。
- 安装并启动
httpd:yum install -y httpd && systemctl enable --now httpd - 把镜像目录软链进 Web 根目录:
ln -sf /data/yum-mirror /var/www/html/mirror - SELinux 默认阻止访问自定义路径,必须加策略:
semanage fcontext -a -t httpd_sys_content_t "/data/yum-mirror(/.*)?" && restorecon -Rv /data/yum-mirror - 防火墙放行:
firewall-cmd --add-service=http --permanent && firewall-cmd --reload - 验证能否访问:
curl -I http://your-server-ip/mirror/baseos/repodata/repomd.xml,返回 200 即可
客户端配置 repo 文件(baseurl 必须带 /,且禁用 gpgcheck)
客户端配错 baseurl 是最常见失败点:少斜杠、路径错位、协议写成 https 却没配证书,都会导致 yum makecache 卡住或报 404。
- repo 文件示例(保存为
/etc/yum.repos.d/local.repo):[baseos] name=Local BaseOS baseurl=http://192.168.2.1/mirror/baseos/ enabled=1 gpgcheck=0
-
baseurl末尾必须有/,否则 YUM 会拼出.../baseos/repodata/repomd.xml变成.../baseosrepodata/repomd.xml(404) -
gpgcheck=0是离线环境刚需——你没法导入 GPG key,也不需要校验;设为 1 会导致yum makecache失败并提示 “GPG key retrieval failed” - 执行:
yum clean all && yum makecache,看到 “Metadata cache created.” 才算成功
真正麻烦的是元数据一致性:同步中途断电、createrepo 没加 --database、HTTP 服务目录权限不对,都会让客户端查不到包或依赖解析失败。建议首次部署后,用 yum list available | head -10 和 yum deplist vim-enhanced 实测两遍。











