构建企业内部YUM镜像源需用rsync同步公网源至内网服务器,配合createrepo_c更新元数据,使用nginx/httpd提供HTTP服务,按发行版分层存储并配置客户端baseurl,通过cron定时同步与维护。

构建企业内部 YUM 镜像源,核心是把公网镜像站(如阿里云、清华源)的 RPM 包和元数据完整、可控、可定时地同步到内网服务器,并对外提供 HTTP/HTTPS 访问服务。它不是简单改个 repo 地址,而是建立一套自主可控、带宽节省、离线可用、多版本兼容的本地软件分发基础设施。
选型与基础环境准备
推荐使用 CentOS Stream 8/9、Rocky Linux 或 AlmaLinux 8/9 作为镜像服务器操作系统,避免使用已 EOL 的 CentOS 7(官方源已停止更新,部分归档路径不可靠)。系统需满足:
- 至少 200GB 可用磁盘空间(同步 full mirror 时,CentOS Stream 9 BaseOS + AppStream 单架构约 120GB,加上 EPEL、PowerTools 等会显著增加)
- 稳定网络(首次同步建议走专线或夜间低峰时段)
- 安装基础工具:createrepo_c(生成仓库元数据)、rsync(高效增量同步)、httpd 或 nginx(提供 Web 服务)
同步方式:rsync 比 reposync 更可靠
不推荐用 yum-utils 中的 reposync——它依赖本地 yum 配置,易受 repodata 解析失败、GPG 校验干扰、断点续传不稳定等问题影响。生产环境首选 rsync 直连上游镜像站:
- 阿里云镜像站 rsync 地址示例:
rsync://mirrors.aliyun.com/centos-stream/9-stream/ - 清华源 rsync 地址示例:
rsync://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/ - 同步命令模板:
rsync -avrt --delete --exclude='repodata' rsync://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/ /var/www/html/centos9/baseos/ - 同步后必须运行 createrepo_c --update /var/www/html/centos9/baseos/ 更新 repodata,否则客户端无法识别新包
仓库目录结构与客户端配置
为便于管理与扩展,建议按发行版+主干分支+组件分层组织:
-
/var/www/html/centos9/baseos/→ BaseOS 主仓库 -
/var/www/html/centos9/appstream/→ AppStream 扩展仓库 -
/var/www/html/epel9/→ EPEL 9 扩展源 - 对应客户端 repo 文件(如
/etc/yum.repos.d/internal.repo)中 baseurl 应指向:http://your-mirror-server/centos9/baseos/ - 务必关闭 gpgcheck(
gpgcheck=0),除非你自行导入并维护 GPG 密钥;否则同步后的 repodata 签名与内网路径不匹配会导致验证失败
自动化与运维要点
镜像不是一次性的,需纳入日常运维:
- 用 cron 定时执行 rsync + createrepo_c,例如每天凌晨 2 点同步 BaseOS 和 AppStream
- 设置日志记录与失败告警(可用 mailx 或集成企业微信/钉钉 webhook)
- 定期清理过期 ISO、旧版 repodata(
createrepo_c --basedir /path --no-database --update可跳过 sqlite 重建加速) - HTTP 服务需启用目录索引(
Options +Indexes)方便人工校验,但生产环境建议禁用,仅通过明确 URL 访问


















