Add concept documentation.
Add concept documentation.
diff --git a/docs/concept b/docs/concept
new file mode 100644
index 0000000..2b6e9d6
--- /dev/null
+++ b/docs/concept
@@ -0,0 +1,58 @@
+Автор: Сергей Шакшин.
+
+rigid.mgn@gmail.com
+
+== Проект Centrix.
+
+=== Что такое Centrix
+Centrix - система удаленного централизованного контроля сетевых узлов (рабочих станций или серверов). В системе централизованно хранятся все необходимые настройки для всех контролируемых программных продуктов а так же команды для удаленного управления системами.
+
+=== Зачем это нужно
+Системному администратору часто нужно выполнять рутинные действия по настройке почтовых клиентов, заведению учетных записей в домене и т.п. Проект призван создать максимально универсальный инструмент для автоматизации таких однообразных операций. От этого инструмента требуется:
+
+ 1. создание, хранение, управление конфигурациями рабочих станций и серверов
+ 2. предоставление интерфейса управления машинами в реальном времени (distributed remote shell)
+ 3. максимальная "самонастраиваемость" управляемых машин
+
+
+=== Архитектура
+Centrix имеет клиент-серверную архитектуру. В сети запускается как минимум один экземпляр centrixd, обслуживающий запросы агентов (клиентов). Кроме того, может быть несколько вспомогательных серверов. Такая схема будет полезна для большой сети с множеством подсетей - для снятия нагрузки с межсетевых каналов связи, с центрального сервера а так же для повышения надежности сети Centrix.
+
+На подконтрольных машинах устанавливается агент centrixa - клиентское ПО для Centrix. Агент осуществляет связь с сервером, получает с сервера конфигурацию и команды и осуществляет настройку машины согласно конфигурации и полученным командам.
+
+Администратор управляет всей системой с помощью приложения "Консоль администратора" (далее просто консоль). Консоль общается с центральным сервером системы и формирует команды для создания, изменения, удаления конфигураций и удаленного управления клиентскими машинами.
+
+=== Протоколы
+Протоколы обмена рабочими сообщениями клиент-сервер и консоль-сервер планируется реализовать на базе XML внутри TCP-соединений, подобно XMPP.
+
+"Самонастраиваемость" на сервер планируется реализовать с помощью zeroconf. В том случае, если по каким-то причинам этот вариант не сработает, необходимо предусмотреть ручную настройку либо другие варианты самонастройки.
+
+Для конфиденциальности передачи конфигураций по сети, планируется включить возможность работы внутри шифрованных каналов связи (openssl).
+
+Серверы, агенты и консоли администрирования должны иметь строгую идентификацию. Этот момент планируется реализовать с помощью сертификатов.
+
+=== Модули
+Предполагается использование модулей на клиентской части. Каждый модуль предназначается для настройки отдельного ПО. Например, модуль настройки учетных записей почты в MS Outlook Express. Модули должны поставляться в комплекте с XML-файлом, описывающим список конфигурируемых параметров и команд администратору и указывающим правила формирования команд.
+
+Установка модулей на сервер происходит из репозитория. Репозиторий организуется в виде ftp или http сервера. Агент, получая команду на установку модуля, получает так же URL файла модуля, скачивает и устанавливает его.
+
+Каждый модуль имеет подпись или хеш, для проверки целостности после скачивания клиентом.
+
+Модули есть трех типов:
+
+ * конфигураторы, которые служат для, собственно, конфигурирования параметров машины
+ * управляющие, которые суат для мгновенного управления машиной и организации distributed shell
+ * мониторы, которые служат для отслеживание каких-то параметров на подконтрольных машинах и генерирования событий, которые могут обрабатываться на сервере обработчиками, созданными администратором
+
+
+
+=== Иерархия и приоритеты
+Машины в системе Centrix могут быть объединены в группы. Каждая машина может находиться в одной или более группах, либо не быть ни в одной из них. Может возникнуть конфликт параметров, когда один и тот же параметр предоставляется конфигурациями нескольких групп. В этом случае работает механизм приоритетов. Каждой группе присваивается приоритет - числовое значение. Чем меньше это число, тем выше приоритет у группы. Если значение параметра указано явно в конфигурации самой машины, это значение имеет приоритет над всеми групповыми настройками.
+
+=== Процедура начального конфигурирования
+После установки серверной части, производится начальное конфигурирование - задание имени системы, создание административных учетных записей для каждого администратора системы. После этого необходимо создать репозиторий модулей, указать на этот репозиторий серверу и провести установку модулей на сервер (имеются в виду серверные части модулей). Затем администратор создает группы машин и настраивает параметры для группы. Например, список устанавливаемых модулей для каждой группы машин может быть разным. После этого администратор определяет настройки для групп. Система готова к приему подконтрольных машин.
+
+=== Принципы работы
+После установки на чистую машину, агент ищет через zeroconf центральный сервер. Если использование zeroconf в сети по каким-то причинам невозможно, следует включать минимальный конфигурационный файл в состав дистрибутива агента. После подключения к серверу агент сообщает о себе сообщением DISCOVER. В этом сообщении указывается имя хоста и IP-адрес машины. В последствии администратор может увидеть список несконфигурированных машин в консоли. Так же можно настроить уведомления о появлении новых машин с чистой конфигурацией. Администратор определяет, в какие группы входит новая машина и/или индивидуальные настройки.
+
+Изменения конфигурации отправляются клиенту при следующем его обращении к серверу, либо по команде администратора немедленно.