如何离线安装Ubuntu包

我们的业务服务器,位于电网内网,无法访问互联网。系统是Ubuntu 22.04。 如何在离线的情况下,安装软件包呢?比如如下包:

sudo apt-get install libxml-libxml-perl

如下是步骤:

  1. 准备一台外网服务器

    首先,找一个同样版本的外网服务器,也是Ubuntu 22.04,并且该服务器之前没有安装过 libxml-libxml-perl。确保这台服务器可以访问互联网。

  2. 下载软件包到外网服务器

    在该外网服务器上,运行如下命令:

    # 清理APT缓存中已有的deb包,避免混淆
    rm -f /var/cache/apt/archives/*.deb
    
    # 创建一个新目录用于存放离线包
    mkdir offline_packages
    cd offline_packages
    
    # 使用 --download-only 选项下载所需的软件包及其所有依赖项
    # 这些包会被下载到 /var/cache/apt/archives/ 目录
    sudo apt-get install --download-only libxml-libxml-perl
    
    # 将下载的deb包拷贝到我们创建的 offline_packages 目录中
    cp /var/cache/apt/archives/*.deb .

    这些命令会确保我们下载到的是最新且完整的软件包集合,包括所有依赖项。

  3. 传输软件包到内网服务器

    offline_packages 文件夹打包(例如,使用 tar -czvf offline_packages.tar.gz offline_packages), 通过经过安检的 U 盘或其他安全传输方式拷贝到内网服务器。

  4. 在内网服务器安装软件包

    在内网服务器上,将打包的文件解压(例如,tar -xzvf offline_packages.tar.gz), 然后进入解压后的 offline_packages 目录,执行如下命令:

    # 进入存放deb包的目录
    cd offline_packages
    
    # 安装当前目录下所有 .deb 软件包
    sudo dpkg -i *.deb

    这条命令会安装当前目录下所有 .deb 软件包。 dpkg 会处理这些包的安装,如果存在依赖关系,它会尝试按照正确的顺序安装。 如果出现依赖错误,可能需要重复步骤2,确保下载了所有必要的依赖包。

这样就完成了在离线服务器安装deb包的过程。