在CentOS系统中,yum是常用的包管理工具,用于安装、更新和删除软件包,在某些网络受限的环境中,如内网服务器或安全要求较高的场景,离线安装软件包成为必要需求,本文将详细介绍如何通过yum实现CentOS系统的离线安装,包括准备工作、依赖解决、包下载及离线部署等关键步骤。

离线安装前的准备工作
离线安装yum前,需确保有一台可联网的CentOS主机作为“构建主机”,以及目标离线主机,在构建主机上配置yum源,优先选择国内镜像源以提高下载速度,可通过修改/etc/yum.repos.d/CentOS-Base.repo文件,将baseurl替换为阿里云、网易等镜像地址,需确认构建主机与离线主机的系统版本一致,避免因版本不匹配导致依赖问题,准备一个足够大的存储设备(如U盘或移动硬盘),用于存放下载的rpm包及相关依赖。
使用yum下载rpm包及其依赖
离线安装的核心是获取完整的rpm包及其依赖关系,在构建主机上,可通过yumdownloader工具实现批量下载,该工具属于yum-utils包,需先执行yum install -y yum-utils安装,下载单个包时,直接运行yumdownloader --devel 包名,其中--devel参数会自动下载开发依赖包,若需批量下载多个包,可结合yum groupinfo命令获取组包列表,例如yum groupinfo "Development Tools" | grep "Package" | awk '{print $2}' | xargs -n1 yumdownloader,下载完成后,所有rpm包将存放在当前目录,需将其连同依赖包一同复制到离线主机的/opt/offline_pkgs目录下。
配置离线yum源
将rpm包传输至离线主机后,需创建本地yum源,在/etc/yum.repos.d/目录下新建一个repo文件,如local.repo如下:

[local] name=Local Repository basefile=file:///opt/offline_pkgs enabled=1 gpgcheck=0
这里basefile指向rpm包存放目录,gpgcheck=0表示禁用GPG校验(若需校验,需导入对应密钥),执行yum clean all清理缓存后,可通过yum repolist验证本地源是否生效,若提示“metadata file does not exist”,需使用createrepo工具生成仓库元数据:安装createrepo(若未安装)后,执行createrepo /opt/offline_pkgs,完成后再次验证yum源。
执行离线安装与依赖解决
配置好本地yum源后,即可进行离线安装,安装nginx只需运行yum install -y nginx,yum会自动从本地源解析依赖关系并安装所有必需的rpm包,若遇到依赖冲突,可尝试yum --skip-broken跳过 problematic 包,或手动下载缺失的依赖包后补充至本地源,安装完成后,可通过rpm -qa | grep 包名验证是否成功部署,对于大型软件,建议提前通过yum deplist 包名查看依赖列表,确保所有依赖均已下载。
更新与维护离线源
离线环境中,软件包的更新同样重要,定期在构建主机上更新yum源,重复下载rpm包的步骤,并将新包替换离线主机中的旧包,更新后,需重新执行createrepo生成元数据,可通过yum history list查看安装历史,或使用yum history undo回滚误操作,对于长期维护的离线环境,建议建立包管理规范,记录每次更新的软件包版本及依赖关系,避免版本混乱。

相关问答FAQs
Q1: 离线安装时提示“未找到匹配的参数”,如何解决?
A: 此问题通常因包名错误或依赖未下载导致,首先确认包名正确(可通过yum search在构建主机上验证),然后检查依赖包是否遗漏,使用yum deplist 包名列出所有依赖,逐一下载并补充至本地源,若包名包含版本信息(如nginx-1.18.0),需确保下载的版本与系统架构匹配(如x86_64或i686)。
Q2: 如何避免离线安装时重复下载相同的rpm包?
A: 可通过编写脚本实现增量下载,在构建主机上记录已下载的包列表(ls /opt/offline_pkgs/*.rpm > downloaded.list),下次下载时先对比新列表,仅下载新增或更新的包,使用yumdownloader --resolve --alldeps可确保一次性下载所有依赖,减少重复操作,定期清理过时的旧包(通过rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.rpm\n' | sort > installed.list对比后删除)也能节省存储空间。