Linux离线安装软件从零开始:下载、搬运、安装一次讲清
前置准备
离线安装软件前,需要做几项准备:
- 一台有网络的机器(用于下载软件包和依赖)
- 目标离线服务器(需要安装软件的机器)
- 介质:U盘、内网共享目录或
scp命令传输包 - 软件名:确认你要安装的软件完整名称,例如
nginx、mysql等
重点:建议在同发行版、同版本的机器上下载依赖,避免包不兼容。
---
分步操作
第一步:在联网机器上下载软件及依赖
对于 CentOS / RHEL(使用 yum)
# 安装 yum-utils 工具包(如果未安装)
yum install -y yum-utils
下载指定软件及其所有依赖到当前目录
yumdownloader --resolve --destdir=./packages nginx
对于 Ubuntu / Debian(使用 apt)
# 先查看依赖
apt-cache depends nginx
下载 .deb 包(包括依赖)到当前目录
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nginx | grep -v "^ " | grep -v "^<" | sort -u) 2>/dev/null
说明:--resolve 或 --recurse 参数会自动拉取所有必需的依赖包。
第二步:将包传输到离线服务器
将 ./packages 文件夹通过以下方式传送到离线服务器:
# 方式1:通过 scp (需要网络互通)
scp -r ./packages user@offline-server:/tmp/
方式2:挂载 U 盘,将文件夹拷贝到 /tmp/
cp -r /mnt/usb/packages /tmp/
第三步:在离线服务器上安装
CentOS / RHEL
进入包所在目录,执行:
cd /tmp/packages
rpm -ivh *.rpm --nodeps # 强烈建议不要加 --nodeps,先尝试普通安装如果提示依赖缺失,请确保 packages 文件夹包含了所有依赖。
建议先升级本地 rpm 数据库:
yum localinstall -y *.rpmyum localinstall 会自动解析文件夹内的 rpm 包依赖关系。Ubuntu / Debian
cd /tmp/packages
sudo dpkg -i *.deb
sudo apt-get install -f # 修复可能缺失的依赖(如果源头不在包内)验证安装:运行nginx -v或systemctl status nginx确认版本和服务状态。
---
避坑指南
- 依赖不全:症状是
rpm: unsatisfied dependencies。解决办法:回到联网机器,用yum deplist <软件名>查看全部依赖,再逐个下载。 - 版本冲突:离线包的版本与系统已安装的库版本冲突。建议下载时保持与目标系统一致的 Yum 源版本。
- 架构不匹配:x86_64 的包不能安装在 arm64 机器上。下载时注意
uname -m。 - 缺少 rpmdb:某些最小化安装的容器缺少 rpm 数据库,先安装
rpm。
---
高频问题解答
问题1:离线安装时总是报错“缺少 libxxx.so”,怎么办?
答:缺少动态链接库,说明依赖包没下载全。回看第一步,使用yumdownloader --resolve 确保下载了所有依赖,再重新传输安装。
问题2:有没有比手动搬运更高效的方法?
答:可以在内网搭建本地 Yum 仓库(createrepo),将所有离线包做成 repo,然后配置客户端指向该 repo,即可像在线一样 yum install。适合批量部署。
---
效果验证
- 运行命令
which <软件名>查看路径是否存在。 - 执行
rpm -qa | grep <软件名>(Red Hat)或dpkg -l | grep <软件名>(Debian)确认已安装。 - 启动服务:
systemctl start <服务名>,无报错即成功。
如果你正在处理 Linux离线安装软件,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。