2017年3月13日月曜日

php: error while loading shared libraries: libpq.so.5: cannot open shared object fileが出る

どうも俺です。

構築したばかりのサーバーで
$ php -v
と打ってphpのバージョンを確認しようとしたら、

php: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
というエラーが出ちゃいました。

エラー内容のとおり、
何かしらの共有ライブラリ(今回はlibpq.so.5)が読み込めないというエラーです。

ちなみにrootになって同じコマンドを打つと

# php -v
PHP 5.6.24 (cli) (built: Mar  2 2017 15:32:45) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
と問題なく実行されます。
つまり、今回のエラーは何かしらのPermissionが関係してるだろうと予想つきました。

こういう場合は共有ライブラリの依存関係を確認してみます。

$ ldd /usr/local/bin/php
        linux-vdso.so.1 =>  (0x00007ffda23d7000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f2982411000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f29821fa000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2981fe0000)
        libpq.so.5 => not found
        librt.so.1 => /lib64/librt.so.1 (0x00007f2981dd7000)
        libcurl.so.4 => /lib64/libcurl.so.4 (0x00007f2981b6e000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f298186c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f2981667000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f298144e000)
        libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f29810e4000)

注目すべきは、libpq.so.5 => not found となっているところです。


今度はrootになって確認してみます。

# ldd /usr/local/bin/php
        linux-vdso.so.1 =>  (0x00007ffce4d60000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f0d05ff1000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f0d05dda000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f0d05bc0000)
        libpq.so.5 => /usr/local/pgsql/lib/libpq.so.5 (0x00007f0d05997000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f0d0578e000)
        libcurl.so.4 => /lib64/libcurl.so.4 (0x00007f0d05525000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f0d05223000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f0d0501e000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f0d04e05000)

今度は libpq.so.5 => /usr/local/pgsql/lib/libpq.so.5 と表示されました。

ということで/usr/local/pgsqlディレクトリを確認してみます。


$ ls -l /usr/local
drwxr-xr-x   7 root     root       62  3月  2 15:44 bin
drwxr-xr-x.  2 root     root       22  7月 29  2016 etc
drwxr-xr-x.  2 root     root        6  8月 12  2015 games
drwxr-xr-x.  3 root     root       16  7月 29  2016 include
drwxr-xr-x.  3 root     root       30 12月  6 15:26 lib
drwxr-xr-x.  2 root     root        6  8月 12  2015 lib64
drwxr-xr-x.  2 root     root        6  8月 12  2015 libexec
drwx------   6 postgres postgres   52  3月  2 14:41 pgsql
drwxr-xr-x   3 root     root       16  3月  2 15:33 sbin
予想通りpgsqlユーザーのみ読み書きできる状態になってしまっていました。

適切に権限を追加して完了。




以上でぇぇぇぇす。

0 件のコメント: