Использование PCRE 8.20 с Nginx 1.0.11 и Passenger
Я загрузил и распаковал исходный код nginx в ~/nginx-1.0.11, а затем непосредственно загрузил PCRE 8.20, поскольку последняя версия установщика Passenger не может загрузить его автоматически. Я сделал типичную./configure, make, sudo make install для PCRE, которая по умолчанию помещает его в / usr / local / lib. Все идет нормально. Использование passenger-install-nginx-module и указание исходного каталога как /home/username/nginx-1.0.11 работало просто отлично.
Когда я запустил проверку синтаксиса с помощью /opt/nginx/sbin/nginx -t, мне сообщили, что libpcre.so.0 не может быть найден. Я запустил ldd против nginx и получил следующее:
linux-vdso.so.1 => (0x00007fff1dd7b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fbfcde57000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00007fbfcdc1e000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fbfcd909000)
libm.so.6 => /lib/libm.so.6 (0x00007fbfcd686000)
libpcre.so.0 => not found
(truncated after this line)
Поскольку nginx смог найти файлы в / usr / lib, я перекомпилировал PCRE с помощью./configure --prefix=/usr, и теперь все работает отлично. Мой вопрос заключается в том, есть ли более разумный способ сделать это. Могу ли я сохранить PCRE установленным по умолчанию в / usr / local и как-то сказать системе или nginx искать там каталоги lib? Библиотеки до сих пор для меня загадка.
1 ответ
Я могу придумать несколько вариантов...
/etc/ld.so.conf
Можете добавить /usr/local/lib
к глобальному списку путей к библиотекам для поиска. Добавьте его в файл /etc/ld.so.conf и запустите ldconfig
обновить кеш. Лично мне не очень комфортно с этим вариантом из-за его глобального воздействия.
LD_LIBRARY_PATH
Добавляя /usr/local/lib
переменной окружения LD_LIBRARY_PATH, система должна быть в состоянии найти ее при запуске nginx. Вы, вероятно, не должны устанавливать это постоянно в своей среде оболочки, так как это будет иметь аналогичное глобальное влияние на изменение /etc/ld.so.conf. Вместо этого вы можете проверить его в режиме adhoc, добавив префикс вашей команды nginx:
LD_LIBRARY_PATH=/usr/local/lib /opt/nginx/sbin/nginx -t
Вы также можете установить переменную в скрипте инициализации для nginx.
варианты configure
Сценарий конфигурации для nginx, по-видимому, имеет флаг, который позволит вам передавать дополнительные параметры ld
, Вы можете попробовать запустить скрипт конфигурации nginx с --with-ld-opt='-L/usr/local/lib'
, Я не уверен, изменит ли это путь поиска библиотеки только во время компиляции, или это также повлияет на время выполнения. Могут быть и другие варианты компоновщика, которые тоже помогут. Прошло немного времени с тех пор, как мне пришлось возиться с этим.
Сценарий конфигурации также имеет --with-pcre
опция для передачи пути к источникам PCRE, но это, кажется, используется для статической ссылки библиотеки в nginx. Это, вероятно, тоже не очень хорошая идея.
Я предлагаю сделать тестовую сборку nginx, используя --with-ld-opt='-L/usr/local/lib'
(возможно, в отдельном каталоге сборки, если вы хотите сохранить оригинал). Затем вы можете проверить скомпилированный двоичный файл в каталоге сборки с помощью ldd
как вы делали раньше, чтобы увидеть, если это имеет какое-либо значение.