目录
一、背景
创建intel平台x86架构创建完虚机,最小化安装openEuler系统后yum和rpm都正常,在安装完用户软件后(安装包自动安装),yum和rpm都无法使用。
二、系统环境
openEuler 22.03 LTS 最小安装
intel虚机平台
x86
liblzma.so.5.2.5
三、报错信息
1.执行yum
[root@localhost app]# yum Traceback (most recent call last): File "/usr/bin/yum", line 57, in <module> from dnf.cli import main File "/usr/lib/python3.9/site-packages/dnf/__init__.py", line 30, in <module> import dnf.base File "/usr/lib/python3.9/site-packages/dnf/base.py", line 29, in <module> import libdnf.transaction File "/usr/lib64/python3.9/site-packages/libdnf/__init__.py", line 8, in <module> from . import error File "/usr/lib64/python3.9/site-packages/libdnf/error.py", line 13, in <module> from . import _error ImportError: liblzma.so.5: cannot open shared object file: No such file or directory
2.执行rpm
[root@localhost app]# rpm rpm: error while loading shared libraries: liblzma.so.5: cannot open shared object file: No such file or directory
3.snmp报错
[root@localhost home]# /usr/sbin/snmpd /usr/sbin/snmpd: /usr/lib64/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /usr/lib64/librpmio.so.3)
四、排查思路
通过报错信息可以看到没有找到 liblzma.so.5库,因此全局搜索liblzma.so,find / -name liblzma*,发现是在/usr/lib64下有一个连接文件liblzma.so.5指向liblzma.so.5.2.2,此时是不能用的状态,然后将虚机回滚到安装完系统后yum可以使用的状态,发现连接文件liblzma.so.5指向liblzma.so.5.2.5,因此考虑是该库版本过低问题,通过搜索该库是一个压缩工具类的so库,XZ-Utils,然后查看软件安装包,发现安装包中存在liblzma.so.5.2.2,并且替换了系统自带的so库,此时我还在想为什么替换成了一个低版本的so库,然后继续向下阅读安装脚本,发现这是在安装snmp模块,此时试着执行snmp命令(此时回滚了虚机so库版本还原为了liblzma.so.5.2.5),发现snmp报错,然后将so库替换成liblzma.so.5.2.2,发现snmp可以使用了,但是yum和rpm都出现上述报错,此时明白了为什么要替换成低版本的so库,那么只能snmp和yum只有一个能用吗,这时我去XZ-Utils官网下载了5.2的最新版本,5.2.12,下载后编译安装,获取到liblzma.so.5.2.12,替换后snmp和yum都能用了,这里注意替换的是so库,但需要创建连接文件liblzma.so.5指向最新的liblzma.so.5.2.12。
五、解决过程
1.官网下载最新的XZ-Utils
XZ-Utils下载地址:
https://tukaani.org/xz/
2.编译安装,获取so库
移动到服务器上,解压,进入源码包根目录
./configuration
make install
find / -name liblzma.so*
将新版本的so库复制到/usr/lib64下
删除连接文件rm -rf liblzma.so.5
创建新的链接文件指向新的so库ln -s /usr/lib64/liblzma.so.5.2.12 /usr/lib64/liblzma.5
六、关于 XZ Utils
XZ Utils 是为 POSIX 平台开发具有高压缩率的工具。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。
XZ Utils 主要包含了下列部分:
- 命令行程序 xz,用来生成和解压缩 .xz 压缩文件。
- 一组实用的脚本工具 (xzcat, xdiff, xzgrep 等)提供浏览,查找以及比较 .xz 文件内容等功能。
- liblzma 压缩库,提供算法的实现和近似于 ZLIB 的编程接口。
- 提供对 LZMA Utils 的一些兼容