11

Ansible для детского сада в скольки то частях. Часть 2. Костылируем жалкое подобие WSUS

Серия Кудахтеры: Ansible

Почему я вообще пишу эту статью? Почему нет готового решения «делайте хорошо, плохо не делайте»?
Как жесток и несправедлив этот мир!

Ansible для детского сада в скольки то частях. Часть 1.Про все сразу
Ansible для детского сада в скольки то частях. Часть 2. Костылируем жалкое подобие WSUS - Linux Server Update Services (LSUS)
Ansible для детского сада в скольки то частях. Часть 3. Настраиваем подобие безопасности и все остальное
Ansible для детского сада в скольки то частях. Часть 4. Приделываем костыли

Рассуждения про LSUS - Linux Server Update Services

Я вообще очень удивлен не тому, что в опенсорс инсталляциях творится бардак похуже, чем в  Windows среде. Больше меня удивляет то, что комьюнити с момента появления Linux, а это 17 сентября 1991 года, не сделало какого-то документа «делать так точно хорошо».
У Microsoft был Baseline Security Analyzer
У Microsoft есть Security Compliance Toolkit (SCT)
У Microsoft есть Azure Update Manager operation(AUM).

В опенсорсе был Spacewalk. Последний релиз - 2.10 / March 18, 2020
У RH был Satellite. Это Foreman + katello+ support. Foreman 3.16 and Katello 4.18
Ivanti Patch for Endpoint Manager ? Ага, цитата

Release DateSeptember 18, 2025  The U.S. Cybersecurity and Infrastructure Security Agency (CISA) has published an analysis of the malware deployed in attacks exploiting vulnerabilities affecting Ivanti Endpoint Manager Mobile (EPMM). The Cybersecurity and Infrastructure Security Agency (CISA) obtained two sets of malware from an organization compromised by cyber threat actors exploiting CVE-2025-4427 and CVE-2025-4428 in Ivanti Endpoint Manager Mobile (Ivanti EPMM). Each set contains loaders for malicious listeners that enable cyber threat actors to run arbitrary code on the compromised server. Malicious Listener for Ivanti Endpoint Mobile Management Systems

Rudder ? Ничего про него не знаю.

По беглому обзору, Katello и его функции Lifecycle Ennvironments Content View, выглядят достаточно интересно.

Но единственная «быстро» найденная статья на русском по недоразумению лежит на портале Минцифры, и не содержит описания работы Katello-agent. Который должен был быть, цитата:

Katello-agent is deprecated and will be removed in the next release. Transition your workloads to use the remote execution feature. Red Hat Satellite 6.9

Есть статья на английском. Katello and Foreman in the process of patch management. Картинок достаточно, перевод сейчас в браузере есть.

Проект (Foreman 3.16 and Katello 4.18) выглядит интересным, поскольку содержит интеграцию с Ansible, Configuring hosts by using Ansible, и это позволяет не тащить туда-сюда агенты. Но его установка и интеграция с Ansible и отзывы на него, в целом, неоднозначные.
На официальном сайте есть новость:
betadots GmbH joins the group of companies that provide professional services for Foreman!

Так что вопрос в сложности развертывания, это совсем не WSUS с его далее – далее - готово – пропишите WSUS в GPO.

Рассуждения про структуру LSUS - Linux Server Update Services

Какую задачу я решаю? Наверное, я пытаюсь доказать сам себе, что чего-то упускаю. Не может же быть такого, что нет инструмента для сбора нужной мне статистики в отрыве от системы управления или системы инвентаризации. Которая мне просто и легко сгенерирует таблицу сервер – ядро – версия основного приложения – аптайм и покажет «пока обновляться».
Самый простой вариант – сделать самому. Заодно питон вспомню.

LSUS Фаза 1. Тащим данные
LSUS Фаза 2. ?
LSUS Фаза 3. Profit

Забрать данные из Ansible facts проще всего в текстовый файл любой структуры. Хотите xml \ yaml, хотите что угодно.
Получить эталонные данные проще всего из эталонного образца нужного дистрибутива. У меня везде Debian разных версий, вот на них и буду опираться. Потому что в закрытом или частично (с прокси репозиториями) контуре внешние данные с какого-то сайта \ репозитория не получить.
Хотя и можно на проверяемом сервере делать apt get update и смотреть на счетчик пакетов для обновления.

Но на первой стадии, получения «хоть какого-то то прототипа» гораздо, гораздо проще взять данные из текстового файла \ xml \ любой другой структуры, даже бинарного формата, чем из внешнего источника. Есть же Python pickle, который и положит данные в любой удобный мне формат, и заберет их оттуда. Но, это все после, а пока

Добавление еще одного хоста Debian к Ansible

Вроде изян.
Редактируем 1st_hosts.ini, добавляем туда еще один IP, делаем как в первой части:
ansible-playbook uptime_report.yml --ask-pass --user root --inventory  /home/user/1st_hosts.ini

И, конечно, получаем на воротник, потому что в Debian по умолчанию в /etc/ssh/sshd_config запрещено root ssh – параметром PermitRootLogin. Что правильно.

