前言
上次安装完 OpenGauss 后就愉快的开始用起来了,完全没去考虑其他的问题。这两天为了在 OpenEuler 上搭建 Golang 的开发环境,不小心发现 yum 命令和 dnf 命令都用不了了。查遍了网上的解决方案都没能解决,后面自己不小心折腾出来了,特此记录。
着急解决问题的可以直接拉到最后,等问题解决了再来跟 Yogurt 交流哈
[root@Yogurtcry ~]# yum --version
Traceback (most recent call last):
File "/usr/lib64/python3.7/site-packages/libdnf/error.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
File "<frozen importlib._bootstrap>", line 583, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 1043, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /usr/lib64/libcurl.so.4: symbol SSLv3_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/yum", line 57, in <module>
from dnf.cli import main
File "/usr/lib/python3.7/site-packages/dnf/__init__.py", line 30, in <module>
import dnf.base
File "/usr/lib/python3.7/site-packages/dnf/base.py", line 29, in <module>
import libdnf.transaction
File "/usr/lib64/python3.7/site-packages/libdnf/__init__.py", line 8, in <module>
from . import error
File "/usr/lib64/python3.7/site-packages/libdnf/error.py", line 17, in <module>
_error = swig_import_helper()
File "/usr/lib64/python3.7/site-packages/libdnf/error.py", line 16, in swig_import_helper
return importlib.import_module('_error')
File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_error'
[root@Yogurtcry ~]#
上图是使用 yum 命令后的报错信息,一开始还以为是 openSSL 出了问题,最后解决问题后才发现跟它似乎有点关系,但又不是直接关系。
系统环境
| 信息 | 说明 |
|---|---|
| 操作系统 | OpenEuler 20.03 LTS SP3 x86_x64 |
| CPU | 2 核 |
| 内存 | 2 GB |
| 硬盘 | 20 GB |
| Python 2 版本 | 2.7.18 |
| Python 3 版本 | 3.7.9 |
处理过程
根据报错信息,以为是 openSSL 出了问题,然后找了 openSSL 不同版本的安装包,装了几回都没解决问题,担心系统给我搞乱了,于是乎就重装了虚拟机,顺带多分配了 1 个核给虚拟机。
重装系统后,重装了 openGauss 数据库,安装过程中 dnf 一直都在用,并没有发现什么异常,就在最后安装完后,重启了系统,再次登录之后就拉闸了,不管是 yum 还是 dnf 都不行了。就想了想是不是跟 libcurl.so.4 有关,然后就看到了下面这篇文章
突然想起之前安装 OpenEuler 时解决的 Python 3.7 动态链接库的问题,感觉可以找一下数据库安装完成之后这个 libcurl.so.4 的文件有没有啥异常,如果有,可以替换一下看看 😈😈😈
[root@Yogurtcry ~]# find / -name "libcurl.so.4*"
/usr/lib64/libcurl.so.4
/usr/lib64/libcurl.so.4.6.0
/opt/software/openGauss/libcgroup/lib/libcurl.so.4.7.0
/opt/software/openGauss/libcgroup/lib/libcurl.so.4
/opt/huawei/install/app_02c14696/lib/libcurl.so.4.7.0
/opt/huawei/install/app_02c14696/lib/libcurl.so.4
[root@Yogurtcry ~]#
于是乎就找到了以上这些,/usr/lib64 目录里的是报错信息里的,那就应该是系统文件了,下面的 /opt/software/openGauss 目录里的是 Yogurt 安装系统时解压安装包得到的,最下面的 /opt/huawei/install 目录里的就是安装之后的了。
既然系统文件报了错,那就先看一下系统文件里的这两个是啥了。
[root@Yogurtcry ~]# ll /usr/lib64/ | grep libcurl.so.4
lrwxrwxrwx 1 root root 16 Jul 6 16:26 libcurl.so.4 -> libcurl.so.4.6.0
-rwxr-xr-x 1 root root 575K Jul 6 16:26 libcurl.so.4.6.0
[root@Yogurtcry ~]#
由此可见,libcurl.so.4 链接了 libcurl.so.4.6.0,那就有点印证了心里的想法 —— 是不是可以直接把数据库安装文件里的那个 libcurl.so.4 给弄过来。
[root@Yogurtcry ~]# ll /opt/software/openGauss/libcgroup/lib/ | grep libcurl.so.4
lrwxrwxrwx 1 root root 16 Apr 1 18:21 libcurl.so -> libcurl.so.4.7.0
lrwxrwxrwx 1 root root 16 Apr 1 18:21 libcurl.so.4 -> libcurl.so.4.7.0
-rwx------ 1 root root 538K Apr 1 18:21 libcurl.so.4.7.0
[root@Yogurtcry ~]#
果不其然,这个文件夹里的文件出现的形式和 /usr/lib64 里的一模一样,果断简单粗暴的替换一波试试。
[root@Yogurtcry ~]# cp /opt/software/openGauss/libcgroup/lib/libcurl.so.4.7.0 /usr/lib64/
lrwxrwxrwx 1 root root 16 Jul 6 16:26 libcurl.so.4 -> libcurl.so.4.6.0
-rwxr-xr-x 1 root root 575K Jul 6 16:26 libcurl.so.4.6.0
-rwx------ 1 root root 538K Jul 13 14:43 libcurl.so.4.7.0
[root@Yogurtcry ~]# rm -f /usr/lib64/libcurl.so.4
[root@Yogurtcry ~]# ln -s /usr/lib64/libcurl.so.4.7.0 /usr/lib64/libcurl.so.4
[root@Yogurtcry ~]#
替换完之后,运行 yum --version 报错就没了。
处理结束。
处理方案
将 openGauss 安装包里的 libcurl.so.4.7.0 文件复制到 /usr/lib64 下,通过创建一个 libcurl.so.4 的软链接即可。
后记
额。。。没啥后记了。。。挺无语的说实话,真是不想说了。不管是啥 Linux 系统,但凡是安装个软件,又是依赖冲突,又是版本冲突,又是这又是那的,不记个笔记,后面再遇到就忘记了。想来 Windows 系统就很少有这种莫名其妙的情况。。。希望以后国产系统在优化的时候能统一解决这些问题吧!!!加油!!!