На 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.
Шаги:
Скачать RPM (агент + openssl-libs 1.1 + pcre2) на машине с интернетом.
Распаковать, разложить файлы по нужным путям на appliance.
Прописать LD_LIBRARY_PATH в unit-файле, запустить службу.
Открыть порт 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-portable rpm2cpio ./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 zabbix useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin \ -c "Zabbix Monitoring System" zabbix
Каталоги для логов и runtime:
mkdir /var/log/zabbix chown -R zabbix:zabbix /var/log/zabbix mkdir /run/zabbix chown zabbix:zabbix /run/zabbix
2.2. Конфиги и бинарь агента
Копируем конфиги Zabbix:
cd /root/zbx-portable/ cp -r etc/zabbix/ /etc/zabbix/ chown -R root:zabbix /etc/zabbix chmod 755 /etc/zabbix chmod -R 755 /etc/zabbix/zabbix_agent2.d chmod 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_agent2 chown root:root /usr/sbin/zabbix_agent2 chmod 755 /usr/sbin/zabbix_agent2
2.3. Библиотеки в отдельном каталоге
Копируем извлечённые .so с сохранением симлинков:
mkdir /etc/zabbix/libs cp -a /root/zbx-portable/libs/. /etc/zabbix/libs/
На всех каталогах по пути нужен execute-bit (x), иначе линкер не сможет зайти в директорию:
chmod 755 /etc/zabbix chmod 755 /etc/zabbix/libs chmod 755 /etc/zabbix/libs/usr chmod 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=zabbix RuntimeDirectoryMode=0755
Применяем:
systemctl daemon-reload systemctl 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-pager journalctl -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 # должно вернуть: 1 zabbix_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-agent2 zabbix_get -s 127.0.0.1 -k agent.ping
Если что-то отвалилось — пересоберите /etc/zabbix/libs/ из свежих RPM (см. Часть 1) и при необходимости поднимите версию самого агента.
systemctl disable --now zabbix-agent2.service rm -f /usr/lib/systemd/system/zabbix-agent2.service rm -f /usr/sbin/zabbix_agent2 rm -rf /etc/zabbix rm -rf /var/log/zabbix rm -rf /run/zabbix userdel zabbix && groupdel zabbix 2>/dev/null systemctl 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-канале!
Xelld
Лезть внутрь appliance и надеяться, что вы не потеряете поддержку так - ну, странно.
В vcenter же есть SNMP и API, они отдают данные по тому же месту, памяти и CPU. Зачем тащить внутрь zabbix agent?
Кстати, на картинке у вас "Zibbacx".
Cloud4Y Автор
Спасибо! Заменили картинку.