LINUX.ORG.RU

Фрустрации на тему хранения настроек в реестре и конфигах.

 


0

1

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

На firefox заострю внимание. Неплохой браузер, но есть особенность - настройки хранит в БД, при этом не предоставляет внешнего API для работы с этими настройками. Гораздо лучше было бы, если бы можно было менять настройки firefox используя какую-нибудь консольную утилиту, можно было бы рулить настройками через шелл-скрипты: например при помощи xbindkeys назначить клавишу для включения/выключения какого-нибудь прокси-сервера. Не спорю, для firefox много плагинов, но здесь вопрос уже скорее об интеграции. И вся острота проблемы выплывает, когда тебе нужно установить, например, когда у тебя есть компания, где, допустим, у тебя 1000 компьютеров с firefox на борту, и тебе приспичило сделать стартовой страничкой по-умолчанию сайт компании. При этом просто синхронизировать профиль браузера ты не можешь - каждый сотрудник уже имеет некоторые кастомные настройки, которые затрутся. Было бы просто отлично, например, выполнить по ssh на этих машинах одну команду, что-то вроде: setconf firefox homepage="https://mycompany.ru"; Сейчас набегут фанаты windows со своим GPOшным АДом, но ведь и он не решает этой проблемы, возможно с Internet Explorer такое и прокатит, но кому ж этот ваш эксплорер нужен... Конечно, ещё они могут сказать, что нужно бы фаерфоксу использовать РЕЕСТР для хранения настроек, но мы не будем слушать их глупые рассуждения, ведь мы знаем, что невозможно иметь один единый формат, удобный всем, ровно как и нельзя иметь один язык программирования для всего.

Так вот, было принято решение написать набор утилит и библиотек, позволяющий во-первых, давать какой-то стандартный интерфейс для управления настройками - в первую очередь для скриптов, которые являются интеграционным клеем. При таком раскладе можно даже писать конфиги в виде шелл-скриптов... например, у меня при старте иксовой сессии выполняется скрипт, который запускает xset, setxkbmap и xsetroot чтобы немного настроить X-сервер, который может в оперативной памяти представлять настройки как угодно, а хранить так и вовсе в БД. Но мне определённо нравится, что я могу допустим при помощи тех же xbindkeys повесить на какую-нибудь медиа-клавишу переназначение комбинации клавиш для смены раскладки клавиатуры, например сменить мой дефолтный caps lock на alt+shift, временно, чтобы переключалки на моей локальной системе и в окне vncviewer/rdesktop не конфликтовали. Вобщем было бы круто, если бы приложения позволяли менять подобным образом настройки, хоть и не все.

Вторая часть - это предоставить некоторые искаробочные библиотеки для парсинга/форматирования конфигов. Однако принуждать ими пользоваться, конечно, нельзя. Хочешь - храни таблицы в CSV, хочешь - храни ключ-значение в JSON, хочешь - используй SQLite. Почему следует использовать именно эти библиотеки? Потому что при помощи них можно «генерить» утилиты-интерфейсы к этим настройкам.

Собственно, ЛОР, пришёл спросить тебя вообще, нужно ли что-то подобное вообще? Советы/идеи по реализации какие-нибудь будут? Может кто-то хочет объединиться для совместного написания? Нужно же сделать всё по-уму пока редхатовцы не запихали gconf в systemd и сделали это де-факто стандартом...


Нужно же сделать всё по-уму пока редхатовцы не запихали gconf в systemd и сделали это де-факто стандартом...

Ты опоздал, gconf уже умер вместе со второгномом. Вылезай из криокамеры.

И таки да, чем тебя не устраивает gconf?

geekless ★★ ()

Ещё некоторые размышления:

