麒麟操作系统实战:利用createrepo构建高效离线yum仓库

张开发
2026/4/12 18:33:57 15 分钟阅读

分享文章

麒麟操作系统实战:利用createrepo构建高效离线yum仓库
1. 为什么需要离线yum仓库在麒麟操作系统上工作时经常会遇到这样的场景服务器位于内网环境无法连接外网或者需要确保软件版本绝对稳定可控。这时候离线yum仓库就成了救命稻草。我曾在某次系统升级时因为网络波动导致依赖包下载失败整个升级流程卡住两小时从那以后就养成了重要环境必建离线源的习惯。离线仓库最大的优势是稳定性和可控性。你可以把所有需要的rpm包提前下载好放在本地目录中通过createrepo工具生成元数据就能像使用官方源一样用yum命令安装软件。这种方式特别适合以下场景生产环境服务器不允许连接外网需要批量部署相同软件版本的集群对软件版本有严格要求的特殊环境网络条件不稳定但需要保证安装成功率提示建议将离线仓库放在/data或/opt这类独立分区避免系统根分区空间不足2. 准备工作与环境配置2.1 创建缓存目录结构首先需要规划好目录结构我习惯用这样的布局mkdir -p /data/yum/{packages,metadata}这里把rpm包和元数据分开存放方便后期维护。packages目录存放所有下载的rpm包metadata目录后面会由createrepo自动生成索引文件。2.2 下载所需rpm包使用yumdownloader工具可以轻松获取软件包及其依赖yumdownloader --resolve --destdir/data/yum/packages make gcc python3几个关键参数说明--resolve自动解析依赖关系--destdir指定下载目录最后跟的是需要下载的软件包列表实测下来下载整套开发工具链约200个包大概需要5-10分钟具体取决于网络速度。如果已经在外网机器下载过可以直接用scp或U盘拷贝到目标机器scp -r userremote:/data/yum /data/3. 使用createrepo构建仓库3.1 安装createrepo工具麒麟系统默认可能没有安装这个工具先执行yum install createrepo -y新版本建议使用createrepo_c性能更好yum install createrepo_c -y3.2 生成仓库元数据进入rpm包所在目录执行cd /data/yum/packages createrepo .这个过程会扫描所有rpm包生成repodata目录里面包含primary.xml.gz包的基本信息filelists.xml.gz包含的文件列表other.xml.gz其他元数据repomd.xml元数据的校验信息第一次生成200个包大约需要30秒后续增量更新会快很多。3.3 增量更新技巧当仓库新增rpm包时不需要重新生成全部元数据createrepo --update .这个命令只会处理新增或修改的包大仓库可以节省90%以上的时间。4. 配置yum客户端4.1 创建repo配置文件在/etc/yum.repos.d/下新建local.repo[local-repo] nameLocal Repository baseurlfile:///data/yum/packages enabled1 gpgcheck0 priority1关键参数解释priority1设置最高优先级避免与其他源冲突gpgcheck0跳过签名检查内网环境可关闭baseurl支持file://、http://、ftp://等多种协议4.2 验证仓库可用性执行以下命令检查yum clean all yum repolist yum list available --disablerepo* --enablerepolocal-repo应该能看到你下载的所有软件包列表。如果遇到问题可以检查/var/log/yum.log获取详细错误信息。5. 高级技巧与优化5.1 仓库分组管理对于大型仓库可以按功能分组/data/yum ├── dev-tools ├── databases └── networking每个子目录单独运行createrepo然后在repo文件中配置多个baseurlbaseurlfile:///data/yum/dev-tools file:///data/yum/databases5.2 使用HTTP共享仓库如果需要多台机器共享可以用nginx搭建简单HTTP服务yum install nginx -y cat /etc/nginx/conf.d/yum.conf EOF server { listen 80; server_name yum.local; root /data/yum; autoindex on; } EOF systemctl start nginx客户端repo文件改为baseurlhttp://yum-server/packages5.3 定期同步更新对于长期使用的离线仓库建议设置定时任务同步更新0 3 * * * /usr/bin/rsync -avz --delete rsync://mirror.example.com/path /data/yum/packages createrepo --update /data/yum/packages这个例子每天凌晨3点同步官方源并更新元数据。6. 常见问题排查6.1 依赖解析失败如果遇到依赖问题可以尝试yum deplist package-name查看完整的依赖树。我遇到过某个包需要特定版本的情况解决方法是在下载时指定版本号yumdownloader package-1.2.36.2 空间不足处理大型仓库可能占用数十GB空间可以用以下命令查看du -sh /data/yum df -h如果空间紧张可以考虑删除旧版本软件包使用硬链接节省空间cp -al /data/yum /backup/yum6.3 元数据损坏修复有时createrepo可能异常中断导致元数据损坏解决方法很简单rm -rf /data/yum/packages/repodata createrepo /data/yum/packages

更多文章