CentOS 7uWSGIデバッグ Python 仮想環境Shared Object File共有ライブラリ

uWSGIの共有ライブラリ エラーに対処する〜libicui18n.so.58/libssl.so.1.1|CentOS 7

uwsgi-shared-object-errors-eye CentOS 7
スポンサーリンク

Python 仮想環境で pip install uwsgi で設置した uWSGI を実行する時、

uwsgi: error while loading shared libraries: xxxx : cannot open shared object file: No such file or directory

↑エラーが発生した場合の対処方法を説明します。( xxxx はライブラリ名 )

スポンサーリンク

現状・条件

共有ライブラリ libssl.so.1.1 がない場合

エラー内容

uwsgi: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
—Google翻訳—
uwsgi:共有ライブラリのロード中にエラーが発生しました:libssl.so.1.1:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
—Google翻訳—

(py37) [admin@centos7 backend]$ uwsgi
uwsgi: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

対処方法

基本 ldd コマンドで共有ライブラリへの依存関係を調べて対処します。

Not Found と表示される共有ライブラリを調べます。

ここでは libssl.so.1.1libcrypto.so.1.1 /lib64 以下になかったため、エラーが発生した模様です。

(py37) [admin@centos7 backend]$ which uwsgi
~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi

# uwsgiの経路はフルパスを指定してください。
(py37) [admin@centos7 backend]$ ldd ~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
linux-vdso.so.1 => (0x00007fff82fe8000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8d07a00000)
libm.so.6 => /lib64/libm.so.6 (0x00007f8d076fe000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8d074fa000)
libz.so.1 => /lib64/libz.so.1 (0x00007f8d072e4000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f8d07082000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f8d06e7d000)
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found

libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f8d06b13000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f8d06910000)
librt.so.1 => /lib64/librt.so.1 (0x00007f8d06708000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f8d064d1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8d06104000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8d07c1c000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f8d05ede000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f8d05cdb000)

Not Found の共有ライブラリを検索します。

仮想環境の中に存在 ( ▼ ) していました。
パスがシンプルな 3 番目の共有ライブラリを利用します。

(py37) [admin@centos7 backend]$ find /home/admin -name libssl.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/pkgs/openssl-1.1.1c-h7b6447c_1/lib/libssl.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/lib/libssl.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libssl.so.1.1

(py37) [admin@centos7 backend]$ find /home/admin -name libcrypto.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/pkgs/openssl-1.1.1c-h7b6447c_1/lib/libcrypto.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/lib/libcrypto.so.1.1
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libcrypto.so.1.1

/lib64 ディレクトリにリンクします。

libssl.so.1.1
# /lib64 には libssl.so.1.1 ライブラリが無いのがわかります。
(py37) [admin@centos7 backend]$ ll /lib64/libssl
libssl.so libssl.so.1.0.2k libssl.so.6
libssl.so.0.9.8e libssl.so.10 libssl3.so

# libssl.so.1.1 ライブラリにリンクを掛けて確認します。
(py37) [admin@centos7 backend]$ sudo ln -s ~/.pyenv/versions/anaconda3-2019.03/lib/libssl.so.1.1 /lib64
(py37) [admin@centos7 backend]$ ll /lib64/libssl.so.1.1
lrwxrwxrwx 1 root root 62 9月 11 15:14 /lib64/libssl.so.1.1 -> /home/admin/.pyenv/versions/anaconda3-2019.03/lib/libssl.so.1.1
libcrypto.so.1.1
# /lib64 には libcrypto.so.1.1 ライブラリが無いのがわかります。
(py37) [admin@centos7 backend]$ ll /lib64/libcrypto.so
libcrypto.so libcrypto.so.1.0.2k libcrypto.so.6
libcrypto.so.0.9.8e libcrypto.so.10
(py37) [admin@centos7 backend]$ ll ~/.pyenv/versions/anaconda3-2019.03/lib/libcrypto
libcrypto.a libcrypto.so libcrypto.so.1.1

# libcrypto.so.1.1 ライブラリにリンクを掛けて確認します。
(py37) [admin@centos7 backend]$ sudo ln -s ~/.pyenv/versions/anaconda3-2019.03/lib/libcrypto.so.1.1 /lib64/
(py37) [admin@centos7 backend]$ ll /lib64/libcrypto.so.1.1
lrwxrwxrwx 1 root root 65 9月 11 15:15 /lib64/libcrypto.so.1.1 -> /home/admin/.pyenv/versions/anaconda3-2019.03/lib/libcrypto.so.1.1

uWSGI が参照する共有ライブラリリストに Not Found がないか確認します。

(py37) [admin@centos7 backend]$ ldd ~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
linux-vdso.so.1 => (0x00007ffe891f2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd083069000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd082d67000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd082b63000)
libz.so.1 => /lib64/libz.so.1 (0x00007fd08294d000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fd0826eb000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fd0824e6000)
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007fd0833e6000)
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fd08221c000)

