Что такое cfengine (далее для простоты буду называть его cfe)? Это система управления конфигурациями ПО для унификации инфраструктуры. Идея в том, что с помощью таких систем на большом количестве машин можно поддерживать заданные настройки в конфиг-файлах, заданный набор ПО и заданные версии этого ПО и всё из одного центрального "сервера управления".

Оговорюсь сразу, что существует масса альтернатив: это и puppet, и ansible, и salt, и chef, и ряд других систем, менее известных широкому кругу системных администраторов.

Чем примечателен среди этих всех систем именно cfengine? во-первых это один из самых первых продуктов такого класса, он появился в 1993-м году. А во-вторых, он написан на языке Си, что сразу же выливается в небольшое, по сравнению с другими представителями такого класса ПО, потребление памяти. И, конечно же, язык, на котором написан этот продукт создаёт и ограничения на возможности самого продукта. Его так просто не расширить, как, например, тот же chef или salt. (Хотя, конечно, производитель мог бы встроить какой-нибудь lua или js специально для написания плагинов).

Чем ещё примечателен cfe? собственно, откуда взялось название статьи? А оно взялось из тех механик, по которым работает cfe.

CFE в своей работе напоминает chef. Как и chef, cfe скачивает к себе, на клиентскую часть, весь конфиг с сервера и уже затем разбирается, что применить на конкретной машине.

Соответственно, часть сведений о машине он добывает на месте и генерирует необходимые в работе переменные, а часть переменных просто зашиты в агент на этапе сборки-линковки.

И здесь начинается самое печальное. Существуют официальные сборки cfengine и сборки, сделанные мэйнтэйнерами дистрибутивов, согласно правилам пакетирования ПО для той или иной дистрибуции ОС. Самое важное, чем различаются эти поставки cfe - это не только версия самого cfe, но и зашитые пути, по которым находятся конфиги, которые интерпретирует cfe, чтобы настроить ту или иную систему.

Официальная поставка подразумевает размещение конфигов в /var/cfengine и бинарников в /var/cfengine/bin. Официальная поставка подразумевает установку cfe на дистрибутивы RedHat/CentOS, Debian, Ubuntu. Для этого пользователям предоставляются соответствующие пакеты. К сожалению, в форме репозиториев производитель оформить это всё не удосужился.

Есть пакеты с cfe от мэйнтэйнеров Debian и Ubuntu. Там предполагается, что бинарники живут в /usr/sbin, а конфиги - в /var/lib/cfengine3, также установлен симлинк /var/lib/cfengine3/bin на /usr/sbin.

А меня, в частности, интересовал пакет для cfe, но под alpine linux. И там такой есть. Только вот ведь незадача: мэйнтэйнеры alpine, видимо, совсем уж наркоманы, у них часть конфигов лежит в /var/lib/cfengine, а часть в /var/lib/libntech.

И, наконец, согласно slackbuild-у со slackbuilds.org конфиги cfe для slackware располагаются в /var/lib/cfengine.

В результате без какой-то особенной, неподдерживаемой апстримом, магии в конфигах сконфигурировать с центрального сервера разные ОС совсем не получается. И есть у меня подозрение, что в виду особенностей cf-agent-а, универсальный конфиг написать просто не получится.

Собственно, это всё, о чём я хотел написать в этот раз. Как говорит Louis Rossmann: I hope you learned something.

Next Post