统信UOS服务器离线包下载实战:从yum-utils组件到rpm包获取全解析

张开发
2026/4/12 20:15:14 15 分钟阅读

分享文章

统信UOS服务器离线包下载实战:从yum-utils组件到rpm包获取全解析
1. 为什么需要离线下载RPM包在企业级服务器环境中网络隔离是常见的安全策略。我遇到过不少客户现场他们的统信UOS服务器完全无法连接外网但又要安装各种软件包。这时候离线包就成了救命稻草。想象一下这样的场景你带着U盘走进机房面对一台与世隔绝的服务器需要部署MySQL数据库。没有离线包的话光是解决依赖关系就能让你崩溃。而有了yumdownloader这个神器你可以提前在有网络的机器上下载好所有需要的rpm包包括依赖项然后一次性带到现场安装。统信UOS作为国产操作系统的代表其1070a服务器版本基于Linux内核开发保留了yum/rpm这套成熟的包管理机制。但和CentOS/RHEL不同UOS的软件源地址、包命名规则都有所差异这也是为什么需要专门讲解在UOS环境下的操作技巧。2. yum-utils组件深度解析2.1 组件功能全景图yum-utils可不是只有yumdownloader这一个工具。在实际使用中我发现它包含的这些工具特别实用repoquery查询软件包信息时比rpm -qi更强大能显示依赖关系树package-cleanup清理旧内核包的神器解决/boot分区爆满问题yum-debug-dump当yum报错时生成调试报告yum-builddep为编译软件快速安装构建依赖但今天我们重点要用的是yumdownloader它专门为解决离线环境而生。有个冷知识这个工具早期其实叫yum-downloader后来才简化为现在的名字。2.2 UOS上的特殊注意事项在统信UOS 1070a上安装yum-utils时我发现有几个坑需要注意默认软件源可能不包含这个组件需要先配置官方源或企业内网源依赖的python版本必须匹配否则会出现奇怪的报错与Debian系的dpkg不同rpm不会自动解决依赖关系下载安装命令看起来简单yum install yum-utils但实际操作时我建议先更新缓存yum clean all yum makecache3. 实战下载MySQL离线安装包3.1 基础下载操作假设我们需要部署MySQL服务下面是具体操作步骤yumdownloader mysql-server这个命令会在当前目录下载mysql-server的rpm包。但问题来了——它只下载主包不包含依赖项。我在第一次使用时就被坑过到离线环境安装时才发现缺了几十个依赖。3.2 下载依赖项的正确姿势要连同依赖一起下载需要加上--resolve参数yumdownloader --resolve mysql-server但这样还是不够完美因为默认只下载直接依赖。更深层的依赖需要用--alldeps参数yumdownloader --resolve --alldeps mysql-server实测发现在UOS上这样操作会下载约120个包占用约300MB空间。建议专门建个目录存放mkdir mysql_offline cd mysql_offline yumdownloader --resolve --alldeps mysql-server3.3 指定架构和版本在企业环境中我们经常需要指定软件版本。比如要求MySQL必须是8.0.26版本yumdownloader --resolve mysql-server-8.0.26如果要限定架构比如只要x86_64的包yumdownloader --archlistx86_64 --resolve mysql-server4. 高级技巧与避坑指南4.1 下载整个软件组的技巧有时候我们需要下载的不是一个软件而是一组软件。比如Development Tools开发工具组yum groupinfo Development Tools yumdownloader --resolve Development Tools注意组名要用前缀并且建议先用groupinfo查看包含哪些软件包。4.2 离线安装的正确顺序下载完包之后在离线环境安装也有讲究。直接rpm -ivh *.rpm可能会因为依赖顺序报错。我推荐这样做先安装所有依赖rpm -ivh *.rpm --test 2dep.log grep is needed by dep.log | awk {print $1} | sort | uniq | xargs rpm -ivh再安装主包rpm -ivh mysql-server-*.rpm4.3 常见错误解决方案错误1No Match for argument这说明软件源中没有这个包。在UOS上需要确认是否启用了正确的软件源包名是否正确UOS的命名可能和CentOS不同错误2Error downloading packages可能是网络问题也可能是软件源配置错误。建议检查yum repolist ping repo.chinauos.com5. 企业级应用场景实战5.1 批量下载安全更新在企业环境中安全更新需要先测试再部署。我们可以用yumdownloader批量下载安全更新yum updateinfo list cves yumdownloader --resolve $(yum updateinfo list cves | awk {print $3})5.2 构建本地YUM仓库下载的包多了手动管理就变得困难。我建议搭建本地仓库mkdir /opt/uos_repo cp *.rpm /opt/uos_repo createrepo /opt/uos_repo然后在/etc/yum.repos.d/下创建local.repo文件[local] nameLocal UOS Repo baseurlfile:///opt/uos_repo enabled1 gpgcheck05.3 容器环境下的特殊处理在Dockerfile中直接使用yum install会遇到网络问题。我的解决方案是在宿主机上用yumdownloader下载所有需要的包通过COPY指令复制到容器内在容器内用rpm -ivh安装FROM uos:1070a COPY ./offline_packages /tmp/pkgs RUN cd /tmp/pkgs rpm -ivh *.rpm

更多文章