debian/ubuntu用apt-rdepends展开依赖后apt download批量下载,rhel/centos等用dnf download --resolve或yumdownloader --resolve;均需显式解析依赖,不可依赖单条命令自动拉全。

直接看系统类型:Debian/Ubuntu 用 apt download + apt-rdepends,RHEL/CentOS/Rocky/AlmaLinux 等用 dnf download --resolve 或 yumdownloader --resolve。别混用,也别指望单条命令自动搞定全部依赖——依赖必须显式展开、逐个下载或批量解析。
Debian/Ubuntu:用 apt-rdepends 展开依赖再 apt download
apt download 本身不拉依赖,只下主包;想拿全运行时依赖,必须先用 apt-rdepends 拆出干净的包名列表。
- 先装工具:
sudo apt install apt-rdepends -y - 生成无冗余依赖列表(排除预依赖、建议、冲突):
apt-rdepends --no-pre-depends --no-suggests --no-recommends --no-conflicts --recurse nginx | grep "^\w" | sort -u | tr -d "" - 批量下载:
apt download $(上述命令)—— 所有 .deb 会落在当前目录 - 注意:如果某包已存在缓存且版本匹配,
apt download会跳过;可先apt clean避免误用旧包
RHEL/CentOS/Rocky/AlmaLinux:dnf download --resolve 是首选
dnf download 默认只下主包;加 --resolve 才触发完整依赖解析,行为接近 apt-get install --download-only,但更轻量、不写缓存、不改系统状态。
- 确保插件就位:
sudo dnf install dnf-plugins-core -y - 下载主包及其全部运行时依赖:
dnf download nginx --resolve --destdir=/tmp/offline - 不加
--resolve就只下nginx-*.rpm,后续rpm -i必然报错缺依赖 - 若提示
Unknown option --resolve,说明 dnf 版本太老(如 CentOS 7 默认 yum),应换用yumdownloader --resolve
CentOS 7 / RHEL 7:yumdownloader --resolve 是唯一可靠方式
yum --downloadonly 虽能下依赖,但会把包塞进 /var/cache/yum/,路径难控、易混旧包;yumdownloader 更干净,支持自定义路径和依赖展开。
- 先装工具:
sudo yum install yum-utils -y - 下载并解依赖:
yumdownloader --destdir=/tmp/pkgs --resolve httpd - 它会把
httpd和所有 runtime 依赖(如apr,openssl-libs)一起下到/tmp/pkgs/ - 若漏包(常见于多 arch 或 exclude 配置),检查
yum repolist是否启用了对应仓库(如epel)
离线部署前最容易被忽略的三件事
下了包≠能装上。物理隔离环境下,校验、路径、索引缺一不可。
- 别直接
rpm -i *.rpm:顺序错乱或签名缺失会导致失败;应统一用dnf install ./pkg.rpm(自动排序+校验)或建本地源 - 所有 .rpm/.deb 必须放在同一目录,路径不能含空格或中文,否则
dpkg-scanpackages或createrepo会静默失败 - 内网机
/etc/apt/sources.list或/etc/yum.repos.d/配置后,必须执行apt update或dnf makecache才能识别新包——很多人卡在这步,以为包没下全











