среда, 19 апреля 2023 г.

Пересборка nginx для поддержки модуля vts

https://dragonflybsd.blogspot.com/2019/03/nginx-prometheus-dashboard-grafana.html

 Вводные: есть сервер с ubuntu 16.04, которому нужно добавить модуль vts, стоит nginx=1.17.10

Решаем задачу.

Запускаем контейнер с нужной версией

docker run -ti --rm --name ubuntu16 ubuntu:16.04

Подготовка

apt update

apt install -y build-essential wget git sudo vim curl

# для удобства

export VERSION=1.17.10

cd /usr/local/src/

1) вариант через пакеты

Если офрепа

cat >> /etc/apt/sources.list.d/nginx.list << EOF
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
EOF

Но может оказаться репа ondrej

#curl https://packages.sury.org/nginx/README.txt | sh
#https://launchpad.net/~ondrej/+archive/ubuntu/nginx
# курл даст не те файлы, по линку получаем нормальные
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C

и тогда версия ниже будет 1.17.10-1+ubuntu16.04.1+deb.sury.org+1

wget http://nginx.org/packages/keys/nginx_signing.key

cat nginx_signing.key | sudo apt-key add -

apt update

apt install -y nginx=1.17.10-1~xenial

apt build-dep nginx -y

apt source nginx=1.17.10-1~xenial

vi nginx-1.17.10/debian/rules

тут добавляем модуль для сборки:

--add-dynamic-module=../nginx-module-vts

git clone https://github.com/vozlt/nginx-module-vts.git

cd nginx-1.17.10/

dpkg-buildpackage -uc -b

При ошибке
adding module in ../nginx-module-vts
./configure: error: no ../nginx-module-vts/config was found
debian/rules:40: recipe for target 'config.status.nginx' failed
make: *** [config.status.nginx] Error 1

просто копируем блок configure из вывода и снова запускаем его руками. Это явно неправильно, но - так работает. Впрочем, может и не надо руками перезапускать, просто проигнорировать ошибку и сразу make modules? У нас же нет цели (пока) собрать пакет.

а потом 

make modules

и забираем

./objs/ngx_http_vhost_traffic_status_module.so

Теперь его нужно

а) положить на диск: nginx -V 2>&1 | grep --color modules-path

б) подключить: load_module modules/ngx_http_vhost_traffic_status_module.so;

модуль для 1.17 должен лежать тут

/usr/share/nginx/modules/

Также, старые версии типа 1.17 не умеют сами сканировать папку и нужно им явно указать что грузим модуль:

cd /etc/nginx/modules-available

echo >> 99_vts.conf << EOF
load_module modules/ngx_http_vhost_traffic_status_module.so;
EOF

cd ../modules-enabled

ln -s ../modules-available/99_vts.conf

(Хинт: в новых версиях модули в /usr/lib/nginx/modules, проверить можно через nginx -V 2>&1 | grep --color modules-path)

Также проверить, что модули вообще грузятся, в ряде версий/дистров есть подключение modules-enabled/*.conf, но в некоторых вообще такого нет и надо руками делать и/или использовать conf.d.


2) вариант через исходники

# качаем исходник

wget http://nginx.org/download/nginx-${VERSION}.tar.gz

tar zxf nginx-${VERSION}.tar.gz

# и модуль

git clone https://github.com/vozlt/nginx-module-vts.git

# собираем

cd nginx-1.17.10

./configure

Возможно, тут потребуется подбирать аргументы, модули и прочее, особенно если нужен модуль у уже собранному...

https://nginx.org/en/docs/configure.html

тут добавляем модуль для сборки и собираем, посматривая в доку выше. В случае, когда писалась заметка, первый метод сработал ок, второй "как можно ещё".

Вот какой-то пример

https://www.vultr.com/docs/how-to-compile-nginx-from-source-on-ubuntu-16-04/


ЗЫ про not binary compatible:
хорошо описано например тут

Комментариев нет:

Отправить комментарий