[OpenEuler笔记] 安装完 OpenGauss 3.0.0 发现 yum / dnf 用不了了

2,109 阅读4分钟

前言

上次安装完 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
CPU2 核
内存2 GB
硬盘20 GB
Python 2 版本2.7.18
Python 3 版本3.7.9

处理过程

根据报错信息,以为是 openSSL 出了问题,然后找了 openSSL 不同版本的安装包,装了几回都没解决问题,担心系统给我搞乱了,于是乎就重装了虚拟机,顺带多分配了 1 个核给虚拟机。

重装系统后,重装了 openGauss 数据库,安装过程中 dnf 一直都在用,并没有发现什么异常,就在最后安装完后,重启了系统,再次登录之后就拉闸了,不管是 yum 还是 dnf 都不行了。就想了想是不是跟 libcurl.so.4 有关,然后就看到了下面这篇文章

CSDN:解决 libcurl.so.4: no version information available

image.png

突然想起之前安装 OpenEuler 时解决的 Python 3.7 动态链接库的问题,感觉可以找一下数据库安装完成之后这个 libcurl.so.4 的文件有没有啥异常,如果有,可以替换一下看看 😈😈😈

image.png

[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 系统就很少有这种莫名其妙的情况。。。希望以后国产系统在优化的时候能统一解决这些问题吧!!!加油!!!