Путь поиска динамических модулей по умолчанию

Vadim A. Misbakh-Soloviov nginx на mva.name
Сб Мар 25 18:34:17 UTC 2017


Данный пост, скорее, обращение к Максиму, т.к. именно он закрыл связанный с 
тем, о чём пойдёт речь, баг: ( https://trac.nginx.org/nginx/ticket/961 ), но я 
так же приглашаю остальных участников рассылки высказать свои мысли по этому 
поводу.

Суть же моего обращения в том, что в данном вопросе я, всё же, больше 
солидарен с ожиданиями автора бага, нежели с решением команды разработки, и 
думаю, что фича в виде установки c `--modules-path` не только пути установки 
модулей, но и пути, по которому NginX будет их искать - довольно логична.

Стандартно, многие linux-системы собирают софт с `--prefix=/usr` и т.п. (в 
общем, разбивкой служебных путей по разным частям фс). Порой на это даже 
трудно повлиять, не переделывая билдскрипты.

В общем, "среднестатистическая" линуксовая сборка NginX выглядит так:
```
--prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/
nginx/error.log --pid-path=/run/nginx.pid --lock-path=/run/lock/nginx.lock --
with-cc-opt=-I/usr/include --with-ld-opt=-L/usr/lib64 --http-log-path=/var/
log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client --
http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/
lib/nginx/tmp/fastcgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --http-
uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi
```

При этом подразумевается, что свои модули и прочие "свои" файлы софт будет 
хранить не в системных директориях, а в своих поддиректориях.

В случае же NginX, при обычной сборке, modules_path получается /usr/modules (я 
так догадываюсь, из-за того, что по умолчанию оно имеет значение $prefix/
modules).

В итоге получается крайне не логичный путь, как по мне. Что ещё за /usr/
modules?

Тут на помощь приходит `--modules_path`. Но, к сожалению, после установки 
NginX всё равно будет пытаться искать файлы относительно префикса. И класть 
там симлинк - тот ещё костыль и равноценен тому, чтобы поставить их туда 
напрямую (см. довод про нелогичность пути).

В случае инклуда конфигов, к слову, nginx вполне логично ищет их в /etc/nginx, 
а не в prefix (хотя надо уточнить, не дистрибутивный ли патч фиксит это 
поведение).
Так почему бы не сделать такое же по смыслу и для модулей? Чтобы не 
провоцировать кучу лишней писанины на пустом месте :)

====

Так же, можно было бы на этапе сборки хардкодить расширение динамических 
библиотек (so, dll, dylib), и так же не заставлять конфигописателя указывать 
этот суффикс в конфиге, а просто конкатенировать параметр load_module (если он 
в виде относительного, а не абсолютного пути) с "modules_path" спереди и 
shared_suffix на конце.

Что думаете?
// особенно Максим


Подробная информация о списке рассылки nginx-ru