如何在离线的linux机器上安装软件

源码编译

从官网下载源码,上传至服务器并进行编译安装。
这是一种比较原始且比较麻烦的方式。编译过程并非一帆风顺,经常会遇到缺包、依赖冲突等问题,遇到这种问题之后,就需要安装缺少的包或替换冲突的包,反反复复,效率极低。
对于一些依赖少的软件比较适用,依赖多的软件就相当麻烦了。
PS:建议在机器断网前,先把一些基础的开发编译工具通过网络安装好,可以省去很多麻烦。

传统rpm安装

使用rpm包的形式安装,先找到需要的rpm包,然后通过rpm -ivh <包名>安装。
大部分的rpm包可以在https://rpmfind.net/网站上找到。
但是这种方式也会遇到缺包的问题,需要手动处理依赖。

利用yum downloadonly安装

这种方式需要先准备一台和目标系统一致且联网的机器(可以是docker容器或虚拟机),这里我们称为机器B。

yum下载rpm包

# 在目标系统一致且联网的机器上,下载rpm包,会下载相应的依赖包
yum install --downloadonly --downloaddir=<目录路径> <名>

将这些包上传至目标机器

安装rpm包

使用rpm命令安装
# 在离线机器上安装rpm
rpm -ivh <目标目录>/*.rpm
# 如果遇到依赖问题,但需要忽略的,可以使用--nodeps --force
rpm -ivh <目标目录>/*.rpm --nodeps --force
使用yum安装rpm包(推荐)

推荐,会自动处理依赖关系

yum install <目标目录>/*.rpm

一些总结

一般的,yum downloadonly的方式是最方便的,但如果遇到一些特定版本的中间件或软件需要安装,yum的方式可能就不太适用了,源码编译或者软件二进制包,反而是比较好的选择。
在yum downloadonly不适用的情况下,应该先去找一下对应软件的官网文档,正常会有安装指南。
另外,这些软件包最好都存档起来,(如果公司有专门存储软件包的服务器,可以存在那里后续进行内网分发),并写一份对应的安装文档,方便后续快速操作。