Назад | Перейти на главную страницу

Исправление общей библиотеки PCRE в CentOS

Это не вопрос о PCRE, а скорее вопрос об обновлении разделяемых библиотек. Распространение CentOS, которое я использую, позволяет только yum обновляется до версии 6.6 или чего-то подобного.

Я устанавливаю средство отслеживания проблем, для которого требуется PCRE версии 8.0+. Я не могу удалить текущую версию PCRE 6.6, так как от нее зависит почти все, и система сломается.

Таким образом, я скомпилировал и установил 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

Успех! Я уничтожил существующие библиотеки, все, чего не было в /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 - стек -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