libxml2.so.2 => /lib64/libxml2.so.2 (0x00007fd081eb2000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fd081caf000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd081aa7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fd081870000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd0814a3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd083285000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fd08127d000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fd08107a000)
(py37) [admin@centos7 backend]$

uwsgi コマンドを実行して問題ないか確認します。

(py37) [admin@centos7 backend]$ uwsgi
*** Starting uWSGI 2.0.18 (64bit) on [Wed Sep 11 15:22:08 2019] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-36) on 11 September 2019 06:00:20
os: Linux-3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019
nodename: centos7
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /reactjs/snowball/backend
detected binary path: /home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 4096
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with –thunder-lock)
The -s/–socket option is missing and stdin is not a socket.
(py37) [admin@centos7 backend]$

uwsgi コマンドが実行できれば、これで終了です!

共有ライブラリ libicui18n.so.58 がない場合

エラー内容

uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file: No such file or directory
—Google翻訳—
uwsgi:共有ライブラリのロード中にエラーが発生しました:
libicui18n.so.58:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
—Google翻訳—

(py37) [admin@centos7 backend]$ uwsgi
uwsgi: error while loading shared libraries: libicui18n.so.58: cannot open shared object file: No such file or directory

対処方法

同じく、ldd コマンドで共有ライブラリへの依存関係を調べて対処します。

Not Found と表示される共有ライブラリを調べます。

ここでは libicui18n.so.58libicuuc.so.58libicudata.so.58 /lib64 以下になかったため、エラーが発生した模様です。

(py37) [user@centos7 backend]$ which uwsgi
~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi

# uwsgiの経路はフルパスを指定してください。
(py37) [user@centos7 backend]$ ldd ~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
linux-vdso.so.1 => (0x00007ffebffc1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f56bac03000)
libm.so.6 => /lib64/libm.so.6 (0x00007f56ba901000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f56ba6fd000)
libz.so.1 => /lib64/libz.so.1 (0x00007f56ba4e7000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f56ba285000)
libjansson.so.4 => /lib64/libjansson.so.4 (0x00007f56ba078000)
libssl.so.1.1 => /usr/local/openssl-1.1.1c/lib/libssl.so.1.1 (0x00007f56b9de6000)
libcrypto.so.1.1 => /usr/local/openssl-1.1.1c/lib/libcrypto.so.1.1 (0x00007f56b98fc000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f56b9592000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f56b936c000)
libicui18n.so.58 => not found
libicuuc.so.58 => not found
libicudata.so.58 => not found

libutil.so.1 => /lib64/libutil.so.1 (0x00007f56b9169000)
librt.so.1 => /lib64/librt.so.1 (0x00007f56b8f61000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f56b8d2a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f56b895d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f56bae1f000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f56b875a000)
(py37) [user@centos7 backend]$

Not Found の共有ライブラリを検索します。

仮想環境の中に存在 ( ▼ ) していました。
パスがシンプルな 2 番目の共有ライブラリを利用します。

(py37) [admin@centos7 backend]$ find /home/admin -name libicui18n.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/pkgs/icu-58.2-h9c2bf20_1/lib/libicui18n.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libicui18n.so.58

(py37) [admin@centos7 backend]$ find /home/admin -name libicuuc.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/pkgs/icu-58.2-h9c2bf20_1/lib/libicuuc.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libicuuc.so.58

(py37) [admin@centos7 backend]$ find /home/admin -name libicudata.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/pkgs/icu-58.2-h9c2bf20_1/lib/libicudata.so.58
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libicudata.so.58

/lib64 ディレクトリにリンクします。

sudo ln -s ~/.pyenv/versions/anaconda3-2019.03/lib/libicui18n.so.58 /lib64/libicui18n.so.58
sudo ln -s ~/.pyenv/versions/anaconda3-2019.03/lib/libicuuc.so.58 /lib64/libicuuc.so.58
sudo ln -s ~/.pyenv/versions/anaconda3-2019.03/lib/libicudata.so.58 /lib64/libicudata.so.58

uWSGI が参照する共有ライブラリリストに Not Found がないか確認します。

(py37) [admin@centos7 backend]$ ldd ~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi: /lib64/./libstdc++.so.6: version
CXXABI_1.3.8' not found (required by /lib64/libicui18n.so.58)
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi: /lib64/./libstdc++.so.6: version
CXXABI_1.3.9′ not found (required by /lib64/libicui18n.so.58)
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi: /lib64/./libstdc++.so.6: version
CXXABI_1.3.8' not found (required by /lib64/libicuuc.so.58)
/home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi: /lib64/./libstdc++.so.6: version
CXXABI_1.3.9′ not found (required by /lib64/libicuuc.so.58)

