Alterator/etcgit

Материал из ALT Linux Wiki
< Alterator
Версия от 14:30, 30 августа 2012; Manowar (обсуждение | вклад) (Добавлена ссылка на код)

модуль etcgit для конфигурационной платформы Alterator позволяет сохранять и восстанавливать конфигурацию операционной системы используя систему управления версиями git. Код доступен по адресу packages/alterator-etcgit.git.

Репозиторий

Анализ и управление конфигурацией системы становятся возможными после подключения git-репозитория, содержащего конфигурационные файлы. Репозиторий определяется URL и должен быть подготовлен заранее: создание пустого репозитория средствами модуля не предусмотрено. Причина отсутствия данной функции заключается в том, что в репозиторий необходимо поместить ряд служебных файлов, содержимое которых определяется стоящей перед пользователем задачей. Для типовых задач частная копия репозитория может легко быть получена путём клонирования публично доступного репозитория.

Служебные файлы

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

Пример репозитория с базовым набором служебных файлов доступен по адресу: http://git.altlinux.org/people/manowar/public/etcgit-config-repo.git (используйте протокол git:// для клонирования).

Типы служебных файлов:

.git*
файлы с подобными именами относятся к системе управления версиями git;
.etcgit/*
файлы в данной директории относятся к программе etcgit и данному модулю.

.gitignore

Файл с именем .gitignore обязательно должен присутствовать в корне репозитория. Этот файл определяет набор масок (wildcards), согласно которым определённые файлы исключаются из рассмотрения: исключённые файлы не будут помещены в репозиторий, любые изменения в этих файлах будут проигнорированы. Например, для исключения резервных копий конфигурационных файлов, в .gitignore следует добавить строки

*~
*.back
*.old
*.rpmnew

Помимо .gitignore в корне репозитория, имеется возможность определять маски относительно директорий и поддиректорий. Синтаксис позволяет не только исключать файлы по принципу «чёрного» списка, но и наоборот, включать файлы по принципу «белого» списка. Принцип «белого» списка, т.е. когда в репозиторий включаются только явно обозначенные файлы и директории, является наиболее безопасным, поскольку позволяет избежать случаев, когда в локальной сети будут случайно опубликованы файлы, содержащие секретную информацию.

За дополнительной информацией обращайтесь к странице руководства gitignore(5).

.etcgit/file-permissions

Создаётся автоматически программой etcgit. В этом файле содержится информация о правах доступа к остальным хранимым в репозитории файлам. Необходимость хранить информацию о правах доступа отдельно от файлов связана с тем, что git, являясь инструментом для распределённой работы с исходным кодом программ, не сохраняет её в полном объёме.

.etcgit/filters .gitattributes

Совместное использование данных файлов позволяет автоматически вносить изменения в сохраняемые конфигурационные файлы посредством фильтров. В базовом репозитории, указанном по ссылке выше, определён один фильтр hostname, позволяющий исключить из рассмотрения значение переменной HOSTNAME из файла sysconfig/network.

Профили

В терминологии принятой в модуле, ветки (branches) репозитория именуются «профилями конфигурации». Модуль позволяет обновлять существующие профили и создавать новые на их основе.

Пользовательский интерфейс

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

Модуль называется «Профили конфигурации», размещается в разделе «Система» и доступен по адресу https://localhost:8080/etcgit.

Сигнальная строка

Сигнальная строка отображается на панели Центра управления и включает в себя название текущего профиля. При обнаружении отличия конфигурации ОС от заданной профилем, его имя отображается красным цветом. Строка отображается непосредственно модулем alterator-fbi, снабжённым для этого специальным дополнением.

Управление репозиторием

Все операции с профилями конфигурации, такие как выявление отличий текущей конфигурации ОС от заданной, сохранение и восстановление конфигурации, производятся на базе локальной копии профилей, загруженных из какого-либо публично доступного репозитория. Управление локальными копиями профилей производится на странице «Управление репозиторием», ссылка на которую расположена на главной странице модуля.

Загрузка информации о профилях

Поле «Адрес исходного репозитория (URL)» предназначено для определения URL git-репозитория с конфигурационными файлами. Загрузка данных производится по нажатию кнопки «Загрузить», расположенной непосредственно справа от поля. В случае успеха, обновляются данные в расположенной ниже таблице «Профили».

Публикация профилей

Для того, чтобы локальная копия профиля могла быть использована другими узлами, она должна быть опубликована. Публикация профилей включается установкой отметки в поле «Опубликовать репозиторий», после чего справа в той же строке отображается публичный адрес, по которому локальные копии профилей может быть загружены. Этот адрес предназначен для ввода в поле «Адрес исходного репозитория (URL)» на другом узле. Если публикация включена, то при обновлении или создании локального профиля, публичные данные автоматически обновляются.

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

Таблица профилей

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

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

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

Управление профилями

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

Основная страница

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

Профиль

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

Профиль, отмеченный знаком «*», является текущим профилем ОС. Текущий профиль устанавливается путём сброса конфигурации ОС, т.е. приведением состояния конфигурационных файлов в состояние, определяемое профилем. После этого, конфигурация ОС может быть изменена, однако последний установленный профиль по прежнему считается текущим. Имя текущего профиля отображается также и в сигнальной строке.

Альтернативно, текущий профиль может быть установлен путём обновления выбранного профиля. После успешного обновления профиль становится текущим. Если включена публикация, то записанные изменения публикуются.

Файлы с изменениями

В таблице «Файлы с изменениями» перечисляются все файлы, состояние которых отличается от заданного выбранным в данный момент профилем. В первой колонке таблицы выводится имя файла, а во второй — код статуса. Предусмотрены статусы трёх типов: A — файл был добавлен в текущую конфигурацию (файл отсутствует в профиле), M — файл был изменён (отличается от файла в профиле), D — файл был удалён (файл присутствует в профиле, но отсутствует в текущей конфигурации). При изменении прав доступа к файлу информация об этом обновляется в служебном файле .etcgit/file-permissions, в результате чего последний также попадает в данный список.

Имя файла в первой колонке таблицы является ссылкой на разносный отчёт — информацию о разности текущего содержимого файла и его содержимого в профиле.

Сброс конфигурации

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

Перезапуск службы осуществляется в следующих случаях:

  • затронут конфигурационный файл, принадлежащий тому же пакету, что и служба;
  • затронута директория, принадлежащая тому же пакету, что и служба;
  • затронут один из специально обозначенных конфигурационных файлов (в настоящее время это /etc/resolv.conf);
  • одна из служб, от которых зависит данная служба, подлежит перезапуску[1].

Производится перезапуск только включённых служб (chkconfig on).

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

Обновление профиля

Обновление конфигурационных файлов в репозитории производится по нажатию кнопки «Обновить профиль», либо, альтернативно, по нажатию кнопки «Новый профиль…». В обоих случаях вызывается диалоговое окно с просьбой ввести краткий комментарий, характеризующий включаемые в профиль изменения. Кроме ввода комментария, диалоговое окно позволяет выбрать один из двух режимов обновления файлов: обновление выбранного профиля, либо создание нового профиля на его основе. Во втором режиме, кроме комментария, необходимо также ввести имя нового профиля.

После успешного обновления профиль становится текущим. Если публикация включена, обновления публикуются автоматически.

Дополнения к Alterator

Нормальная работа модуля возможна только при наличии ряда дополнений и исправлений в пакете alterator-fbi. Код с набором данных модификаций в данный момент расположен по адресу packages/alterator-fbi.git, ветвь versioncontrol. Кроме исправления ошибок и добавления новых функций, данная ветвь содержит реализацию «сигнальной строки» — строки с именем текущего профиля и цветовой индикацией.

Список модификаций

Сигнальная строка
При наличии модуля /etcgit в верхней части страница выводится строка-ссылка с именем текущего профиля. Если текущее состояние конфигурационных файлов отличается от заданного, то имя профиля отображается красным цветом. Затрагиваются файлы workflow/acc.scm и acc/index.html.
Программируемые ссылки
Иногда в качестве управляющего элемента вместо кнопки больше подходит ссылка. Например, когда нужно перелистывать многостраничную таблицу. Вместе с тем, использование в этом случае «настоящих» ссылок привело бы к обновлению всей страницы, что не всегда желательно. Благодаря простому изменению в scripts/form.js для ссылок можно указывать scheme обработчики onclick, также как и для кнопок.
Прямой вызов функций JavaScript
В interfaces/guile/ajax.scm добавлены функции js и js-result, предназначенные для вызова произвольных функций, определённых на странице. Функция js-result вызывается в синхронном режиме и позволяет передать произвольный результат в scheme-код. Используется в etcgit для вызова диалоговых окон.
Синхронное отображение информационных окон
Оригинальные версии функций form-message и form-warning работали в ассинхронном режиме, т.е. при попытке отобразить подряд несколько сообщений, все они выводились на страницу разом, перекрывая друг друга. Теперь этого не происходит. Затронуты файлы interfaces/guile/ajax.scm и scripts/form.js.
Поддержка Unicode в исходных строках для перевода
Как оказалось, вырезка строк, содержащих символы Unicode, например многоточие «…» не работала, в то время как сам gettext нормально справляется с такими строками. Небольшое исправление затронуло bin/configd-xgettext.

Замечания

  1. В настоящее время зависимость между службами рассчитывается на основании очерёдности их запуска в текущем runlevel. Определённые службы, при этом, считаются независимыми (plymouth, fbsetfont и т.д.). Думаю, что с переходом на systemd зависимость можно будет проследить явно.