LINUX.ORG.RU

Стандартный валидатор конфигов

 , ,


1

1

Возникла мысль, нуждающаяся в доработке, для чего и пишу. Если я что-то пропустил и подобное уже есть - ткните, буду очень благодарен.

Суть идеи - сделать некий обобщенный движок работы с конфигами. как я это себе представляю (по нарастающей).

1) Валидировать конфиг по заданной системе правил (далее схеме). Причем не так примитивно, как в XML-схемах, а более гибко. Минимум - допустимость/недопустимость одних элементов конфига их и значений в зависимости от других. Интерфейс здесь вида сунул конфиг (уже распарсенный, в виде какой-то «деревянной» структуры) - получил ответ - валидно либо где именно не валидно.

Зачем это надо? Чтобы не писать очередной велосипед каждый раз, конечно.

1а) Как расширение - возможность включения схему в нестандартных случаях какой-то логики на полноценном ЯП вроде lua, JS или чего-то ещё.

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

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

3) Фильтры чтения/записи конфигов в различных форматах, с сохранением комментариев. Ну здесь понятно - раз нужно стандратное представление скармливать валидатору то его надо где-то брать, и каждый раз писать с нуля - глупо. С самим парсером - аналогично. Ну и для гуя и для следующего пункта нужна возможность записи конфига.

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

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

В общем, нужны идеи и мнения по осмысленности затеи и возможных путях реализации. Предполагаемый язык - си, с минимумом зависимостей, плюс биндинги как минимум к плюсам, перлу и питону.

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

А валидатор конфигов цисок можете запилить?

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

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

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

trashymichael ★★★
()

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

короче. конфиг это такое, если он валиден — программа работает, если нет — не работает. что тебе тут еще надо, что не устраивает? все уже давно придумали, начни с того что забъешь конфиг дефайнами, потом сам передумаешь эту муть писать.

сайты с конфигами, ну пипец мля. это тролинг такой, чтоли? конфиг это текстовый файл, заливай его на гитхаб, ищи по тегу dotfiles. для каждой задачи нужен свой конфиг, нельзя объять необъятное. короче. что-то я разошелся, но такие-вот высеры бесят дико. серьезно говрою.

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

Много чего не устраивает.

Не устраивает то, что потом чтобы в этом конфиге написать нужное надо два дня потратить на разбирательства - начиная от синтаксиса и заканчивая что в каком извращённом случае друг с другом не совместимо.

Не устраивает то, что если мне надо десяток конфигов как-то синхронизировать (допусти IP один и тот же написать) - нужно извращаться.

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

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

Не устраивает то, что в результате всего вышеописанного куча народу матерится какой линукс неудобный - хотя он может быть очень удобным. А надо - чтобы барышня, которая купила ноутбук с убунтой, в два клика могла сделать себе удобную среду - от розовых сердечек на рабочем столе до интеграции со вконтактиком всего и вся. А фанат свободы и приватности Вася ткнул в «Enhanced Pricacy Profile», проверил «по месту» описание на каждую настройку, применил избранные куски, обматерил оригинальный конфиг, указав, что там забыли одно, второе и третье, и залил свой - правильный - вариант. И чтобы ушли у них на это минуты, а не дни. А программист Петя не писал очередной парсер конфига, а потратил это время на описание, каие настройки что дают и как взаимодействуют - и получил себе в гуевом приложенииготовыю логику редактора настроек, осталось только сами кнопочки им сопоставить, и рядом сунул бы формочку для шаринга конфигов (а заодно - и комментариев к приложению) на сайте.

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

crazy_alex
() автор топика
Ответ на: комментарий от tailgunner

Ты пытаешься изобрести Augeas: http://augeas.net/

О, спасибо за ссылку :-) Я пытаюсь изобрести нечто большее, но эта штука сильно сэкономит усилия, конечно. Но вот конкретно к тебе вопрос - ты явную чушь в сказанном мной видишь?

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

Центральный репозиторий конфигов кажется мне бессмысленной утопией. Универсальная морда правки конфигов недостижима, ИМХО, но, даже если тебе удастся просто сделать GUI-редактор конфигов на основе Augeas, это уже будет большая польза. Хотя вот эта фраза:

Я пытаюсь изобрести нечто большее

настораживает.

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

Собственно, «великая идея» следует из разденения mechanics и policy - в идеяле яхочу получить средства работы с policy, причем не для конкретной софтины, а для множеств. То есть говорим «хочу десктоп писателя» - и получаем всё - от настройки окон до набора софта. Говорим «хочу десктоп для развлекух» - и получаем другой набор настроек, интеграцию с сочиалочками и т.д. И имеем два воркспейса, ориентированных на конкретную задачу. Впрочем, воркспейсы - это отдельный большой разговор...

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

А настораживает правильно - это тест отдельных долго вынашиваемых идей на тему ещё одного DE :-) Сильно отличающегося от существующих, кстати.

crazy_alex
() автор топика
Ответ на: комментарий от tailgunner

Да, насчет недостижимости. Морду я и не планирую, разве что в предельно страшном виде проде виндового реестра или about:config в опере. Но вот сделать декларативное описание взаимодависимостей элементов конфига, а прораммисту оставить только рисование гуя на базе этого описания - хочется. Плюс сквозная валидация, чтобы исключить ситуации вида «здесь IP поменяли, а там забыли». Особенно для тех пользователей, которые вообще не знают, тчо такое IP.