Но в таком случае придется держать под руками скрипт -
sudo adduser ansible
sudo usermod -aG sudo ansible # If you want the ansible user to have sudo privileges
ssh-copy-id ansible@<debian_12_ip_address>

Или, скорее, положить этот скрипт в гит, и брать его из гит. Если вы разворачиваете VM с ноля, а не из шаблона.

Изян: stackoverflow
curl -s http://server/path/script.sh | bash -s arg1 arg2

LSUS Linux Server Update Services и структура данных

Если нужно что-то строить, то потребуется:
A Single Source of Truth (SSOT). То есть источник данных по требуемой версии. Можно сделать такой «автоматизированный для сразу всего». Это долго: планировать, напланировать, сделать. Это водопад. Можно сделать криво, руками, и так и оставить. Это Agile. Вот так и сделаю.
Похоже, это будет таблица, в виде:
Debain 10-11-12-13 и последних версий ядер к ним, а, значит, и Debian в контейнере или в VM, для того чтобы брать данные из него. Можно сделать и Debian VM, на тонком диске, без ПО. Такая VM займет 2-3 гигабайта.
Придется держать Ubuntu 18-20-22-24 и даже 25. С той же целью. Наверное, если чуть-чуть подумать, то можно «потом» сделать и автоматизацию, когда VM или контейнер запускаются, обновляются, и данные с них забирает система учета. Или в саму систему учета встроить десяток репозиториев и смотреть последние версии хотя бы ядер в репозиториях. С одной стороны это проще, с другой в тестовые виртуальные машины можно положить еще массу всякого софта, то есть соорудить еще одно dev окружение. Но это, скорее, даже не фаза 2 (?), и не фаза 3, а фаза 4 – развиваем то, что есть.
На фазе 1 хватит и простой таблицы.

С целевой структурой данных ситуация сложнее. Для своего предпоследнего пет проекта под похожие задачи я просто развернул базу данных (Postgre), и туда клал разное. Нужно ли на первом шаге такое решение? Не знаю, мне не нужно, мне и бинарной таблицы хватит. Но что туда класть? Очевидно, туда должны попасть: FQDN, IP, дистрибутив, версия дистрибутива, ядро сейчас, последние дата и время доступности, аптайм. Должно ли туда попадать предыдущее состояние объекта, и какие-то еще настройки? Не очень важно, всегда можно расширить схему данных, добавить к объекту еще пару свойств. Как, впрочем, можно и пересоздать и перезалить базу.

Заключение

Для построения LSUS Linux Server Update Services на фазе 1 вам понадобятся:
Git \ Gitlab. Можно в контейнере.
Ansible с настроенным доступом
Python. Почему не Rust и не Go? Потому что компилировать не хочется, а Python работает и так. И объемы небольшие.

Литература

SpaceWalk:Satellite
MS Azure Automatic Guest Patching for Azure Virtual Machines and Scale Sets
MS Azure Update Manager
MS Azure How Update Manager works
MS techcommunity Step-by-Step: How to update an Azure Linux VM using Update management
Ivanti Patch for Endpoint Manager
Katello и Foreman в процессе patch management
Katello and Foreman in the process of patch management
Katello (old)
Foreman 3.16 and Katello 4.18
Foreman Quickstart Guide for Foreman with Katello on RHEL/CentOS
RH Chapter 11. Host Management Without Goferd and Katello Agent
Github Katello
RedOS Настройка GLPI-сервера (для инвентаризации оборудования)

@editors, можно мне все же выдать тег Ansible ?

Лига Сисадминов

2.8K постов19.2K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

1
Автор поста оценил этот комментарий

Анализ вашей статьи и проблемы


Проблема фрагментации: В мире open-source нет единого стандарта или "серебряной пули" типа WSUS. Это следствие самой философии open-source: разнообразие дистрибутивов (Debian, RHEL, Ubuntu, Arch и т.д.), пакетных менеджеров (apt, yum/dnf, zypper) и сред делает создание универсального инструмента крайне сложной задачей.


Смерть и старение инструментов: Вы верно подметили, что такие проекты, как Spacewalk, умирают, а другие, как Foreman/Katello (Satellite), очень сложны в развертывании и поддержке. Это не "далее-далее-готово".


Проблема агентов: Тренд действительно движется в сторону агентлесс-решений (через SSH, WinRM) с использованием Ansible, Terraform и идемпотентных моделей управления. Katello-agent — яркий пример устаревания агентного подхода.


Отсутствие единой картины: Вам нужен не necessarily тяжелый Satellite, а простой инструмент для сбора статистики и отчетности ("сервер – ядро – версия приложения – аптайм – есть ли обновления"), который не требует внедрения полноценной системы управления конфигурацией.


Альтернативные варианты (то, что вы, возможно, упускаете)


Вас удивляет, что сообщество не выработало стандарта. Отчасти оно выработало, но этот стандарт — не монолитное приложение, а набор практик и инструментов, которые комбинируются.


Вот альтернативы и смежные решения, которые стоит рассмотреть перед тем, как писать свой LSUS.


1. Готовые комбайны (все еще сложные, но мощные)

