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

Страницы:  1

Ответить
 

Professor Seleznov


На 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-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  -p 10050 -k agent.ping
# должно вернуть: 1
zabbix_get -s -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-канале!-Источник
 
Loading...
Error