openEuler 内网源怎么搭
内网或完全离线环境里,openEuler 客户端无法访问官方镜像站,需要在内网自建软件源。两条常见路径:一是有外网中继机时,用 rsync 把官方仓库完整同步到内网服务器;二是直接使用官方提供的 everything 或全量镜像离线介质。同步完成后用 Nginx 或 httpd 以 HTTP 方式发布目录,客户端再用 dnf config-manager 把源指过来。目录结构要保持原始形态,客户端才能正确读取元数据。
基本信息
| 适用平台 | openEuler 20.03 LTS / 22.03 LTS / 24.03 LTS 等 |
|---|---|
| 同步工具 | rsync(配 --delete 保持与上游一致) |
| 发布方式 | Nginx 或 httpd 提供 HTTP 访问 |
| 客户端配置 | dnf config-manager --add-repo 或手写 .repo |
| 目录要求 | 保留 repodata 原始结构,新增包后更新元数据 |
典型使用场景
- 完全隔离内网:生产网不能出外网,统一从内网源装包与打补丁
- 多机批量部署:上百台客户端指向同一个内网源,避免重复下载
- 补丁基线统一:把验证过的包放入内网源,控制全网可安装的版本范围
- 离线现场:临时用 everything 镜像做本地源完成装机与装包
- 混合架构:x86_64 与 aarch64 各自同步一套 repodata 供不同机型使用
同步与发布(有外网中继机时)
同步与发布(有外网中继机时)
dnf install -y rsync nginx
rsync -avz --delete rsync://mirror.example.com/openeuler/openEuler-22.03-LTS/ \
/data/repo/openEuler-22.03-LTS/ # 保持上游目录结构
ln -s /data/repo/openEuler-22.03-LTS /usr/share/nginx/html/repo/openeuler
nginx -t && systemctl enable --now nginx
curl -I http://10.0.0.10/repo/openeuler/OS/x86_64/repodata/repomd.xml # 验证可访问客户端接入与验证
客户端接入与验证
dnf config-manager --add-repo http://10.0.0.10/repo/openeuler/OS/x86_64
dnf clean all && dnf makecache # 刷新元数据缓存
dnf repolist -v | head -20 # 确认新源已启用
sed -i 's/^enabled=1/enabled=0/' /etc/yum.repos.d/openEuler.repo # 停用外网源
dnf install -y vim # 用内网源实际装一个包验证
# 自建源新增包后更新元数据:
createrepo_c --update /data/repo/openEuler-22.03-LTS/OS/x86_64环境要素核对
| 环节 | 检查点 | 常见问题 |
|---|---|---|
| 同步 | 上游地址与 LTS 版本 | 版本写成 rolling 导致内容漂移 |
| 同步 | 磁盘余量 | 全量仓库体积大,同步中途空间不足 |
| 发布 | HTTP 可达与权限 | 目录权限不足,客户端 403 |
| 发布 | 目录层级 | baseurl 未指到含 repodata 的目录 |
| 客户端 | 架构匹配 | x86_64 客户端指向 aarch64 路径,元数据解析失败 |
| 元数据 | createrepo_c 更新 | 新增包未更新元数据,客户端看不到 |
内网源目录建议保留 repodata 原始结构;自行新增 rpm 后用 createrepo_c --update 更新元数据,否则客户端列表里不会出现新包。
同步脚本中断会留下不完整的 repodata,客户端报校验错误;脚本末尾应加一次完整性校验再宣告成功。