yum 3.4.3 离线部署实战:仅下载 10 个依赖包的 3 步离线安装方案
yum 3.4.3 离线部署实战:仅下载 10 个依赖包的 3 步离线安装方案
在企业级Linux运维中,离线环境下的软件部署一直是系统管理员面临的棘手问题。特别是在生产服务器、内网环境或安全隔离区域,网络访问受限的情况下,如何高效完成软件安装成为关键挑战。本文将深入探讨yum 3.4.3版本中--downloadonly选项的高级应用,提供一套完整的离线部署解决方案。
1. 离线部署的核心原理与准备工作
yum作为RPM包管理器,其离线部署能力主要依赖于三个核心功能:--downloadonly下载选项、localinstall本地安装命令以及createrepo仓库创建工具。这三者协同工作,构成了离线部署的技术基础。
为什么选择yum而非直接使用rpm?关键在于依赖关系自动处理。直接使用rpm安装时,管理员需要手动解决所有依赖包,这在复杂软件环境中几乎不可行。而yum的localinstall能够自动解析本地仓库中的依赖关系,大幅降低部署复杂度。
准备工作中需要特别注意:
- 确保在线环境与离线环境的操作系统版本完全一致
- 确认yum版本为3.4.3(可通过
yum --version查看) - 准备足够的存储空间,建议预留至少5GB用于存放下载的rpm包
提示:使用
df -h命令检查磁盘空间,特别是/var目录的可用空间,因为yum默认将包下载到/var/cache/yum。
2. 三步骤离线部署方案详解
2.1 精准下载依赖包
在联网机器上执行下载操作时,推荐使用以下优化命令:
mkdir -p /opt/offline_packages yum install --downloadonly --downloaddir=/opt/offline_packages \ --installroot=/tmp/empty_root \ --releasever=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)) \ gcc-c++ make cmake httpd mariadb-server postgresql \ python3-devel openssl-devel zlib-devel参数解析:
--downloaddir:指定自定义下载目录,避免污染默认缓存--installroot:使用空目录防止意外安装--releasever:精确匹配当前系统版本
常见问题处理:
- 若出现"没有可用软件包"错误,尝试先运行
yum clean all && yum makecache - 对于"无法解析主机"错误,检查
/etc/yum.repos.d/下的仓库配置
2.2 创建本地yum仓库
将下载的rpm包传输到目标机器后,需要建立本地仓库索引:
# 安装createrepo工具(在线环境) yum install -y createrepo # 在离线环境中创建仓库元数据 cd /opt/offline_packages createrepo --database --update .仓库目录结构应如下:
/opt/offline_packages/ ├── repodata/ │ ├── filelists.xml.gz │ ├── other.xml.gz │ └── primary.xml.gz └── *.rpm高级技巧:
- 使用
--workers=4参数加速大型仓库的元数据生成 - 添加
--checksum=sha256增强完整性校验 - 对于多架构环境,使用
--repo=myrepo创建独立仓库
2.3 离线安装与验证
配置目标机器的yum源指向本地仓库:
cat > /etc/yum.repos.d/local.repo <<'EOF' [local] name=Local Repository baseurl=file:///opt/offline_packages enabled=1 gpgcheck=0 EOF安装软件包并验证:
yum --disablerepo=\* --enablerepo=local install gcc-c++ rpm -qa | grep gcc-c++关键参数说明:
--disablerepo=\*:禁用所有远程仓库--enablerepo=local:仅启用本地仓库--nogpgcheck:如需跳过GPG验证(仅限可信环境)
3. 实战:10个核心依赖包离线部署
以下是经过验证的10个常用软件包及其依赖关系:
| 主包名称 | 典型依赖数 | 总下载大小 | 关键依赖项 |
|---|---|---|---|
| gcc-c++ | 5-8 | ~50MB | libstdc++-devel, glibc-devel |
| httpd | 4-6 | ~3MB | apr, apr-util |
| postgresql | 10-15 | ~30MB | libicu, libxslt |
| python3-devel | 3-5 | ~15MB | python3-libs, tkinter |
| openssl-devel | 2-3 | ~5MB | openssl-libs, zlib |
| nginx | 3-5 | ~2MB | pcre, gd |
| docker-ce | 8-12 | ~80MB | containerd, libseccomp |
| nodejs | 6-10 | ~25MB | npm, v8-engine |
| mysql-server | 12-18 | ~150MB | protobuf, libaio |
| ansible | 5-8 | ~10MB | sshpass, paramiko |
下载这些包的完整命令:
yum install --downloadonly --downloaddir=/opt/offline_packages \ gcc-c++ httpd postgresql python3-devel openssl-devel \ nginx docker-ce nodejs mysql-server ansible4. 高级技巧与故障排除
依赖树分析工具:
repoquery --requires --resolve <package>空间优化策略:
- 使用
--exclude=kernel*跳过内核相关包 - 添加
--archlist=x86_64,noarch限定架构 - 通过
yumdownloader替代完整安装命令下载特定包
常见错误解决方案:
依赖缺失错误:
yum deplist <package> | grep provider版本冲突处理:
yum versionlock exclude <package>仓库缓存更新:
yum clean all && yum makecache
性能优化建议:
- 并行下载:
yum-plugin-fastestmirror - 增量更新:
createrepo --update - 仓库签名:
gpg --gen-key+createrepo --gpgkey
对于大规模部署,可考虑将本地仓库配置为网络共享(NFS/HTTP),便于多台机器访问。在企业环境中,建议结合SaltStack或Ansible实现自动化批量部署。
