LINUX.ORG.RU
решено ФорумAdmin

Простейший аналог ansible

 , , , ,


3

1

Есть ли в природе аналог ansible, chef и т.п., но более легковесный. Без всяких там инвентарей, мастер-клиент архитектуры и прочего.

Хочу иметь возможность, так сказать, bootstraping’а системы без лишнего геморроя. Т.е. поставить пару пакетов, добавить ssh ключи, пару конфигов и т.д. Что-то среднее между bash-скриптом и ansible playbook. Мне не нужно раскатывать конфигурацию на кучу хостов, а тупо время от времени настраивать голую систему.

Bash-скрипт с обработкой всех возможных случаев писать лениво и долго, ansible тут как микроскоп для забивки гвоздей. Нужно что-то типа DSL для конфигурации системы. Желательно несильно завязанное на определенный дистрибутив.

★★★★

Ответ на: комментарий от alpha

Ansible всё же больше master -> host[s] схема. Я не хочу геморроиться с ssh ключами, паролями. Мне б просто на тачке запустить команду а-ля sh ./bootstrap.sh и всё. Да, емнип, ансибл через хитро закрученную жопу локальный ssh на localhost раскатывается.

cocucka ★★★★ ()

Я хочу скрипт вида:

add-package libbla,openbla,blabla
ssh-keygen
ssh-copy-id somehost
update-config /etc/bla.config

Который можно с минимумом телодвижений запустить на свежей системе. Может есть какой-то пакет для питона или способ заюзать ансибловские плагины прямо в скрипте без всякой обвязки.

Дистрибутиво-независимый, желательно.

cocucka ★★★★ ()
Последнее исправление: cocucka (всего исправлений: 1)
Ответ на: комментарий от cocucka

Ansible всё же больше master -> host[s] схема.

Нет, не обязательно. Натравить его на localhost не проблема.

Ты какую-то не ту доку по ansible прочитал по-видимому. Потому что как раз отсутствие порога вхождения - это фишка ansible. Его можно использовать ровно на той сложности какой хочется.

alpha ★★★★★ ()
Последнее исправление: alpha (всего исправлений: 1)
Ответ на: комментарий от cocucka

Дистрибутиво-независимый

Это невозможно, и об этом я уже писал:

Написать автоматизатор под хотя бы популярные дистрибутивы (Ubuntu, Fedora, Arch Linux), который сделает на них одну задачу одинаково просто невозможно.

mord0d ★★★★ ()

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

ставишь boobstrap, запускаешь этот скрипт https://github.com/sp00f1ng/boobstrap/blob/master/bootstrap-templates/crux_gn...

и получаешь на выходе минимальную рабочую систему Linux, которая в пожатом виде xz весит 32мб.

далее запускаешь скрипт https://github.com/sp00f1ng/boobstrap/blob/master/bootstrap-templates/crux_gn...

и получаешь на выходе initrd образ готовый к загрузке, который содержит в себе openssh и твой ключ взятый из $HOME, ты можешь этот initrd скормить любой системе, например через PXE, или сделать kexec -l $BOOT_IMAGE --initrd ./initrd && kexec -e, после чего система перезагрузится в данный initrd, а ты получишь систему с доступом по ssh к ней, на стадии initramfs.

суть моего метода в том, чтобы ты в обычных bash скриптах описывал конфигурацию хостов и выполнял их сборку с использованием трёх команд mkbootstrap, mkinitramfs и mkbootisofs.

например смотри, разворачиваем систему используя любой доступный тебе mkbootstrap crux_gnulinux, debootstrap, pacstrap, dnf --installroot и прочее.

затем ты хочешь её настроить. я рекомендую делать настройки в отдельной папке, которая затем ляжет верхним слоем на систему. потому что потом ты можешь тупо удалить папку с системой и установить её заново, а все твои настройки сохранятся в соседей папке.

например. mkbootstrap crux_gnulinux chroot/ --ports-dir=/mnt/crux/core установит тебе систему в папку chroot/

далее ты создаёшь рядом какой-нибудь rootfs-changes/ и производишь все настройки, тебе надо настроить /etc/php-fpm/php-fpm.conf, значит ты его копирует из chroot/etc/php-fpm/php-fpm.conf в rootfs-changes/etc/php-fpm/php-fpm.conf и уже здесь настраиваешь.

теперь у тебя два будущих каталога, которые станут оверлеями, один с системой, второй с настройками.

у тебя два варианта, упаковать всё в initramfs образ или в ISO образ. разницы никакой, кроме ограничения на размер initramfs на некоторых системах (сталкивался на AM4 например, на FM2, 1151 проблем небыло).

допустим ты захотел всё упаковать в initrd, тогда делаешь

mkdir initramfs
mkinitramfs initramfs/ --overlay chroot/ --overlay rootfs-changes/ --squashfs-xz --output initrd.img

всё, на выходе у тебя initrd.img который к загрузке вместе с ядром. ты заливаешь его на удалённый хост как прошивку, и делаешь вышеупомянутый kexec -e, хост перезагружается в твою конфигурацию.

если хочешь можешь упаковать в ISO образ и на флешке руками систему загрузить.

mkdir bootimage
mkbootisofs bootimage/ --overlay chroot/ --overlay rootfs-changes/ --squashfs-xz --output install.iso

всё, dd'шишь iso на флешку, вставляешь в комп и грузишься, у тебя полностью развёрнутая твоя конфигурация системы будет.

ничего лучше моего метода ты не найдёшь и не придумаешь. потому что когда ты создал конфигурацию, она у тебя лежит как бэкап. и никуда оно не денется. когда система «на том хосте» выйдет из строя, ты любым удобным образом зальёшь туда прошивку заново и запустишь (с исправлениями, если это был взлом в результате уязвимости exim к примеру).

хочешь генту, вот пример Любой GNU/Linux. С любого накопителя. С откатом неудачных конфигураций.

Создание загрузочных образов boobstrap v1.0 и boobstrap v1.1

Spoofing ★★★★★ ()
Последнее исправление: Spoofing (всего исправлений: 2)

Да собственно скриптом это и решается + своя система дистрибуции которую ты таскаешь с собой (клиент) например snap. Единственная проблема, что чего-то может не быть в snap`е. Но тогда есть еще более радикальный вариант, таскать уже собранные билды с собой, но у него другая проблема, билды нужно собрать так, чтобы они были автономными и запускались на всех целевых системах.

anonymous ()

Если дружишь с питоном, то простейший аналог Ansible - это питон + paramiko. Можно делать что угодно. Но не будет стандартизации. Как раз нечто среднее между bash скриптом и Ansible. И запускать можно хоть с винды. )

Я использовал такой набор до перехода на Ansible:

from socket import socket, gethostbyname, AF_INET, SOCK_STREAM, setdefaulttimeout

from subprocess import Popen, PIPE

import paramiko, time, sys, os

merlin-shadow ()
Последнее исправление: merlin-shadow (всего исправлений: 4)