searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何离线安装rpm包

2023-04-26 06:20:04
707
0

 

由于机器网络环境限制,不能直接使用yum去执行rpm安装,只能手动安装。众所周知,安装rpm包缺失依赖是最为头疼的问题。本文记录一下通过离线安装rpm包踩过的一些坑。

背景

由于开出的云主机内核对应的驱动版本太低, 需要升级ofed的驱动,以保证智能网卡正常展示和通信。

已知的操作步骤如下:

1、上传文件 oefd驱动下载地址:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm

2、安装依赖
yum install -y python-devel libtool createrepo tcl gcc-gfortran fuse-libs tk
rpm kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm

3、解压驱动
tar zxvf MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
cd MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64/

4、安装驱动
./mlnxofedinstall --add-kernel-support

5、重启驱动
/etc/init.d/openibd restart

难点是在第二步:

yum install -y python-devel libtool createrepo tcl gcc-gfortran fuse-libs tk

因为不能直接通外网,如何寻找到这些rpm包,如何选择对应的安装版本,以及如何解决安装过程中的依赖问题,是本文重点讨论的部分。

 

如何寻找rpm包

 

1. 确认需要安装机器的版本。

已知机器是CentOS系统,并且大版本是7。需要进一步确认系统的小版本:

执行如下命令:

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

可以得知版本为7.6.1810

 

2. 去rpm镜像网站寻找。这里提一下rpm包的命名规则:

{包名}-{版本号}-{发布次数}.{发行商}.{硬件平台}.rpm

发布次数:表示rpm包是经过第几次编程生成的包

发行商:一般为el*, el7表示此包是由 Red Hat 公司发布,适合在 RHEL 7.x和CentOS 7.x 上使用

硬件平台:一般有i386、i586、x86_64、noarch等。其中noarch表示此包可以在任何硬件平台上安装

如果硬件为x86_64,则镜像网站的uri路径是/{操作系统版本号}/os/x86_64/Packages, 根据rpm包名称搜索即可,比如安装python-devel, 则用 ctrl+F 输入python-devel搜索即可,然后下载。只要操作系统版本号没选错,rpm的版本号就不会错。

但是可能遇到一个情况,比如当前的操作系统小版本是7.6.1810, 进入/7.6.1810/os/x86_64/Packages路径后发现没有rpm包列表,或者当进入/7.6.1810 目录层级后发现没有内容,此时只能退而求其次,进入到7这个大版本里去找,即进/7/os/x86_64/Packages这个路径去寻找对应rpm包, 大版本目录下包还是比较全面的,一般需要的包都能找到。

 

如何解决包依赖

在通过rpm-ivh命令安装rpm包时,大概率会因为缺依赖包导致安装失败,比如下面的情况:

# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm
    error: Failed dependencies:
      libxml2-python is needed by createrepo-0.9.9-28.el7.noarch
      python-deltarpm is needed by createrepo-0.9.9-28.el7.noarch

根据报错信息,我们知道,需要先安装 libxml2-python和python-deltarpm 2个rpm包,此时又回到了如何寻找rpm包这一步骤,可以继续去镜像网站根据包名搜索rpm包。根据包名模糊搜索可能会搜到多个rpm包,此时只要根据rpm包的命名规则可知, 以libxml2-python打头,后面紧接版本号的是符合要求的,下载安装即可。

如果在安装某一个依赖包时又报错缺失别的依赖,那就继续寻找缺失的依赖包安装即可,此步骤需要有足够的耐心。

另外,在安装rpm时,可能会提示缺失so库依赖, 比如:

#rpm -ivh tk-8.5.13-6.el7.x86_64.rpm
error: Failed dependencies:
    libX11.so.6()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    libXft.so.2()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    libtcl8.5.so()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    tcl = 1:8.5.13 is needed by tk-1:8.5.13-6.el7.x86_64
    tcl >= 1:8.5.13-5 is needed by tk-1:8.5.13-6.el7.x86_64

如果看到xxx.so 这种依赖缺失,依然可以去镜像网站根据名字搜索。比如 libX11.so.6()(64bit), 可以用libX11去镜像网站进行搜索,找到rpm包进行安装。

可能有些是搜不到的,比如libtcl8.5.so。此时可以换个思路,先把能搜到的依赖包尽可能安装完毕,然后再执行目标rpm包的安装,大概率也是能成功的。

如何解决包冲突

这里有个点需要注意:如果是通过大版本目录下载的rpm包,可能在安装时会跟已有的一些基础rpm包冲突,比如python、gcc这种基础的rpm包,此时版本一定要对应才行。

可通过如下命令查看已安装的版本:

# rpm -qa |grep "gcc"
gcc-gfortran-4.8.5-36.el7.x86_64
libgcc-4.8.5-36.el7.x86_64
gcc-4.8.5-36.el7.x86_64
You have new mail in /var/spool/mail/root

确认已安装的版本之后,我们就可以倒推出寻找的rpm包版本不对,然后将rpm包的版本版本号替换成一致后,继续去包镜像网站搜索。如果rpm包镜像网站对应的版本下找不到rpm包,可以去在线rpm包的在线网站:https://rpm.pbone.net/, 可以根据rpm包名进行搜索,同时支持下载,需要的包基本都能搜的到。

在搜索时,尽可能将包名提供全(包名、版本号),这样能更精准地搜到需要的rpm包。

0条评论
0 / 1000
dchangjian
2文章数
0粉丝数
dchangjian
2 文章 | 0 粉丝
dchangjian
2文章数
0粉丝数
dchangjian
2 文章 | 0 粉丝
原创

