Установка Zabbix Agent 2 на Cloud Director Appliance (Photon OS 4)

от автора

На Photon OS 4 (Cloud Director Appliance ≥ 10.6, vCenter Server Appliance 8) ставим Zabbix Agent 2 (LTS 7.0, RPM под EL8) без установки чужих RPM в систему. Распаковываем три RPM (агент, openssl-libs 1.1, pcre2), кладём бинарь и конфиги штатно, недостающие .so складываем в /etc/zabbix/libs/ и подключаем к сервису через LD_LIBRARY_PATH в systemd-юните. На vCSA дополнительно извлекаем .hmac-файлы для FIPS. В финале — открытие порта 10050 и проверка с Zabbix-сервера через zabbix_get.

Шаги:

1.    Скачать RPM (агент + openssl-libs 1.1 + pcre2) на машине с интернетом.

2.    Распаковать, разложить файлы по нужным путям на appliance.

3.    Прописать LD_LIBRARY_PATH в unit-файле, запустить службу.

4.    Открыть порт 10050 и проверить доступность агента с сервера мониторинга.

Зачем это нужно

Photon OS — компактный базовый дистрибутив VMware для appliance-решений. Официально установка Zabbix Agent на Photon не поддерживается, а штатный пакетный менеджер tdnf не сможет закрыть зависимости агента: Photon OS 4 поставляется с OpenSSL 3 (libssl.so.3, libcrypto.so.3) и без PCRE2. Zabbix Agent 2, собранный для EL8, ждёт:

•       libssl.so.1.1

•       libcrypto.so.1.1

•       libpcre2-8.so.0

Доступ к репозиторию VMware с самого аплайнса часто закрыт сетевыми политиками, а ставить «чужие» RHEL-пакеты в систему рискованно — сломаются обновления самого аплайнса. Поэтому собираем «портативную» установку: библиотеки лежат отдельно и подгружаются только агенту.

Почему именно RPM под EL8, а не EL9

EL9 идёт уже на OpenSSL 3 — казалось бы, ближе к Photon 4. Но Zabbix Agent 2 для EL9 собран против более свежего glibc (2.34+), а в Photon OS 4 — glibc 2.32. Бинарь EL9 на Photon 4 просто не запустится из-за несовместимых символов glibc. Сборка EL8 (glibc 2.28) совместима, поэтому единственное, что приходится «донести» — это OpenSSL 1.1 и PCRE2.

О версиях пакетов

Конкретные версии RPM ниже актуальны на момент написания (апрель 2026). Перед развёртыванием возьмите свежие версии из тех же источников: Zabbix — repo.zabbix.com/zabbix/7.0/rhel/8/x86_64/, openssl-libs 1.1 и pcre2 — pkgs.org или зеркала Rocky/AlmaLinux 8. Цепочка зависимостей и пути сборки от версии к версии не меняются.

Часть 1. Подготовка

Подготовиться можно как на самом appliance (если у него есть интернет), так и на соседней Linux-машине. Все артефакты собираем в /root/zbx-portable.

1.1. Скачиваем RPM

•       zabbix-agent2 RPM под EL8 — с https://repo.zabbix.com/zabbix/7.0/rhel/8/x86_64/

•       openssl-libs 1.1.x под EL8 — например, с pkgs.org

•       pcre2 под EL8 — там же

Раскладываем в ./rpm/:

/root/zbx-portable/rpm/  openssl-libs-1.1.1k-15.el8_6.x86_64.rpm  pcre2-10.32-3.el8_6.x86_64.rpm  zabbix-agent2-7.0.23-release1.el8.x86_64.rpm

1.2. Полностью распаковываем пакет с агентом

cd /root/zbx-portablerpm2cpio ./rpm/zabbix-agent2-*.rpm | cpio -idmv

1.3. Извлекаем только нужные библиотеки

Из пакетов с библиотеками вытаскиваем только нужные .so и складываем в ./libs/. Для систем с включённым FIPS (vCSA) дополнительно извлекаем .hmac-файлы — без них OpenSSL в FIPS-режиме откажется грузиться:

mkdir -p /root/zbx-portable/libs && cd /root/zbx-portable/libs rpm2cpio /root/zbx-portable/rpm/pcre2-10.32-3.el8_6.x86_64.rpm \  | cpio -idmv './usr/lib64/libpcre2-8.so.0*' rpm2cpio /root/zbx-portable/rpm/openssl-libs-1.1.1k-15.el8_6.x86_64.rpm \  | cpio -idmv './usr/lib64/libssl.so.1.1*' './usr/lib64/libcrypto.so.1.1*' # Только для vCSA / FIPS-режима:rpm2cpio /root/zbx-portable/rpm/openssl-libs-1.1.1k-15.el8_6.x86_64.rpm | cpio -idmv \  './usr/lib64/.libcrypto.so.1.1.1k.hmac' \  './usr/lib64/.libcrypto.so.1.1.hmac' \  './usr/lib64/.libssl.so.1.1.1k.hmac' \  './usr/lib64/.libssl.so.1.1.hmac'

