惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Check Point Blog
月光博客
月光博客
Jina AI
Jina AI
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Last Week in AI
Last Week in AI
V
V2EX
罗磊的独立博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
爱范儿
爱范儿
T
Troy Hunt's Blog
量子位
Project Zero
Project Zero
S
Secure Thoughts
V
Visual Studio Blog
美团技术团队
AI
AI
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Last Watchdog
The Last Watchdog
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
Spread Privacy
Spread Privacy
Schneier on Security
Schneier on Security
博客园_首页
P
Privacy & Cybersecurity Law Blog
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
N
News | PayPal Newsroom

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Установка Zabbix Agent 2 на Cloud Director Appliance (Photon OS 4)
Cloud4Y (Clo · 2026-04-30 · via Все публикации подряд на Хабре

Время на прочтение7 мин

Охват и читатели601

На 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 <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-канале!