すると、先ほどリンクを掛けた3つの共有ライブラリがそれぞれ必要とする CXXABI_1.3.xlibstdc++.so.6 ライブラリから見つからない ( ▲ ) と、エラーが発生します。

共有ライブラリ libstdc++.so.6 をPython 仮想環境の中から検索し、見つけた libstdc++.so.6.0.25/lib64 にコピーします。
(py37) [admin@centos7 backend]$ find /home/admin -name libstdc++.so.6*

/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libstdc++.so.6
/home/admin/.pyenv/versions/anaconda3-2019.03/lib/libstdc++.so.6.0.25

(py37) [admin@centos7 backend]$ sudo cp ~/.pyenv/versions/anaconda3-2019.03/lib/libstdc++.so.6.0.25 /lib64
libstdc++.so.6.0.25libstdc++.so.6 にリンクします。

libstdc++.so.6 はソフトリンクなので、削除して先ほどコピーした 6.0.25 バージョンをリンクしておきます。

(py37) [admin@centos7 backend]$ cd /lib64/
(py37) [admin@centos7 lib64]$ ls libstdc++.so.6*
libstdc++.so.6 libstdc++.so.6.0.19 libstdc++.so.6.0.25
(py37) [admin@centos7 lib64]$
(py37) [admin@centos7 lib64]$ sudo rm -f libstdc++.so.6
(py37) [admin@centos7 lib64]$ sudo ln -s libstdc++.so.6.0.25 libstdc++.so.6
(py37) [admin@centos7 lib64]$ ll libstdc++.so.6*
lrwxrwxrwx 1 root root 19 9月 6 01:15 libstdc++.so.6 -> libstdc++.so.6.0.25
-rwxr-xr-x 1 root root 991616 4月 24 23:24 libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 9536208 9月 6 01:13 libstdc++.so.6.0.25
(py37) [admin@centos7 lib64]$

uWSGI が参照する共有ライブラリリストに Not Found がないか確認します。

(py37) [admin@centos7 backend]$ ldd ~/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
linux-vdso.so.1 => (0x00007fffa6944000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f421e28c000)
libm.so.6 => /lib64/libm.so.6 (0x00007f421df8a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f421dd86000)
libz.so.1 => /lib64/libz.so.1 (0x00007f421db70000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f421d90e000)
libjansson.so.4 => /lib64/libjansson.so.4 (0x00007f421d701000)
libssl.so.1.1 => /usr/local/openssl-1.1.1c/lib/libssl.so.1.1 (0x00007f421d46f000)
libcrypto.so.1.1 => /usr/local/openssl-1.1.1c/lib/libcrypto.so.1.1 (0x00007f421cf85000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f421cc1b000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f421c9f5000)
libicui18n.so.58 => /lib64/libicui18n.so.58 (0x00007f421c580000)
libicuuc.so.58 => /lib64/libicuuc.so.58 (0x00007f421c1d2000)
libicudata.so.58 => /lib64/libicudata.so.58 (0x00007f421a6d2000)

libutil.so.1 => /lib64/libutil.so.1 (0x00007f421a4cf000)
librt.so.1 => /lib64/librt.so.1 (0x00007f421a2c7000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f421a090000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4219cc3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f421e4a8000)
libstdc++.so.6 => /lib64/./libstdc++.so.6 (0x00007f421e572000)
libgcc_s.so.1 => /lib64/./libgcc_s.so.1 (0x00007f4219aad000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f42198aa000)
(py37) [admin@centos7 backend]$

uwsgi コマンドを実行して問題ないか確認します。

(py37) [admin@centos7 backend]$ uwsgi
*** Starting uWSGI 2.0.18 (64bit) on [Thu Sep 12 10:56:29 2019] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-36) on 05 September 2019 03:51:37
os: Linux-3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019
nodename: centos7
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /reactjs/snowball/backend
detected binary path: /home/admin/.pyenv/versions/anaconda3-2019.03/envs/py37/bin/uwsgi
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 4096
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with –thunder-lock)
The -s/–socket option is missing and stdin is not a socket.
(py37) [admin@centos7 backend]$

uwsgi コマンドが実行できれば、これで終了です!

スポンサーリンク

まとめ

今回のように、特定の共有ライブラりを参照できない問題は特定環境 ( Python仮想環境 ) で設置されたライブラリが System-wide 環境 ( /lib64 ) に設定されなかったため発生しました。

その場合、特定環境 ( Python 仮想環境 ) に設置されたライブラリをSystem-wide環境 ( /lib64 ) にコピー又はリンクを掛ければ直せることが分かりました。

残りの uWSGI 構築を続けるなら こちら からどうぞ!

コメント

タイトルとURLをコピーしました