Общо взето, идеята е да се вземе някаква директория с конфигурационни файлове (например /etc
), и те да се преобразуват по дадена система от правила до свързани дървовидни структури, чиито листа са самите настройки. Идеята е цялата конфигурация на софтуера в една ОС да може да се представи чрез едно голямо дърво, от чийто корен да можем лесно да достигнем до всяка индивидуална настройка. Всеки node в това дърво трябва да може да се достъпи чрез път, както в нормална файлова система.
Вече има готов софтуер, който донякъде върши тази работа (нарича се Augeas), който дори има и bindings за Go (които е вероятно да ползвам в моята имплементация). Естествено, Augeas има някои недостатъци, които смятам да реша точно чрез моя проект:
-
Въпреки че дървото в Augeas прилича доста на UNIX-like файлова система, има няколко съществени разлики, които пречат то да се използва като такава:
- Node, който съдържа други node-ове (т.е. директория във файлова система), може да има стойност. В една файлова система директориите не могат да съдържат данни.
- Може да има повече от един node с едно и също име (по-точно, с един и същ път (във файлова система не може).
- В пътя не може да има знаците * и [ (във файлова система може).
Затова идеята ми е да напиша имплементация на файлова система (например драйвер за FUSE), в която всеки (обикновен) файл отговаря на настройка в Augeas дървото, като промените по нея са в реално време (т.е. Augeas дървото се променя веднага след прилагането им).
CLI клиентът на Augeas е с много гаден интерфейс. Мисля да го пренапиша, и да се пробвам да разширя функционалността му.
- Може би ще се пробвам да включа и някакво utility за управление и deploy-ване на конфигурации на програми върху различни машини (като ще се взимат предвид неща като версии, зависимости и т.н.) (Но това, ако остане време.)
Мисля, че този проект (ако се получи, естествено ) ще е доста полезен за голям кръг от хора (най-вече системни администратори, но защо не и програмисти). Все пак имам и няколко други идеи, към които мога да пристъпя, ако не одобрите тази тема:
- Някакъв опростен вариант на dependency-based init система.
- Опростен вариант на package manager.
Кажете какво мислите по въпроса