Обратите внимание на символьные ссылки в полученных файлах — cpio сохранит их, переносить файлы дальше нужно с флагами, сохраняющими симлинки (cp -a / rsync -a).

Часть 2. Установка на Photon OS 4

2.1. Системный пользователь и каталоги

Создаём пользователя и группу для агента:

groupadd --system zabbixuseradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin \  -c "Zabbix Monitoring System" zabbix

Каталоги для логов и runtime:

mkdir /var/log/zabbixchown -R zabbix:zabbix /var/log/zabbix mkdir /run/zabbixchown zabbix:zabbix /run/zabbix

2.2. Конфиги и бинарь агента

Копируем конфиги Zabbix:

cd /root/zbx-portable/cp -r etc/zabbix/ /etc/zabbix/chown -R root:zabbix /etc/zabbixchmod 755 /etc/zabbixchmod -R 755 /etc/zabbix/zabbix_agent2.dchmod 640 /etc/zabbix/zabbix_agent2.conf

Теперь правим /etc/zabbix/zabbix_agent2.conf — Server, ServerActive, Hostname и т. д.

Согласуйте PidFile с RuntimeDirectory

В юните дальше указывается RuntimeDirectory=zabbix → systemd создаст /run/zabbix при старте. Параметр PidFile в zabbix_agent2.conf должен указывать туда же: PidFile=/run/zabbix/zabbix_agent2.pid. Иначе агент будет писать pid в путь по умолчанию, а systemd будет очищать другой каталог — рассинхрон при рестартах.

Копируем бинарник агента:

cp usr/sbin/zabbix_agent2 /usr/sbin/zabbix_agent2chown root:root /usr/sbin/zabbix_agent2chmod 755 /usr/sbin/zabbix_agent2

2.3. Библиотеки в отдельном каталоге

Копируем извлечённые .so с сохранением симлинков:

mkdir /etc/zabbix/libscp -a /root/zbx-portable/libs/. /etc/zabbix/libs/

На всех каталогах по пути нужен execute-bit (x), иначе линкер не сможет зайти в директорию:

chmod 755 /etc/zabbixchmod 755 /etc/zabbix/libschmod 755 /etc/zabbix/libs/usrchmod 755 /etc/zabbix/libs/usr/lib64 chmod 644 /etc/zabbix/libs/usr/lib64/libcrypto.so.1.1.* \          /etc/zabbix/libs/usr/lib64/libssl.so.1.1.* \          /etc/zabbix/libs/usr/lib64/libpcre2-8.so.0.*

2.4. systemd-юнит и LD_LIBRARY_PATH

Копируем unit-файл из распакованного RPM:

cp usr/lib/systemd/system/zabbix-agent2.service \   /usr/lib/systemd/system/zabbix-agent2.service

Если запустить агента сейчас, получим ошибку:

/usr/sbin/zabbix_agent2: error while loading shared libraries:  libpcre2-8.so.0: cannot open shared object file

Список недостающих библиотек удобно смотреть так:

ldd /usr/sbin/zabbix_agent2 | awk '/not found/{print $1}'

Решение — добавить в секцию [Service] переменную окружения, чтобы библиотеки видела только эта служба, а заодно зафиксировать каталог и режим для pid-файла:

vim /usr/lib/systemd/system/zabbix-agent2.service [Service]Environment="LD_LIBRARY_PATH=/etc/zabbix/libs/usr/lib64"RuntimeDirectory=zabbixRuntimeDirectoryMode=0755

Применяем:

systemctl daemon-reloadsystemctl enable --now zabbix-agent2.service

Альтернатива: вшить путь в бинарь через patchelf

Если вы хотите, чтобы агент находил библиотеки независимо от того, как его запустили (не только через systemd, но и руками для отладки), можно вшить RUNPATH прямо в ELF:

tdnf install -y patchelf   # или принести patchelf тем же способом, что и агентаpatchelf --set-rpath /etc/zabbix/libs/usr/lib64 /usr/sbin/zabbix_agent2

После этого LD_LIBRARY_PATH в юните не нужен. Минус — после обновления бинарника агента patchelf нужно применять заново.

Часть 3. Проверка работы

3.1. Зависимости закрыты

