linux软件仓库镜像同步本质是将远程yum/dnf仓库的rpm包和repodata元数据完整、增量、可控地复制到本地,构建离线可用、带宽节省、版本可控的分发基础设施;生产环境推荐rsync而非reposync,因其支持断点续传与差量传输,同步后须用createrepo_c --update重建repodata,再通过http服务发布并按分层路径配置客户端baseurl。

Linux 软件包仓库镜像同步,本质是把远程 YUM/DNF 仓库的 RPM 包和元数据(repodata)完整、增量、可控地复制到本地服务器,并对外提供可访问的服务。它不是改个 URL 就完事,而是构建一套离线可用、带宽节省、版本可控的分发基础设施。
同步核心:rsync 比 reposync 更稳更准
生产环境强烈推荐用 rsync 直连上游镜像站,而非 yum-utils 中的 reposync。原因很实在:
- rsync 基于文件层同步,支持断点续传、差量传输,首次同步后每次只拉取变化的文件,省带宽也省时间
- reposync 依赖本地 yum 配置,容易受 GPG 校验失败、repodata 解析异常、网络中断导致元数据不全等问题干扰
- 阿里云、清华源等主流镜像站都开放 rsync 协议,地址格式统一,例如:
rsync://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
同步后必须重建元数据
rsync 只复制 RPM 文件,不会自动生成或更新 repodata。客户端靠这个目录里的 XML 文件识别包名、依赖、校验和等信息。漏掉这步,客户端会提示“no packages found”。
- 安装 createrepo_c(比旧版 createrepo 更快更兼容):
yum install -y createrepo_c - 同步完成后执行:
createrepo_c --update /var/www/html/centos9/baseos/ - --update 参数只扫描新增/删减的 RPM,跳过未变的,速度明显快于全量重建
服务发布与客户端配置要匹配路径
仓库目录结构直接影响客户端 baseurl 的写法,建议按发行版+组件分层管理:
- /var/www/html/centos9/baseos/ → 对应 baseurl=http://mirror/centos9/baseos/
- /var/www/html/epel9/ → 对应 baseurl=http://mirror/epel9/
- HTTP 服务选 httpd 或 nginx 都行:httpd 开箱即用,默认根目录刚好对上;nginx 更轻量,适合高并发或需加 SSL 的场景
- 客户端 repo 文件中务必设 gpgcheck=0,除非你手动导入并维护上游密钥——同步后的 repodata 签名路径已变,原签名必然验证失败
ISO 挂载是最简离线方案
没有外网、也不需要持续更新时,直接挂载官方 ISO 是最快捷方式:
- 挂载命令:
mount /dev/cdrom /mnt(只读,安全可靠) - repo 文件 baseurl 写成:
baseurl=file:///mnt - 无需复制文件、无需生成 repodata、无需起 Web 服务,适合临时调试或应急部署
- 缺点是无法添加自定义 RPM,也不能自动更新,纯静态只读源











