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

Как сделать красивый бэкап конфигурации?

 ,


0

4

Система RHEL/CentOS. В идеале хочется следующего:

скрипт pre:

yum install -y p1 p2 p3 ...

далее идут модификации конфигурационных файлов

patch /etc/f1 -i ./etc/f1.diff
...
cp ./etc/f2 /etc/f2

далее идёт скрипт post:

firewall-cmd --permanent --add-service=http
systemctl enable bla
...

В общем грубо говоря то, что сделал бы человек, настраивая сервер по какой-то инструкции. Но всё скриптуемо и все эти скрипты наглядные. И хочется этот скрипт сгенерировать из текущего сервера. Например взять список пакетов, найти те пакеты, которые были установлены после установки minimal ОС, написать на них yum install, пройтись по /etc и сравнить файлы с теми, что в rpm, если файла нет, значит он копируется, если файл есть, значит делаем diff, если файла нет, а в rpm есть, значит удаляем.

Конечная цель - получить бэкап, но не тупо блоб или весь /etc а, так сказать, наглядный бэкап, в котором хорошо видно, что сделано. Но в то же время такой бэкап, который можно накатить на свежий сервер и он будет идентичен тому, с которого сняли бэкап.

Возможно есть другие подходы с похожим результатом? ansible всякие, не шарю в них, подскажите, куда копать.

★★★★★

Возможно есть другие подходы с похожим результатом? ansible всякие, не шарю в них, подскажите, куда копать.

вот в Ansible и копать. Это правильный и простой способ сделать то, что вы хотите.

ugoday ★★★★★ ()

Кажется, это ты рассказывал об уникальных серверах и ненужности Ansible? :)

anonymous ()

yum history, затем можешь попробовать сделать установку всего этого в контейнер, предварительно смонтировав /etc наружу и диффнуть, потом пердоль ansible.

WitcherGeralt ★★ ()
Ответ на: комментарий от ugoday

Возможно есть другие подходы с похожим результатом? ansible всякие, не шарю в них, подскажите, куда копать.

вот в Ansible и копать. Это правильный и простой способ сделать то, что вы хотите.

+100500 На много проще написать:

  • Сервер XXX выполняет роли: Foo, Bar.
  • Роль Foo:
    • // Foo - это крутая ..... с.м. https://foo.org/...
    • Поставить пакет foo
    • создать файл /etc/foo.conf по шаблону foo.conf.j2
    • Открыть порт YYY для...

Чем поддерживать кучу говноскриптов выше.

AlexVR ★★★★★ ()

в дебе как два пальца

anonymous ()
Ответ на: комментарий от ugoday

Ansible мне поможет такой скрипт написать? Или предлагается его писать самому? Просто если второе, то я его и без ansible напишу, чего там писать, просто муторно.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

гуглить импотентность идемпотентность

пример не-идемпотентно:

yum install -y foo

пример идемпотентно:

rpm -qa foo ||  yum -y install foo

Примеры для накладывания patch додумай сам.

Так вот в Ansible – идемпотентность из коробки.

Bers666 ★★★★★ ()

Написал подобную систему, использую давно. У меня Гента, но часть с бекапом /етц дистрибутиво независима.

Алгоритм следующий:

1. Ставлю систему.

2. Делаю настройки.

3. Системой IDS создаю список изменённых файлов.

4. Бекапллю файлы со списка.

5. В последующих бекапах за список файлов можно уже брать не только с IDS, но и с старого бекапах.

6. При новой установки и обновлении у гетто есть etc-update, как живут люди с другими дистрами уже забыл.

anonymous ()
Ответ на: комментарий от AlexVR

Система должна быть простой, ансибл это для оркестровки конфигов целой сети.

Для одного компа задачу можно решить скриптом на 10 строк.

anonymous ()
Ответ на: комментарий от Bers666

Не нужна мне никакая идемпотентность. Мне надо сделать бэкап с сервера и накатить если, если я захочу его переустановить... Один сервер, ровно один, а не сто и даже не два.

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

