Я загрузил и распаковал исходный код nginx в ~ / nginx-1.0.11, а затем загрузил PCRE 8.20 напрямую, поскольку последняя версия установщика Passenger не может загрузить его автоматически. Я выполнил типичный ./configure, make, sudo make install для PCRE, который по умолчанию поместил его в / usr / local / lib. Все идет нормально. Использование пассажирского-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? Библиотеки до сих пор остаются для меня загадкой.
Я могу придумать несколько вариантов ...
Можете добавить /usr/local/lib
в глобальный список путей к библиотекам для поиска. Добавьте его в /etc/ld.so.conf файл, затем запустите ldconfig
для обновления кеша. Лично мне этот вариант не очень нравится из-за его глобального влияния.
Добавляя /usr/local/lib
к LD_LIBRARY_PATH переменная окружения, система должна найти ее при запуске nginx. Вероятно, вам не следует устанавливать это постоянно в среде оболочки, поскольку это будет иметь такое же глобальное влияние, как и изменение /etc/ld.so.conf. Вместо этого вы можете протестировать это специальным образом, добавив к команде 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
как вы это делали раньше, чтобы увидеть, имеет ли это значение.