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

Файловая система (FUSE) для слияния конфигов

 , , , ,


0

1

Есть ли такое чудо? Хочу синхронизировать между несколькими компами «универсальные» конфиги, но при этом иметь на каждом компе специфичные конфиги.

Например для SSH хочу чтобы при обращении к ~/.ssh/config у меня получался конфиг слитый из нескольких файлов, например по такому шаблону:

{{ ~/.dotfiles/ssh }}
{{ ~/.ssh.d/* }}

Вообще конкретно для SSH есть то, что нужно: https://github.com/markhellewell/sshconfigfs , но хочется не только для SSH. include тоже не у всех программ есть.

Может есть какая-нибудь FUSE, чтобы конфиги мержились «на лету»? Или может демон, который будет обновлять конфиги при изменении подключенных конфигов?

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

странные желание какие то, ты точно не под веществами это захотел?

нежелание править конфиги на каждой машине ручками - нормально

автору ansible

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

Кратко посмотрел про Ansible. Мне нужно чтобы компьютеры работали 24/7 и к ним был доступ по SSH через Интернет? Или можно как-то из директории подхватывать настройки.

Если честно хотелось бы чего-нибудь попроще. Я пока с Ansible разберусь... Проще тогда уж руками мержить.

P.S. Хотя наверное получить опыт работы с Ansible было бы неплохо, но как-то это перебор.

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

странные желание какие то, ты точно не под веществами это захотел?

Странная у тебя реакция какая-то :)

Просто задолбало везде одни и теже конфиги по 100 раз вбивать и править. FUSE мне кажется неплохим решением проблемы, сам бы написал, если бы не впадлу было.

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

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

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

Если честно хотелось бы чего-нибудь попроще.

Нету.

Я пока с Ansible разберусь...

За день освоишь.

Проще тогда уж руками мержить.

ололо, нет

Хочу синхронизировать между несколькими компами «универсальные» конфиги, но при этом иметь на каждом компе специфичные конфиги.

В ansible есть переменные. Можно для каждого компа сделать переменные, в них сохранять специфичные настройки.

В ansible есть playbook, по сути набор комманд, который будет по порядку выполнен на всех указанных машинах.

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

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

Мне нужно чтобы компьютеры работали 24/7 и к ним был доступ по SSH через Интернет?

Нет, тебе нужно, чтобы компьютеры работали, когда тебе вздумается править на них конфиги и тебе нужен доступ по ssh, не обязательно через интернет.

Есть ещё другой вариант, puppet, chief так делают и ansible вроде умеет. На целевой машине ставиться этот puppet/chief/ansible и по расписанию выкачивает задания с центрального сервера. Тогда доступ по ssh и включенные машины не нужны. Когда включится, тогда само и скачает.

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

Сие именуется Union mount и его на уровне ядра реализуют Union File System, Another Union File System, Overlay File System.

Немного не то. AUFS мержит директории, а мне надо еще каждый файл объединять.

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

Нет, тебе нужно, чтобы компьютеры работали, когда тебе вздумается править на них конфиги и тебе нужен доступ по ssh, не обязательно через интернет.

Это не сервера даже, это десктопы. В один момент времени обычно только один включен.

Есть ещё другой вариант, puppet, chief так делают и ansible вроде умеет. На целевой машине ставиться этот puppet/chief/ansible и по расписанию выкачивает задания с центрального сервера.

Ну еще более-менее.

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

Ты хоть немного сперва разберись чтобы потом заявлять что оно

Немного не то.

UnionFS, AuFS, OverlayFS - ему всему во первых по сути без разницы что именно объединять, во вторых его всё обычно используют в связке со SqashFS и для реализации возможности записи на последнюю причем используют это чуть менее чем вообще все дистрибутивы GNU/Linux и во многих из них можно даже изменять livecd образ прямо из самого livecd да еще и сохранять результаты, и в третьих FUSE реализации на ту же тему тоже есть ищи по тем же именам.

Но то что ты описал именно задача для union mount.

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

Ты хоть немного сперва разберись чтобы потом заявлять что оно

Wikipedia:

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

Если у меня есть два файла: dir1/file, dir2/file, и я смонтирую dir1 и dir2 в /mnt и сделаю cat /mnt/file, то увижу только содержимое какого-то одного файла, а не обоих сразу, объединенный в один

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

Десктоп - понятие относительное.

Поэтому один из «десктопов» это ноут :) Подключен по Wi-fi.

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

то увижу только содержимое какого-то одного файла, а не обоих сразу, объединенный в один

У тебя в одной директории будет оригинал в другой измененная версия и ты можешь либо использовать оригинал либо измененную версию либо сделать diff и вообще забыть про измененную версию а хранить только оригинал и patch.

А вот оба сразу объединенные в один - это отличная трава и на уровне ФС я хочу такую же и чтобы libastral.so сам за меня решал как именно я хочу но чтобв в результате все было бы зае хорошо и никак иначе!

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

Не вижу проблемы. Перед тем как отдать файл пользователю нужно его прочитать, распарсить (вытащить пути к файлам, которые инклюдить), прочитать указанные файлы, объединить в один файл, закэшировать, отдать пользователю.

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

У тебя в одной директории будет оригинал в другой измененная версия и ты можешь либо использовать оригинал либо измененную версию либо сделать diff и вообще забыть про измененную версию а хранить только оригинал и patch.

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

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

Не вижу проблемы.

Ну да т.е. твоя ФС еще и проблемы слияния будет решать. В случае когда оригинал конфига и измененный конфиг от меньшей версии программы а в системе уже более высокая версия программы оно само разгребет и обновит под новую версию программы. И вообще дайте две!!!

ЗЫ: Если ты не понял мой тонкий юмор то повторяю для тех кто в танке - эти задачи на уровне ФС не решают. Вон при union mount на уровне ФС максимум что есть это оригинал и измененная копия а уж как ты там будешь изменять копию ФС вообще не волнует потому что это не её задача.

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

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

А твой git тоже уже слинкован с libastral.so и умеет автоматом разгребать проблемы слияния?

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

Ну да т.е. твоя ФС еще и проблемы слияния будет решать. В случае когда оригинал конфига и измененный конфиг от меньшей версии программы а в системе уже более высокая версия программы оно само разгребет и обновит под новую версию программы. И вообще дайте две!!!

ЗЫ: Если ты не понял мой тонкий юмор то повторяю для тех кто в танке - эти задачи на уровне ФС не решают. Вон при union mount на уровне ФС максимум что есть это оригинал и измененная копия а уж как ты там будешь изменять копию ФС вообще не волнует потому что это не её задача.

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

MP3 же кодируют средствами ФС, почему бы не мержить конфиги.

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

А твой git тоже уже слинкован с libastral.so и умеет автоматом разгребать проблемы слияния?

О каких магических проблемах слияния ты говоришь? Мне не надо ничего сложного мержить.

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

Анибль работает по инициативе сверху, т.е. управляющий сервер всё делает. Для этого да, нужно чтобы все были онлайн, но зато не нужны агенты на местах.

Тебе же подойдёт любой другой продукт, который инициирует подключение снизу, какой-нибудь Chef или Puppet, их много щас вроде.

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

эти задачи на уровне ФС не решают.

People who think that userspace filesystems are realistic for anything but toys are just misguided. (c)

anonymous ()

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

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

Или можно как-то из директории подхватывать настройки.

Тебе нужен доступ с машины с которой ты будешь деплоить конфиги. На самих тачках, куда ты их будешь деплоить, тебе ничего не нужно ставить, нужно просто иметь рабочий sshd.

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

И белый IP, а еще он включен должен быть. Это подходит для сервера, но к сожалению не подойдет в моем случае. Только если по SSH локально подключаться :)

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

И белый IP, а еще он включен должен быть.

Первую проблему решает VPN, вторую частично Wake-on-Lan. Однако правильнее и бескостыльнее - воспользоваться системой деплоя, которая периодически стучится на какой-нибудь сервер/серверы и забирает конфиги оттуда.

Pinkbyte ★★★★★ ()

конфиги мержились «на лету»

Найдёшь такую мержилку - скастани, я её к svn'у прикручу, что б за меня конфликты разруливала.

ya-betmen ★★★★★ ()

Самописная ФС почти заработала, но тут я вспомнил что неплохо бы еще автоматизировать обновление Firefox Beta/BitTorrent Sync/oh-my-zsh/etc и бросил свою поделку.

В общем настроил синхронизацию конфигов Ansible, а для того чтобы не использовался SSH для подключения добавил в inventory:

[desktops]
my_host ansible_connection=local
и в конфиг на всякий случай:
- hosts: desktops
  connection: local
  gather_facts: no
  roles:
    - ssh

Короче спасибо за Ansible — вещь! :) Буду дальше автоматизировать.

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

Анонимус плохого не посоветует.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.