А почему репозиторий конфигов - утопия, кстати? Вопрос раскрутки или что-то другое? Я об этом думал примерно как о мозилловском каталоге расширений, в идеале - с аналогичной степенью интеграции приложений.

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

Морду я и не планирую, разве что в предельно страшном виде проде виндового реестра или about:config в опере. Но вот сделать декларативное описание взаимодависимостей элементов конфига, а прораммисту оставить только рисование гуя на базе этого описания - хочется.

Слишком туманно. Туманные задачи невозможно решить.

А почему репозиторий конфигов - утопия, кстати?

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

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

А что тут туманного - примерно так: для элемента конфига есть вызов getAllowedChilds, возвращающий список того, что может быть в этом элементе - тип, описание и, возможно, регэксп для предварительной валидации. При изменении значения посылаем myItem->validateChildValue(childName, childValue), получаем либо success либо сообщение, описывающее с какими правилами конфига это конфликтует, либо ошибку, если оно вообще противоречит схеме. ну и третий вызов - setChildValue, который, собственно, значение устанавливает либо возвращает ошибку в случае конфликта.

crazy_alex
() автор топика
Ответ на: комментарий от tailgunner

Да, в любом случае - спасибо за комментарии.

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

для элемента конфига есть вызов getAllowedChilds, возвращающий список того, что может быть в этом элементе - тип, описание и, возможно, регэксп для предварительной валидации.

Что такое «элемент конфига»? Почему валидация только регэкспом?

При изменении значения посылаем myItem->validateChildValue(childName, childValue), получаем либо success либо сообщение, описывающее с какими правилами конфига это конфликтует

Кто и как описывает правила?

P.S. «children», не «childs».

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

Примерно как в json - элемент может быть скаляром, ассоциативным массивом ( кюч-значение,неупорядоченным), массивом (упорядоченной последовательностью). Вроде хватает, но может придётся ещё множество какое-нибудь добавить, поглядим. Понятно - с неограниченной вложенностью элементов разного типа. Сам конфиг тоже является ассоциативным или обычным массивом.

Регэксп - потому что это предназначено для предварительной валидации формата того, что ввёл пользователь, на большинство случаев его хватит. Можно и не регэксп, а отдельный вызов API - а то проверять регэкспом, к примеру, валидность e-mail слегка замаешься. В общем, суть скорее в том,что мы разделяем корректность формата ввода самого по себе и непротиворечивость конфига с этим значением. А регэксп или что-то покруче - пока не слишком принципиальные детали.

childs - позор мне :-)

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

А, да. Кто прописывает правила. Тут у меня треминология подгуляла, надо зафиксировать. Речь шла не о правилах, а о настройках, которые в конфиге уже есть, и им не должно противоречить то, что мы добавляем или меняем. Этого, кстати, в augeas нет, насколько я понимаю. Ну представь себе, допустим, несколько секций в конфиге, каждая описывает сервис, слушающий какой-то порт, и порты должны быть разными. Вот то, что порт во вновь добавленной секции не совпадает с предыдущими, мы и проверяем.

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

json

Плохое начало.

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

Кем и как определяется противоречивость?

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

Откула ты знаешь, что именно нужно проверять? Кто и как описывает проверки?

tailgunner ★★★★★
()

Было бы неплохо запилить XML-реестр вместо /etc и сжатый реестр с файловой системой внутри для /usr.

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

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

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

А что не так? Я не о формате, а о том,что есть скаляры, массивы и ассоциативные массивы (наборы ключ-значение).

Противоречивость (точнее наоборот - правила согласованности) описываются в схеме для конфига. В идеале - автором приложения, которое конфиг использует. В реальности - так же как и в augeas - самому придётся, конечно.

crazy_alex
() автор топика
Ответ на: комментарий от trashymichael

Запросто может не пойти. Но, во-первых, у меня в голове лучшее понимание сложится, во-вторых augeas мне уже подсказали, и я его уже пробую использовать-то есть польза от треда уже есть. И в-третьих - даже если не доберусь до реализации - архитектуру опишу в паблике, кому-нибудь другому пригодится.

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

Например

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    ...
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    ...
</IfModule>
(это стандартный конфиг апача из дебиан). Валидность остальных частей конфига может зависеть от подобных конструкций. Кроме того она может зависеть от переменных окружения, установленных модулей, параметров компиляции и т.д. Приложение это учитывает, сторонняя утилита скорей всего нет.

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

Ага, понял, спасибо. Здесь аж три ответа.

1) Задача - поддержать десктопный и базовый системный софт в основном, корректно работать с монстрами вроде апача или sendmail у меня и в планах не было.

2) Вообще - над условиями - надо подумать. В принципе, там без какого-то встроенного языка вроде lua всё равно не обойдётся, так что решаемо, вопрос - насколько страшно.

3) «Монстров» можно поддержать частично. То есть для сложных конструкций проверки согласованности не будет, только примитивная проверка корректности синтаксиса.

На практике - всеми тремя путями надо будет идти, полагаю.

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

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

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