Обычно многие программы, которые взаимодействуют с пользователем хранят «дефолтный» конфиг в /etc/program/ и «кастомный» конфиг в пользовательской домашней директории, что-то вроде ~/.program или ~/.config/program. Есть ещё момент: какие-то настройки как для всей ОС, так и для конкретного пользователя могут быть заблокированы системным администратором от редактирования. Например в той же корпоративной среде полезно иметь, допустим, в каждом филиале свой прокси-сервер и чтобы пользователи ходили в инет через него, однако самим пользователям запретить менять его в настройках браузера. Далее, нужно делать что-то с группами пользователей. Конечно неплохо разрешать и запрещать доступ ко флешкам, добавляя пользователя в соответсвующую группу, и мне это нравится, но что делать, если допустим, каким-нибудь опытным пользователям или администраторам нужно позволить менять прокси-сервер? Как в этой ситуации быть? Нужны ли вообще такие возможности? (Подразумевается, кстати, что у нас есть централизованная база пользователей, аутентификация через Kerberos, например). Например, можно предоставлять схему, где для каждой программы настройки дублируются несколько раз примерно в таких каталогах: /etc/program/, ~/.config/program/custom, ~/.config/policy; Т.е. есть настройки программы для компьютера, на которые накладываются кастомные настройки пользователя, на которые накладываются политики (извините за виндовый термин), т.е. настройки, назначенные для этой группы пользователей сисадмином. Не слишком ли сложно? Как быть, если программисты захотят хранить настройки своей программы в БД?

Далее, можно, допустим, попробовать «знать» синтаксис конфигов различных программ, например mplayer, или даже squid, чтобы предоставлять немного стандартизированный CLI для изменения этих конфигов. Этот CLI может выступать бек-эндом для веб-интерфейса, например, хотя я и не сторонник такого подхода. Можно использовать комменты в качестве описалова настроек, организовать навигацию по настройкам, проверку на корректность введённых пользователем данных. Можно попробовать предоставить программистам инструменты, при помощи которых они будут (?) описывать синтаксис своих конфигов, в результате получая готовые либы для работы с конфигурацией для различных ЯП. Но полностью стандартизировать и загнать в рамки конфиги нельзя, поэтому нужно ещё и добавить какой-то инструмент для предоставления API внешнему миру...

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

И ещё, возможно, следует перенести тему в Talks? У меня просто было недостаточно очков, чтобы запостить сразу туда.

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

Ты опоздал, gconf уже умер вместе со второгномом. Вылезай из криокамеры.

Мне следовало написать «что-то вроде gconf».

И таки да, чем тебя не устраивает gconf?

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

vdmit ()

В ff банальный sqlite, работать с которым проще, чем с текстовыми файлами, плохой пример.

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

Я уже писал, что принуждает хранить конфиги в определённом формате (XML), хотя конечно и предоставляет интерфейс для доступа к ним.

Если «конфиг» ограничивается простеньким деревом строк, то xml в самый раз.

geekless ★★ ()

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

Komintern ★★★★★ ()

Я удивлён, что никто ещё не упомянул этого...

Axon ★★★★★ ()

Гораздо лучше было бы, если бы можно было менять настройки firefox используя какую-нибудь консольную утилиту

ты не поверишь, sqlite отлично с этим справляется

lazyklimm ★★★★★ ()

Так вот, было принято решение написать набор утилит и библиотек, позволяющий во-первых, давать какой-то стандартный интерфейс для управления настройками

Остынь, всё написано до нас: http://augeas.net/

r2d2 ()

На firefox заострю внимание. Неплохой браузер, но есть особенность - настройки хранит в БД, при этом не предоставляет внешнего API для работы с этими настройками.

попробуй в строке адреса firefox набрать about:config не?

ipwww ★★ ()

xmlstarlet? Да, xml - это ужасно.

sergej ★★★★★ ()

Вот мы как раз видим давольно унылый вброз необразованного подавана.

Идеология каждой программы по отношению к настройкам разная. Одни читают при старте и больше не обращаются. Другие (посмотри хотябы на винду) этот реестр дубасит без остновки. Вопрос: что лучше - кирпич или молоток?

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