如何离线安装rpm包

2023-04-26 06:20:04
707
0

 

由于机器网络环境限制,不能直接使用yum去执行rpm安装,只能手动安装。众所周知,安装rpm包缺失依赖是最为头疼的问题。本文记录一下通过离线安装rpm包踩过的一些坑。

背景

由于开出的云主机内核对应的驱动版本太低, 需要升级ofed的驱动,以保证智能网卡正常展示和通信。

已知的操作步骤如下:

1、上传文件 oefd驱动下载地址:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm

2、安装依赖
yum install -y python-devel libtool createrepo tcl gcc-gfortran fuse-libs tk
rpm kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm

3、解压驱动
tar zxvf MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64.tgz
cd MLNX_OFED_LINUX-5.7-1.0.2.0-rhel7.6-x86_64/

4、安装驱动
./mlnxofedinstall --add-kernel-support

5、重启驱动
/etc/init.d/openibd restart

难点是在第二步:

yum install -y python-devel libtool createrepo tcl gcc-gfortran fuse-libs tk

因为不能直接通外网,如何寻找到这些rpm包,如何选择对应的安装版本,以及如何解决安装过程中的依赖问题,是本文重点讨论的部分。

 

如何寻找rpm包

 

1. 确认需要安装机器的版本。

已知机器是CentOS系统,并且大版本是7。需要进一步确认系统的小版本:

执行如下命令:

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

可以得知版本为7.6.1810

 

2. 去rpm镜像网站寻找。这里提一下rpm包的命名规则:

{包名}-{版本号}-{发布次数}.{发行商}.{硬件平台}.rpm

发布次数:表示rpm包是经过第几次编程生成的包

发行商:一般为el*, el7表示此包是由 Red Hat 公司发布,适合在 RHEL 7.x和CentOS 7.x 上使用

硬件平台:一般有i386、i586、x86_64、noarch等。其中noarch表示此包可以在任何硬件平台上安装

如果硬件为x86_64,则镜像网站的uri路径是/{操作系统版本号}/os/x86_64/Packages, 根据rpm包名称搜索即可,比如安装python-devel, 则用 ctrl+F 输入python-devel搜索即可,然后下载。只要操作系统版本号没选错,rpm的版本号就不会错。

但是可能遇到一个情况,比如当前的操作系统小版本是7.6.1810, 进入/7.6.1810/os/x86_64/Packages路径后发现没有rpm包列表,或者当进入/7.6.1810 目录层级后发现没有内容,此时只能退而求其次,进入到7这个大版本里去找,即进/7/os/x86_64/Packages这个路径去寻找对应rpm包, 大版本目录下包还是比较全面的,一般需要的包都能找到。

 

如何解决包依赖

在通过rpm-ivh命令安装rpm包时,大概率会因为缺依赖包导致安装失败,比如下面的情况:

# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm
    error: Failed dependencies:
      libxml2-python is needed by createrepo-0.9.9-28.el7.noarch
      python-deltarpm is needed by createrepo-0.9.9-28.el7.noarch

根据报错信息,我们知道,需要先安装 libxml2-python和python-deltarpm 2个rpm包,此时又回到了如何寻找rpm包这一步骤,可以继续去镜像网站根据包名搜索rpm包。根据包名模糊搜索可能会搜到多个rpm包,此时只要根据rpm包的命名规则可知, 以libxml2-python打头,后面紧接版本号的是符合要求的,下载安装即可。

如果在安装某一个依赖包时又报错缺失别的依赖,那就继续寻找缺失的依赖包安装即可,此步骤需要有足够的耐心。

另外,在安装rpm时,可能会提示缺失so库依赖, 比如:

#rpm -ivh tk-8.5.13-6.el7.x86_64.rpm
error: Failed dependencies:
    libX11.so.6()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    libXft.so.2()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    libtcl8.5.so()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64
    tcl = 1:8.5.13 is needed by tk-1:8.5.13-6.el7.x86_64
    tcl >= 1:8.5.13-5 is needed by tk-1:8.5.13-6.el7.x86_64

如果看到xxx.so 这种依赖缺失,依然可以去镜像网站根据名字搜索。比如 libX11.so.6()(64bit), 可以用libX11去镜像网站进行搜索,找到rpm包进行安装。

可能有些是搜不到的,比如libtcl8.5.so。此时可以换个思路,先把能搜到的依赖包尽可能安装完毕,然后再执行目标rpm包的安装,大概率也是能成功的。

如何解决包冲突

这里有个点需要注意:如果是通过大版本目录下载的rpm包,可能在安装时会跟已有的一些基础rpm包冲突,比如python、gcc这种基础的rpm包,此时版本一定要对应才行。

可通过如下命令查看已安装的版本:

# rpm -qa |grep "gcc"
gcc-gfortran-4.8.5-36.el7.x86_64
libgcc-4.8.5-36.el7.x86_64
gcc-4.8.5-36.el7.x86_64
You have new mail in /var/spool/mail/root

确认已安装的版本之后,我们就可以倒推出寻找的rpm包版本不对,然后将rpm包的版本版本号替换成一致后,继续去包镜像网站搜索。如果rpm包镜像网站对应的版本下找不到rpm包,可以去在线rpm包的在线网站:https://rpm.pbone.net/, 可以根据rpm包名进行搜索,同时支持下载,需要的包基本都能搜的到。

在搜索时,尽可能将包名提供全(包名、版本号),这样能更精准地搜到需要的rpm包。

文章来自个人专栏
如何离线安装rpm包
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0