核心是先完整拉取依赖链再统一安装:rpm系用yumdownloader --resolve或repotrack下载全依赖,deb系用apt download --download-only,离线机须用yum localinstall或apt install而非rpm/dpkg强制安装,确保系统版本与架构一致。

在 Linux 运维中,把 RPM 或 DEB 包连同全部依赖一起打包迁移到离线服务器,核心是“先完整拉取、再统一搬运、最后正确安装”,不能只下载主包而漏掉底层依赖。关键不在下载单个文件,而在确保依赖图完整闭合。
一、RPM 系统(CentOS/RHEL/AlmaLinux):用 yumdownloader 或 repotrack 打包依赖
推荐使用 yumdownloader --resolve,它不检查本地是否已安装,直接解析并下载完整依赖链:
- 安装工具:
yum install -y yum-utils - 创建目录并下载:
mkdir /offpkg/jq && yumdownloader --resolve --destdir=/offpkg/jq jq - 打包压缩:
tar -zcf jq-offline.tar.gz -C /offpkg jq
若需包含已安装但未显式声明的间接依赖(如 glibc、openssl-libs),改用 repotrack:
-
repotrack -p /offpkg/jq jq(自动递归下载所有可从仓库获取的依赖,含基础系统库) - 再 tar 打包即可
二、DEB 系统(Ubuntu/Debian):用 apt download + apt-rdepends 或 --download-only
apt 原生命令支持直接下载依赖,无需额外工具:
- 创建目录:
mkdir /offpkg/nginx - 下载主包及全部依赖:
apt download -o dir::cache::archives="/offpkg/nginx" --download-only nginx - 验证完整性:
dpkg-scanpackages /offpkg/nginx | gzip > /offpkg/nginx/Packages.gz(可选,为后续建本地源准备) - 打包:
tar -zcf nginx-offline.tar.gz -C /offpkg nginx
如需更细粒度控制(比如排除已存在基础库),可用 apt-rdepends --print-uris nginx | grep "\.deb" | cut -d' ' -f1 | xargs wget -P /offpkg/nginx/,但操作略繁琐,日常推荐第一种。
三、离线服务器安装:优先用包管理器自动解依赖,不用 rpm/dpkg 强制装
搬运到目标机后,不要直接 rpm -ivh *.rpm 或 dpkg -i *.deb,容易因顺序或缺失依赖失败:
- RPM 系统:
cd /offpkg/jq && yum localinstall -y *.rpm(CentOS 7)或dnf install -y *.rpm(CentOS 8+/RHEL 8+) - DEB 系统:
cd /offpkg/nginx && apt install -y ./*.deb(会自动调用 dpkg 并补依赖);若提示缺依赖,先运行apt --fix-broken install
注意:确保离线机系统版本、架构(x86_64/aarch64)与下载机完全一致,否则依赖解析可能错位。
四、进阶建议:对高频场景建本地仓库更可持续
如果不止装一次,而是要长期维护多套离线环境,建议在离线服务器上搭建本地 YUM 或 APT 仓库:
- RPM:
yum install -y createrepo && createrepo /offpkg/jq && 配置 /etc/yum.repos.d/local.repo - DEB:
apt install -y dpkg-dev && dpkg-scanpackages . /dev/null | gzip > Packages.gz && 配置 /etc/apt/sources.list - 之后只需
yum install jq或apt install nginx,体验接近在线环境











