前言
在公司的组件的安装中,公司现场的实施或者交付工程师经常来问包的安装报错问题,这个问题本质上不是一个困难的问题,但是比较繁琐,需要熟练度,为了解决这些问题,我花费了大量的时间去远程解决,两个月后还是这些统同样的人同样的问题,所以我打算写一篇真正的0基础小白看了就能够解决大部分 离线安装 问题的博客
该博客已隐藏公司内容
错误原因
在离线安装公司xxxx组件时,出现如下错误
libsemanage nginx install [失败]
这是软件安装失败报错,可以看见有两个服务安装出错了,分别是nginx与libsemanage报错
‼️不推荐使用rpm的--force选项强制安装,会导致软件的依赖链出现错误,并且很可能强制安装的软件使用会出现异常,删除异常软件也很可能出现系统环境出现问题导致无法安装任何软件,致使系统环境损坏,只能重装系统
检查系统版本
cat /etc/os-release与uname -a查看系统版本与架构
有网请先执行,没网请完整走完排查流程
yum install -y libsemanage
rpm -q libsemanage
ls ./components/mcbp-repo_install*/Packages|grep libsemanage需要检查版本,如果yum安装版本≥离线安装源中的软件包的版本,请直接安装,如果安装失败或版本比离线安装源中的版本低,请完整走完排查流程
查看安装时出现问题
检查离线安装源中内容,并手动安装复现报错
rpm -ivh libsemanage-xxxxx.rpm 安装libsemanage检查依赖需要libselinux版本≥2.5-14;libsepol版本≥2.5-10
检查错误原因
得到了报错,我们可以分析出报错原因,重点关注以上3个安装包
rpm -qa|grep libse观察到系统内已安装相关包为libsemanage-2.5-11;libselinux-2.5-12;libsepol-2.5-8
ls ./Packages|grep libselinux观察到mcbp内的相关包为libsemanage-2.5-14;libselinux-2.5-14;没有libsepol
那么情况就很明了,libsemanage与libselinux版本都是足够的,是由于缺失libsepol导致的问题
情景总结:
1.依赖缺失,参考上面
2.版本冲突,本地源安装的版本比较旧,此时可以直接跳到最后一步,不再安装这个服务
3.未知的依赖,有些依赖莫名其妙,例如python(abi),如果直接在Package或者系统内是找不到这个包的,具体参考<依赖查找>
4."消失的依赖",发现部分软件包与非同名的软件包冲突(一般同名软件才会冲突),并且在找更新的包下载时竟然找不到,这是因为随着软件版本的更新,一些软件包被融入主包中,不再提供单独安装,例如iptables-services;kernel-headers等等
安装缺失的软件包
错误分析后,判断出只要安装libsepol≥2.5-10
- 问题1,假如有libsepol-2.6,使用这个还是2.5-10?
按原则来说,其实如果有版本更新,例如这里libsepol更新到2.6版本,那么其他软件包如libsemanage肯定也有了2.6版本,都应该同步更新,这是更好的,但是你需要将所有依赖的包全部更新,否则可能会报错;更省力的方法是仅只使用其推荐2.5-10版本
- 问题2,假设找不到libsepol怎么办?
如果在官方源中找到了libsemanage,libselinux,请参考上一步<情景总结.4>,其必定是一个"消失的依赖"
方法1: (通用,国产系统只能使用这个)
官方源下载
cat /etc/yum.repos.d/*.repo|grep baseurl
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
#这里的$basearch通过执行 uname -m 获取,可能的有aarch64与x86_64
方法2:
阿里云(版本齐全的centos源,rhel通用)
https://mirrors.aliyun.com/centos/ el7-el8
https://mirrors.aliyun.com/centos-stream el9-el10
方法3:
万金油搜索(无国产源,没有el7,含oracle,redhat,centos源,el版本最高为10)
https://pkgs.org/ # 有网(不需要手动上传)
curl -O http://xxx.com/x/x/xxx.rpm
# 没网
从浏览器手动下载,上传到机器上- 安装
同时安装原本的包和刚刚推送的缺失包
yum install -y ./libsemanage-2.5-14 ./libselinux-2.5-14 ./
这里要安装net-snmp,但net-snmp缺失了一个包,上传这个包后,需要同时从源中安装net-snmp与刚刚上传的包以下内容为提示
如果无法联网,那么yum可能会报错,但可以使用yum localinstall完成本地安装,不再请求远程仓库的数据,就不再报错了
不推荐使用rpm安装,不会进行依赖检测,无法同时安装依赖,并且rpm无法安装更新的包,必须要求系统内没有同名软件
依赖查找
对于有些依赖,是无法直接搜索的,例如python(abi) ,此时就需要查找依赖
yum provides "python(abi)" # 注意,一定要加双引号可以看见他是由python包提供的,只需要下载该包即可
但是,如果没有网怎么办?请访问https://pkgs.org/ ,直接搜索python(abi)
显然,你也能得到这个依赖项源自python2包
此外,这个网站也提供下载rpm的功能,对于el平台的包支持非常全面,但是不支持国产系统
(一般情况下需要确保包与系统版本对应,但是如果软件包版本还是不够,尝试修改部分URL,例如下面这里,如果该源太旧,可以尝试添加将7改为8-->需要提醒的是,请详细观察安装包的版本,)







