Исправление общей библиотеки PCRE в CentOS
Это не вопрос PCRE, а вопрос обновления общих библиотек. Дистрибутив CentOS, который я использую, позволяет только yum
обновление до версии 6.6 или где-то похожее.
Я устанавливаю систему отслеживания проблем, для которой требуется PCRE версии 8.0+. Я не могу удалить текущую версию 6.6 PCRE, так как почти все зависит от нее, и система сломается.
Таким образом, я скомпилировал и установил PCRE 8.12 из исходного кода, но хотя pcretest -C
показал новую версию, вызов php_info() на моей тестовой странице указывает, что библиотеки 6.6 все еще загружаются. Я нашел ссылку на сайт, предлагающий, как заменить старые библиотеки на новые.
При этом, я думаю, что-то не совсем правильно. Несколько команд сообщают о проблемах:
/usr/bin/php: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
Что именно я должен сделать, чтобы решить проблему? Я не очень знаком с общими / динамическими библиотеками. У меня есть следующие файлы:
[root@vps tracker]# find / -name libpcre.so* -exec ls -l '{}' \;
lrwxrwxrwx 2 root root 16 Jul 14 07:53 /lib64/libpcre.so.0 -> libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:53 /usr/local/lib/libpcre.so.0 -> libpcre.so.0.0.1
-rwxr-xr-x 1 root root 116790 Jul 14 07:53 /usr/local/lib/libpcre.so.0.0.1
lrwxrwxrwx 2 root root 16 Jul 14 07:53 /usr/local/lib/libpcre.so -> libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so.0 -> libpcre.so.0.0.1
-rwxr-xr-x 1 root root 116790 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so -> libpcre.so.0.0.1
2 ответа
Успех! Я сдул существующие библиотеки, все, что не было в /root/pcre-8.12/
затем побежал ./configure; make; make install
из исходного каталога.
Он установлен правильно, но все равно показал мне похожую ошибку. Я заметил:
[root@vps pcre-8.12]# ldd /usr/sbin/httpd
libm.so.6 => /lib64/libm.so.6 (0x00002b3c8a9dd000)
libpcre.so.0 => not found
(bunch of others)
Что библиотеки были в /lib64/
в то время как единственная ссылка, созданная установщиком исходного кода, была:
/usr/local/lib/libpcre.so.0
Итак, я просто создал ссылку в /lib64/
:
[root@vps tracker]# link /usr/local/lib/libpcre.so.0.0.1 /lib64/libpcre.so.0
И все вроде бы отлично!
Возможно
ldd /usr/bin/php
покажет, где php ожидает найти общие библиотеки pcre.
В моем случае я исправил это с помощью следующей команды, изменив пределы выполнения:
echo "php-fpm - stack -1" >> / etc / security / limits.conf
echo "apache - stack -1" >> / etc / security / limits.conf
su apache --shell /bin / bash --command "ulimit -s"
mkdir -p /etc/systemd/system/php-fpm.service.d
echo [Сервис] >/etc/systemd/system/php-fpm.service.d/ulimit.conf
эхо LimitSTACK= бесконечность >> / etc / systemd / system / php-fpm.service.d / ulimit.conf
mkdir -p /etc/systemd/system/nginx.service.d
echo [Сервис] >/etc/systemd/system/nginx.service.d/ulimit.conf
эхо LimitSTACK= бесконечность >> / etc / systemd / system / nginx.service.d / ulimit.conf
echo "fs.file-max=500000" >> /etc/sysctl.conf
systemctl демон-перезагрузка
systemctl перезапустить php-fpm