首页/系统/Linux 运维命令速查/场景:离线/内网环境安装软件包

场景:离线/内网环境安装软件包

无外网的服务器:在联网机下载全量 RPM/DEB(含依赖)→ 传输 → 本地仓库或直接安装;要点是依赖闭包完整性。

Linux 运维命令速查系统更新于 2026-10-13

这个场景解决什么

内网服务器没有外网时,装包要先解决依赖闭包问题:在联网机器上把目标包连同它需要的全部依赖下载下来,再传输到目标机安装。临时应急可以用一次性传输的办法,长期方案则是自建内网仓库——前者容易漏依赖,后者一次搭好后续都省事。

基本信息

场景无外网环境安装或升级软件包
RPM 侧工具dnf download --resolve --alldeps;目标机用 dnf install 加本地文件
DEB 侧工具apt-get install --download-only 或 apt-get download;目标机用 dpkg -i 加依赖补齐
长期方案createrepo_c 生成仓库元数据,内网静态服务,客户端加仓库配置

典型使用场景

  • 隔离环境部署:生产网段无外网,需要一次性把所需软件带进去
  • 版本锁定:内网仓库固定版本,避免不同机器装到不同版本
  • 批量铺开:给几十台机器安装同一组包,用内网仓库比逐个拷贝可靠
  • 应急补包:业务出故障需要立刻补一个工具,走一次性下载通道
  • 审计要求:需要留存安装包的来源与版本记录

RPM 侧:下载全量依赖

RPM 侧:下载全量依赖
# 联网机(与目标机发行版、架构、版本一致)
dnf download --resolve --alldeps --destdir=/tmp/pkgs nginx -y
# 传输到目标机后离线安装
cd /tmp/pkgs && dnf install -y --disablerepo='*' ./*.rpm
rpm -qp --requires /tmp/pkgs/nginx*.rpm | head      # 安装前可核对依赖清单
rpm -ivh /tmp/pkgs/nginx*.rpm                       # 不用 dnf 时的底层写法,不自动解依赖

DEB 侧与内网仓库

DEB 侧与内网仓库
apt-get install --download-only -y nginx      # 包落在 /var/cache/apt/archives/
ls /var/cache/apt/archives/*.deb
dpkg -i /tmp/debs/*.deb                       # 目标机安装(顺序不对会报缺依赖)

# 内网仓库(RPM)
createrepo_c /srv/repo                        # 生成仓库元数据
# 客户端新增 /etc/yum.repos.d/local.repo,baseurl 指向内网地址,并配置 gpgcheck

# 内网仓库(DEB)
cd /srv/repo && dpkg-scanpackages -m . > Packages && gzip -k Packages

方案对照

方案优点局限
一次性下载依赖并传输起效快,适合应急容易漏依赖,跨版本时更麻烦
内网仓库(RPM/DEB)依赖自动解析,可版本化需要一台常驻服务与定期同步
离线镜像同步覆盖全量包,适合规模化占用存储大,同步周期长
容器镜像替代交付把依赖打包进镜像,隔离性好需要容器运行时与镜像分发通道
下载依赖时联网机与目标机必须一致:发行版大版本、架构、以及启用的仓库都要对齐。el8 上下的包混用到 el9,依赖关系会直接冲突。
离线安装时禁用仓库要写清楚:--disablerepo='*' 是为了避免客户端尝试联网超时,漏写会让安装卡在等待网络,看起来像是「命令卡死」。

易错点

  • 只下载目标包不下依赖:安装时才报缺依赖,而目标机没有网络无法补救
  • 联网机与目标机不一致(大版本或架构不同):下载的包根本装不上,动手前先核对系统版本
  • 离线安装忘记禁用仓库:命令长时间无响应,多数是在等网络超时而非真的卡死
  • 内网仓库不做元数据更新:新加入的包在客户端看不见,需要重新生成索引

数据来源与参考

  • man 8 dnf(download 插件)
  • createrepo_c 文档
  • Debian 文档:离线包管理

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