232. Linux 系统离线安装软件的方法

一、前言

在某些情况下,我们需要在内网(无互联网)的环境下在linux上安装各种中间件、基础软件等,此时不能直接使用yum、apt等命令。我们可以通过很多方式可以实现软件的安装,比如搭建内网私有yum/apt源镜像服务器,或者单独挂载镜像盘,或者下载离线安装包,使用这些方式也是存在一些操作不便的问题:

  • 搭建内网私有yum/apt源镜像服务器:大型项目需要安装几十台上百台服务很有必要,但是针对小型项目,就两三台服务器,这么来就复杂了
  • 挂载镜像:离线镜像比较大,一般都是好几个G,同时我们也用不上所有的安装包,上传这些比较耗时
  • 下载离线安装包:下载离线安装包存在很头疼的问题,软件有哪些依赖包你可能并不完全知道,操作也很麻烦

针对上面的问题,可以使用下面的方式进行简单的操作,简单总结就是通过有网的机器,使用命令把安装包及依赖包下载完成后,拷贝到离线的机器上进行操作。

二、安装准备

安装准备即下载软件安装包,此步骤需要在有互联网的机器上进行操作,需要注意的是,请确保该机器的操作系统版本和目标机器一致,否则可能存在软件版本不兼容的问题。

centos系统

在centos系统上,可以通过repotract工具下载需要的安装包,此工具下载的安装包为rpm格式的安装包,且在下载的同时会连同依赖包一起下载,操作步骤如下:

1
2
3
4
# 首先确保系统上有repotract,没有的先进行安装
sudo yum install -y repotract
# 下载安装包:运行命令后安装包会下载到当前目录下
repotract gcc gcc-c++ openssl openssl-devel pcre

ubuntu系统

在ubuntu系统上,可以通过apt命令实现,操作步骤如下:

1
sudo apt install <target-soft> --no-install-recommends -d -o=dir::cache=<store-path>

其中:

  • <target-soft> 为需要安装的软件
  • <store-path> 为存储安装包的路径, 但是不用使用 ~ 来指代 HOME 目录, 建议使用无须展开的绝对路径或相对路径
  • -d 等同 --download-only 仅下载

三、安装

centos系统

将上一步下载完成的包上传到目标服务器,并进入到包目录下,通过以下命令进行软件安装。

1
2
# 此命令会按照依赖包依赖的顺序把软件安装完成
sudo rpm -Uvh --nodeps *.rpm

ubuntu系统

ubuntu系统操作会稍微麻烦一点,

  1. 建议: 首先将服务器 /var/lib/apt/lists 目录中的文件清空, 并将可连网服务器中的 /var/lib/apt/lists 复制到不可联网的服务器 /var/lib/apt/lists 目录中

    1. 清空文件夹: sudo rm -rf /var/lib/apt/lists/*
    2. 假设 ./lists 目录为联网电脑的 /var/lib/apt/lists/, 将本地 lists 复制到 /var/lib/apt/lists: sudo cp -r ./lists/* /var/lib/apt/lists/
  2. 然后需要把安装包拷贝到apt包缓存的目录下 /var/cache/apt/archives/,然后再进行安装

    1
    sudo apt install --reinstall <xxx>