PostgreSQL компиляция библиотеки libzbxpgsql и пересборка RPM-пакета

Библиотека libzbxpgsql используется для мониторинга PostgreSQL в Zabbix. Последний релиз библиотеки был в 2017 году и свежий пока не вышел, в то же время, последняя версия libzbxpgsql не работает с zabbix agent версий 4+. В официальном репозитории https://github.com/cavaliercoder/libzbxpgsql есть фикс этой проблемы https://github.com/cavaliercoder/libzbxpgsql/pull/141, фикс проблемы с DEBUG логированием zabbix агентом https://github.com/cavaliercoder/libzbxpgsql/pull/142.
Для того чтобы можно было использовать исправления, необходима виртуалка с CentOS 7+ и возможностью поставить на нее пакеты для компиляции исходников (make, gcc и т.д.).
Так же ставим пакет rpm-build, он потребуется для пересборки rpm-пакета:

yum install rpm-build

Устанавливаем последнюю доступную версию пакета libzbxpgsql (из репозитория или можно перекинуть на машину свой пакет и поставить локально):

yum install libzbxpgsql

Скачиваем из репозитория https://github.com/cavaliercoder/libzbxpgsql архив с нужным нам коммитом, разархивируем его и копируем всю директорию на сервер, например, называем папку libzbxpgsql-fix_142 и копируем ее на сервер в директорию /home/user/.
Для компиляции нам понадобятся так же исходники Zabbix. Скачиваем нужную версию на сайте https://www.zabbix.com/ru/download_sources, разархивируем и копируем на сервер, например, исходники будут располагаться в директории /home/user/zabbix-4.2.0/.
Ставим пакеты PostgreSQL, необходимые для сборки, можно поставить последнюю доступную версию. Список пакетов (обязателен к установке пакет devel) (версии пакетов могут отличаться от представленных ниже):

postgresql11-contrib.x86_64    11.3-1PGDG.rhel7    installed
postgresql11-devel.x86_64            11.3-1PGDG.rhel7    installed
postgresql11-libs.x86_64             11.3-1PGDG.rhel7    installed
postgresql11-server.x86_64           11.3-1PGDG.rhel7    installed

Теперь нужно перейти в директорию /home/user/libzbxpgsql-fix_142 и скомпилировать библиотеку по данному руководству https://github.com/cavaliercoder/libzbxpgsql/blob/master/README.md.
Выполняем autogen.sh:

./autogen.sh

После этого, необходимо создать переменную окружения PG_CONFIG и в качестве ее значения указать путь к бинарному файлу pg_config нашей версии Postgres, иначе следующий шаг выполнить не удастся. Создаем переменную:

export PG_CONFIG=/usr/pgsql-11/bin/pg_config

Далее выполняем configure, сборку и установку собранной библиотеки:

./configure --with-zabbix=/home/user/zabbix-4.2.0
make
sudo make install

Теперь новая версия библиотеки скомпилирована и лежит в директории /usr/local/lib.
Т.к. мы используем пакетную версию Zabbix, нужно выполнить редирект директорий как написано в инструкции https://github.com/cavaliercoder/libzbxpgsql/blob/master/README.md, выполняем:

sudo make prefix=/usr sysconfdir=/etc libdir=/usr/lib64 install

Теперь библиотека libzbxpgsql.so находится в директории /usr/lib64/. Копируем нашу новую версию в /usr/lib64/zabbix/modules/ перезаписывая файл старой версии:

cp /usr/lib64/libzbxpgsql.so /usr/lib64/zabbix/modules/

Теперь необходимо пересобрать rpm-пакет libzbxpgsql, чтобы, вместо старой версии библиотеки, он содержал новый файл libzbxpgsql.so. Хорошая инструкция по пересборке доступна по ссылке https://linuxgazette.net/175/silva.html. Для пересборки пакета выполняем команду rpmrebuild package_name, в процессе выполнения будет указано какие файлы изменились и нужно будет несколько раз утвердительно ответить на вопросы утилиты, так же (желательно) указываем новую версию билда (текущая будет указана):

rpmrebuild libzbxpgsql

В результате утилита выведет путь к собранному rpm-пакету, например:

result: /root/rpmbuild/RPMS/x86_64/libzbxpgsql-1.1.0-3.x86_64.rpm

В версии пакета можно увидеть версию билда (в данном случае 3) — 1.1.0-3.
Все, теперь этот пакет можно ставить и проверять на тестовых серверах и, в случае успеха, ставить на продовые. Путем таких
компиляций и пересборок пакета можно обновлять версию библиотеки до выхода релиза.

0

Добавить комментарий

Ваш e-mail не будет опубликован.