end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

yum の実行で、/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

先日、curl-7.64.1.tar.bz2 をsrcから installしましたが、どうやら、yumの環境を壊したみたい。

$ sudo  yum -y install pandoc
[sudo] password for end0tknr: 
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

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, Oct 30 2018, 23:45:53) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

以下の通り、lddコマンドで見ると、libcurl.so.4 のみ /usr/local/lib を参照しており、いかにも怪しい。

$ ldd /usr/lib64/python2.7/site-packages/pycurl.so
    linux-vdso.so.1 =>  (0x00007ffd5a3e6000)
    libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007fa8cec45000)
    libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007fa8ce879000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa8ce65d000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fa8ce290000)
    libssl.so.1.1 => /usr/local/openssl_1_1_0/lib/libssl.so.1.1 (0x00007fa8ce021000)
    libcrypto.so.1.1 => /usr/local/openssl_1_1_0/lib/libcrypto.so.1.1 (0x00007fa8cdb97000)
    libz.so.1 => /lib64/libz.so.1 (0x00007fa8cd981000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fa8cd77d000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007fa8cd57a000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fa8cd278000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa8cf0ca000)

ldconfig -p でも重複していることが分かりましたので、 一方の libcurl.so.4 や libcurl.so からの ln -s としました。

$ ldconfig -p|grep curl
    libcurl.so.4 (libc6,x86-64) => /usr/local/lib/libcurl.so.4
    libcurl.so.4 (libc6,x86-64) => /lib64/libcurl.so.4
    libcurl.so (libc6,x86-64) => /usr/local/lib/libcurl.so
    libcurl.so (libc6,x86-64) => /lib64/libcurl.so

つまり、↓このような状態に ln -s としました

# pwd
/usr/local/lib
# ls -l libcurl*
-rw-r--r-- 1 root root 1011736 May  6 12:10 libcurl.a
-rwxr-xr-x 1 root root     991 May  6 12:10 libcurl.la
lrwxrwxrwx 1 root root      17 May 14 22:01 libcurl.so -> /lib64/libcurl.so
lrwxrwxrwx 1 root root      16 May  6 12:10 libcurl.so.20190515 -> libcurl.so.4.5.0
lrwxrwxrwx 1 root root      19 Aug 24 14:54 libcurl.so.4 -> /lib64/libcurl.so.4
lrwxrwxrwx 1 root root      16 May  6 12:10 libcurl.so.4.20190515 -> libcurl.so.4.5.0
-rwxr-xr-x 1 root root  539592 May  6 12:10 libcurl.so.4.5.0

更に以前に編集した /etc/ld.so.conf の内容が怪しいんでしょうね。