Первое, что хочется сделать после правки юнита — запустить ldd и убедиться, что библиотеки нашлись. Но есть нюанс: ldd использует переменные окружения текущего шелла, а LD_LIBRARY_PATH мы выставили только внутри unit-файла. Поэтому «голый» ldd будет продолжать показывать libssl.so.1.1, libcrypto.so.1.1 и libpcre2-8.so.0 как not found, даже если агент при этом прекрасно работает под systemd.

Правильная проверка — с тем же LD_LIBRARY_PATH, который видит служба:

LD_LIBRARY_PATH=/etc/zabbix/libs/usr/lib64 \  ldd /usr/sbin/zabbix_agent2 | awk '/not found/{print $1}'

Должны получить пустой вывод.

3.2. Статус и логи службы

systemctl status zabbix-agent2 --no-pagerjournalctl -u zabbix-agent2 -b -n 50 --no-pager

3.3. Проверка с Zabbix-сервера

Запуск процесса ещё не гарантирует, что агент реально отвечает. С хоста Zabbix-сервера или прокси проверяем end-to-end:

zabbix_get -s <appliance-ip> -p 10050 -k agent.ping# должно вернуть: 1zabbix_get -s <appliance-ip> -p 10050 -k agent.version# должно вернуть номер версии агента

Если zabbix_get упирается в таймаут — проблема либо в firewall (см. Часть 4), либо в параметре Server= в конфиге агента: хост сервера должен быть в нём явно разрешён.

Часть 4. Открытие порта 10050

4.1. Cloud Director Appliance

В /etc/systemd/scripts/ip4save-vmw добавить правило рядом с однотипными записями:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT # и перезапустить службу:service iptables restart

4.2. vCenter Server Appliance

Временное правило (действует до перезагрузки):

iptables -I port_filter -p tcp --dport 10050 -j ACCEPT

Закрепить правило между перезагрузками — добавить блок в /etc/vmware/appliance/services.conf:

"zabbix-agent": {    "firewall": {        "enable": true,        "rules": [            {                "direction":  "inbound",                "protocol":   "tcp",                "porttype":   "dst",                "port":       "10050",                "portoffset": 0            }        ]    }}

Часть 5. Сопровождение

5.1. Ротация логов

Из RPM мы скопировали только /etc/zabbix/, без /etc/logrotate.d/. Чтобы лог /var/log/zabbix/zabbix_agent2.log не рос бесконтрольно, добавьте конфиг ротации:

cat > /etc/logrotate.d/zabbix-agent2 <<'EOF'/var/log/zabbix/zabbix_agent2.log {    weekly    rotate 12    compress    delaycompress    missingok    notifempty    create 0640 zabbix zabbix    postrotate        /bin/kill -HUP `cat /run/zabbix/zabbix_agent2.pid 2>/dev/null` 2>/dev/null || true    endscript}EOF

5.2. Что произойдёт при обновлении appliance

ldd /usr/sbin/zabbix_agent2 | awk '/not found/{print $1}'systemctl status zabbix-agent2zabbix_get -s 127.0.0.1 -k agent.ping

Если что-то отвалилось — пересоберите /etc/zabbix/libs/ из свежих RPM (см. Часть 1) и при необходимости поднимите версию самого агента.

systemctl disable --now zabbix-agent2.servicerm -f  /usr/lib/systemd/system/zabbix-agent2.servicerm -f  /usr/sbin/zabbix_agent2rm -rf /etc/zabbixrm -rf /var/log/zabbixrm -rf /run/zabbixuserdel zabbix && groupdel zabbix 2>/dev/nullsystemctl daemon-reload# и убрать правило для порта 10050 из firewall (см. Часть 4)

5.4. AppArmor / SELinux

Photon OS 4 в стандартной поставке не имеет принудительного MAC-профиля для произвольных бинарей, но если вы вручную включали AppArmor или SELinux — убедитесь, что для /usr/sbin/zabbix_agent2 нет ограничений на чтение /etc/zabbix/libs/. Симптом — агент стартует, но ldd показывает «not found» под пользователем zabbix и не показывает под root.

Итог

Агент готов: можно подключать пользовательские проверки и плагины — например, для мониторинга PostgreSQL внутри аплайнса. Главное, что мы получили: рабочий Zabbix Agent 2 на Photon OS 4 без вмешательства в системные библиотеки и без установки чужих RPM, то есть без рисков для штатной поддержки appliance со стороны VMware/Broadcom.

Следите, что остаётесь с нами! Ваш Cloud4Y. Читайте нас здесь или в Telegram-канале!

ссылка на оригинал статьи https://habr.com/ru/articles/1030138/