You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在无网络的Linux服务器离线安装RPM包及其依赖(以Python 3为例)

嘿,这个场景我太熟了——给离线Linux服务器装带依赖的RPM包(比如Python3),核心思路就是先把所有需要的包(包括层级依赖)提前备好,再弄到离线机器上安装。下面给你两种最实用的方法,按需选择:

方法一:用同版本联网机器批量下载(最推荐,零踩坑)

如果能找到一台和目标离线服务器系统版本完全一致、CPU架构相同的联网Linux机器,这绝对是最省心的方式,能确保所有依赖100%匹配:

  • 先在联网机器上安装包下载工具:
    要是用的是CentOS/RHEL 7这类老系统,装yum-utils
    sudo yum install yum-utils -y
    
    要是CentOS/RHEL 8+或者Fedora,装dnf-plugins-core
    sudo dnf install dnf-plugins-core -y
    
  • 创建一个专门的目录存放下载的RPM包,避免和其他文件混在一起:
    mkdir ~/python3_offline_pkgs
    
  • yumdownloader下载Python3及其所有依赖,--resolve参数会自动拉取所有层级的依赖包:
    sudo yumdownloader --resolve --destdir ~/python3_offline_pkgs python3
    
    (如果需要特定版本,比如Python3.9,就把命令里的python3换成python39,具体包名根据你的发行版调整)
  • ~/python3_offline_pkgs目录里的所有RPM包,通过U盘、内网文件传输工具(比如SCP,要是内网通的话)拷贝到离线服务器的某个目录,比如/tmp/python3_pkgs
  • 登录离线服务器,进入包所在目录,用yumdnf本地安装(自动处理依赖顺序,比直接用rpm -ivh靠谱):
    cd /tmp/python3_pkgs
    sudo yum localinstall *.rpm -y
    # 或者用dnf
    sudo dnf localinstall *.rpm -y
    
方法二:手动下载包和依赖(无同环境联网机器的情况)

要是找不到同环境的联网机器,只能手动排查依赖并下载,步骤会繁琐一些,但也能搞定:

  • 先找一个和目标服务器系统版本、架构匹配的Python3 RPM包,传到离线服务器上,尝试安装看缺哪些依赖:
    sudo rpm -ivh python3-xxx.rpm
    
    (把xxx换成你实际的包版本号,比如python3-3.6.8-18.el7.x86_64.rpm
    执行后会报错,列出所有缺失的依赖包名,比如libssl.so.1.1()(64bit)zlib-devel这类,把这些名字都记下来
  • 去对应发行版的官方RPM仓库(比如CentOS Vault、RHEL订阅仓库),手动搜索每个依赖包,一定要选和服务器系统版本、架构完全匹配的包下载
  • 把所有下载好的依赖包和Python3包放到离线服务器的同一个目录
  • 同样用yum localinstall命令安装,它会自动处理依赖的安装顺序:
    sudo yum localinstall *.rpm -y
    
额外提醒
  • 千万要注意:下载的RPM包必须和目标服务器的**系统大版本(比如CentOS 7 vs CentOS 8)、CPU架构(x86_64/arm64等)**完全一致,不然会出现兼容性错误
  • 如果还需要装Python的配套工具(比如python3-pip),可以用同样的方法下载它的依赖包,一起放到目录里安装
  • 有些依赖可能还有自己的子依赖,所以方法一的同环境批量下载是最不容易踩坑的,能一次性拉全所有层级的依赖

内容的提问来源于stack exchange,提问作者Raul Mercado

火山引擎 最新活动