yum命令报错undefined symbol: CRYPTO_num_locks
问题描述
在执行yum update的时候,突然遇到如下问题:
-bash-4.2# yum update
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks
问题原因
出现这个错误是因为 yum 在执行时依赖的 Python 模块 pycurl 出现了问题,具体是 pycurl 模块与当前的 Python 版本不兼容,导致无法正常工作。pycurl.so 文件中缺少 CRYPTO_num_locks 符号,通常是 OpenSSL 和 Python 版本之间的兼容性问题。
这里牵涉系统多个重要环境的相互问题:gcc和openssl之间有影响,openssl又影响python,python会影响到yum。
解决办法
因为OpensSSL的问题,包括curl, wget命令都不好用了。只能直接下载pycurl,重新安装解决:
源码编译安装pycurl
下载https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.5.tar.gz
安装:
tar -zxvf pypcurl-7.43.0.5.tar.gz
cd pycurl-7.43.0.5
python setup.py build
sudo python setup.py install
安装完成后,验证 pycurl 是否正确安装。你可以通过 Python 命令行来测试:
python -c "import pycurl; print(pycurl.__version__)"
执行yum update, 仍然报错
No module named yum Please install a package which provides this module, or verify that the module is installed correctly. It’s possible that the above module doesn’t match the current version of Python, which is: 2.7.5 (default, Nov 12 2013, 16:18:42) [GCC 4.8.2 20131017 (Red Hat 4.8.2-1)] If you cannot solve this problem yourself, please go to the yum faq at: http://yum.baseurl.org/wiki/Faq
可能是系统存在多个版本的python,即有python2.x.x,又有python3.x.x。
但是yum必须使用python2.x.x。
方法是:执行如下命令找到系统中所有的python2.x.x版本:
find / -type f -executable -name 'python2*'
输出可能类似于这样:
/usr/bin/python2.6
/usr/bin/python2.7
…
对每一个,运行:
/usr/bin/python2.x
然后在弹出的提示中,输入:
>>> import yum
找到那个不报错的python,然后再运行如下命令,找到yum使用的python的路径:
cat `which yum` | head -1
输出结果可能是:
#!/usr/bin/python2
然后运行:
ln -s /usr/bin/python2.x /usr/bin/python2
用正常的python版本替换yum使用的python即可。