По-моему моя система бекапах конфигов старше git и оркестровки...

10 строк на баше, все предельно просто.

anonymous ()
Ответ на: комментарий от Legioner

Воспроизводимое окружение по единому декларативрному конфигурационному файлу.

aquadon ★★★★★ ()
Ответ на: комментарий от Legioner

Ansible мне поможет такой скрипт написать? Или предлагается его писать самому?

Есть куча готовых ролей (особо см. Ansible Galaxy), но в какой мере они вам подходят, зависит от ситуации.

Просто если второе, то я его и без ansible напишу, чего там писать, просто муторно.

Уверен, что напишите. Просто Ansible сделает написание менее муторным и более переносимым.

ugoday ★★★★★ ()
Ответ на: комментарий от Legioner

Мне надо сделать бэкап с сервера

думп-ресторе, зачем мудрить, при наличие такого инструмента.

anonymous ()
Ответ на: комментарий от anonymous

Система должна быть простой, ансибл это для оркестровки конфигов целой сети.

Для сети - это Башня/AWX.
Для ручного управления конфигурацией сервера уже Ansible.

Для одного компа задачу можно решить скриптом на 10 строк.

Для своего личного «компа», делай как хочешь. Пиши скрипт в 10 строчек, который через пол года либо устареет как **** мамонта, либо превратиться в монстра состоящего из бесчисленного количества elif [[... и никому не понятных параметров.

З.Ы.: Что может быть проще Ansible?

AlexVR ★★★★★ ()
Ответ на: комментарий от AlexVR

превратиться в монстра состоящего из бесчисленного количества elif [[... и никому не понятных параметров.

Что за elif и параметры? Я же написал пример скрипта. Можно даже заинлайнить все данные прямо в скрипт, будет бэкап из одного текстового файла.

З.Ы.: Что может быть проще Ansible?

sh?

Legioner ★★★★★ ()
Ответ на: комментарий от anonymous

Да, и это какая-то жесть. Он еще на днях писал что винда и опенбсд давят линукс на серверах.

anonymous ()
Ответ на: комментарий от anonymous

Затем, что звук будет нормальный, а не говно.

Тут тоже самое, недостаточность тестирования + сменяемость среды + кривые руки.

С Ansible автору будут мешать только кривые руки.

anonymous ()
Ответ на: комментарий от Legioner

Ты не знаешь как получить список изменённых файлов на сервере который надо забекапить. Если IDS (система обнаружения вторжений) с лишком сложна, можно для получения списка использовать рекурсию по каталогам программы rhash. Имея список изменённых файлов бекапиш их, создано сперва каталог с именем dirname file, потом в него копирует сам файл.

Восстанавливать командой cp.

В чём принято держать базу содержимого съёмных накопителей? (комментарий)

anonymous ()
Ответ на: комментарий от anonymous

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

Пока рабочий вариант это пройти по всем /etc и сделать что-то вроде rpm -qf /etc/filename. Если не найдено, значит это новый файл. Через rpm -V вытащить список изменённых файлов, вытащить оригинальные файлы из пакета и сделать diff. Вроде должно работать, но надеялся, что кто-то уже подобное писал. Похоже зря или на лоре не знают.

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

Мне нужен читаемый бэкап.

Так hashget бэкапит только отличия от пакетных файлов.

zvezdochiot

anonymous ()

В общем в итоге сделал ручной бэкап.

Каждую административную команду сохраняю в файле commands. Например apt install apache2.

Если файл добавляю заново или при редактировании по сути пишу заново, сохраняю его в папке new, например new/etc/postfix/main.cf (точней не сохраняю, а кладу туда симлинк, который при бэкапе заменяется содержимым).

Если в файле делаю относительно немного изменений, то в первый раз сохраняю файл в папке orig, например orig/etc/postfix/master.cf.

При бэкапе делаю diff всех файлов из папки new с файлами в системе и сохраняю diff-ы.

Также в файле commands комментариями указываю порядок применения этих diff-ов и прочего.

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

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

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.