Uyuni — форк Spacewalk, но активный и развивающийся. Прямой аналог Satellite с поддержкой не только RHEL, но и SUSE, Ubuntu, Debian. Как и Satellite, это "тяжелая" система.

Orcharhino — еще один форк Foreman/Satellite от немецкой компании. Также enterprise-решение.

Pulp Project — это не полноценная система, а движок для управления репозиториями, который используется внутри и Satellite, и Uyuni. Если нужно только зеркалирование и управление репозиториями — это отличный вариант.


2. Подход "Без агентов" на основе Ansible (ваш кейс)

Это самый близкий к вашим рассуждениям и современный подход.

Не нужно писать свой сборщик фактов. Ansible уже делает это идеально командой setup.


Готовые роли для управления обновлениями: Существуют готовые, протестированные сообществом роли Ansible Galaxy для apt, yum, dnf. Они умеют не только собирать факты, но и безопасно применять обновления (с перезагрузкой, с проверкой, с выбором стратегии).


Создание отчетов: Ваша идея верна. Запускается плейбук, который:

Собирает факты (gather_facts: true).

Для сбора данных об обновлениях использует модули apt/dnf (например, apt list --upgradable парсится в переменную).

Записывает все это в структурированный файл (JSON, YAML, CSV).

(Фаза 2) — этот же плейбук или отдельный скрипт на Python (Jinja2) преобразует сырые данные в красивый HTML-отчет или отправляет их в БД.


3. Подход с системами мониторинга


Это то, что вы ищете в части "сбора статистики".

Zabbix/VictorOps/Prometheus + Node Exporter: Эти системы мониторинга могут собирать метрики о версиях пакетов, ядра, аптайме. Например, можно написать кастомный скрипт для Zabbix, который возвращает 1, если ядро outdated, и 0, если актуально. И тогда на дашборде вы сразу увидите проблемные сервера. Это уже готовая, масштабируемая SSOT для мониторинга состояния.


4. Подход "Immutable Infrastructure"

Это радикальная альтернатива, уходящая от проблемы "апдейта живых серверов". Серверы не обновляются, а заменяются на новые из заранее собранного актуального образы (с помощью Packer, Docker). Тогда проблема управления обновлениями сводится к управлению образом и оркестрации (Kubernetes, Terraform). Но это культурный сдвиг, а не просто инструмент.


Рассуждения про ваш LSUS (Python-прототип)


Ваш план абсолютно верный и работоспособный для Фазы 1. Это классический кейс для Ansible + Python.


Структура прототипа LSUS Фаза 1:

Ansible-плейбук lsus_gather.yml:

Ходит по хостам из inventory.ini.

Собирает факты (setup).

Выполняет команду для получения списка обновлений (напр., для Debian: apt list --upgradable 2>/dev/null | grep -v "Listing...").

Регистрирует результат в переменные.

Сохраняет все в локальный .json файл для каждого хоста (или один большой) с помощью модуля copy и шаблона.


Python-скрипт lsus_report.py:

Читает .json файлы.

Парсит данные.

Сравнивает версии ядра и ключевых пакетов с эталоном из вашей "таблицы" (можно хранить эталоны в отдельном benchmarks.yml).

Формирует отчет в формате CSV или простой HTML-страницы.


Что использовать для SSOT (Single Source of Truth)?


На Фазе 1 — это действительно можно сделать вашим "эталонным" файлом (benchmarks.yml):

yaml

debian: "12": kernel: "6.1.0-20-amd64" openssl: "3.0.11-1~deb12u1" "11": ... ubuntu: "24.04": kernel: "6.8.0-31-generic" "22.04": ...


Позже (Фаза 2) этот эталон можно автоматизировать, поднимая чистый контейнер docker run debian:12-slim apt update && apt list --upgradable kernel и парся вывод.


Про базу данных: Начинайте с простых файлов (JSON, CSV). База данных (даже SQLite) понадобится, когда захотите строить историю, сравнивать изменения во времени, делать дашборды. Но не на первом шаге.


Заключение


Вы ничего не упускаете. Ваше удивление и фрустрация абсолютно оправданы. Просто сообщество пошло по пути гибких комбинируемых инструментов, а не монолитных "как у Microsoft" решений.


Ваш план — отличное начало. Не пишите еще один Spacewalk. Напишите простой скрипт на Ansible + Python, который решает вашу конкретную задачу: дает красивый отчет о состоянии обновлений.

Этот подход:

Agile и решает проблему здесь и сейчас.

Не требует лишних агентов.

Использует уже знакомые и популярные инструменты (Ansible, Python, Git).

Позволяет наращивать функциональность итеративно (Фаза 2: добавление БД; Фаза 3: веб-интерфейс на Flask/Django; Фаза 4: система тикетов для подтверждения обновлений).


Итоговый совет: Начните с прототипа на Ansible + Python, как вы и задумали. Это самый быстрый и практичный способ закрыть вашу потребность и доказать самому себе, что вы на правильном пути.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Pulp Project — это не полноценная система, а движок для управления репозиториями, который используется внутри и Satellite, и Uyuni. Если нужно только зеркалирование и управление репозиториями — это отличный вариант.

Мне хватает Nexus

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества