dnf download --resolve 可一次性下载主包及其全部多级依赖,生成完整离线安装套件;关键在于提前安装 dnf-plugins-core、确保仓库就绪、用 --downloaddir 指定目录、下载后验证依赖完整性并打包交付。

直接用 dnf download --resolve 就能一次性拉齐主包及其全部多级依赖,生成可离线部署的完整安装套件。关键不在命令本身,而在于环境准备、依赖完整性验证和目录结构管理。
前置条件:确保插件可用且仓库就绪
dnf download 命令由 dnf-plugins-core 提供,必须提前安装:
- 运行
sudo dnf install -y dnf-plugins-core(若未安装) - 确认目标仓库已启用且元数据最新:执行
sudo dnf makecache - 检查是否启用了所需模块流(如 PostgreSQL 15 需启用
postgresql:15):用dnf module list postgresql查看,必要时dnf module enable postgresql:15
执行一站式下载:--resolve 是核心开关
该选项会递归解析所有层级依赖(包括间接依赖、条件依赖、模块化组件),不只是“一级依赖”:
- 创建专用目录,例如:
mkdir -p /opt/production-pkg/vim-offline - 执行完整命令:
sudo dnf download --downloaddir=/opt/production-pkg/vim-offline --resolve vim-enhanced - 如需同时下载多个主包(如 nginx + postgresql15-server),可并列写包名:
sudo dnf download --downloaddir=... --resolve nginx postgresql15-server
验证依赖完整性:避免漏包或版本错配
下载完成后别急着拷走,先做两件事确认“真正全量”:
- 用
rpm -qpR *.rpm | grep "not found"扫描所有下载的 RPM,检查是否有未满足的 Requires(说明某依赖未被拉取) - 运行
dnf repoquery --requires --resolve --tree vim-enhanced,对比输出的依赖树与下载目录中实际 RPM 文件名是否一一对应 - 若发现缺失(如
libicu.so.72对应的libicu-72.*.rpm缺失),手动补下:dnf download --downloaddir=... libicu
打包与交付:生成可复用的离线安装包
生产环境要求可重复、可审计,建议标准化交付物结构:
- 在下载目录中生成清单文件:
rpm -qpi *.rpm | grep -E "Name|Version|Architecture" > PACKAGE_MANIFEST.txt - 打包为压缩归档:
tar -czf vim-offline-bundle-$(date +%Y%m%d).tgz -C /opt/production-pkg/vim-offline . - 离线安装时,只需在目标机执行:
sudo dnf install *.rpm --disablerepo=* --enablerepo=local --nogpgcheck(前提:已将该目录配置为本地 repo 或直接用本地路径安装)

















