Предлагаю вашему вниманию краткое содержание доклада с GSC 2013. Причин, по которым я выбрал именно эту, скучную для многих тему, несколько:
# Претерпело существенные изменения дерево утилит 3.1. Теперь в основе лежат действия, что позволяет увеличить масштабируемость для единой директории шаблонов (templates). Новая структура в будущем позволит перенести серверные шаблоны в единое дерево.
# Утилиты 3.1 получили значительную интеграцию в системе.
# Шаблоны из-за малого количества примеров остаются до сих пор очень сложным инструментом управления системой.
Готовя доклад я планировал его выложить на хабре, но в силу его узкой специализации решил воздержаться и опубликовать в нашем блоге.
Вопросы предлагаю писать в специализированном форуме http://www.calculate-linux.ru/projects/ru/boards/47
**_
Шаблоны Calculate Linux
# Утилиты управления системой
Calculate Linux использует оригинальные утилиты для установки, настройки и управления системой. Утилиты работают как из консоли, так и через графическую оболочку, вызываться могут как на локальной машине, так и удалённо, посредством протокола SOAP/WSDL.
Утилиты Calculate написаны на Python. Почти все настройки вынесены в файлы-шаблоны утилит, в большинстве случаев использующие оригинальный формат конфигурационных файлов программ с добавлением управляющих элементов.
# Особенности шаблонов
## Простой, единый синтаксис
### Оригинальный конфиг с добавлением заголовка и конструкциями для вставки управляющих элементов шаблонов.
## Поддержка объединения настроек
### Многие популярные форматы объединяются через парсер синтаксиса, в остальных случаях могут использоваться другие методы объединения - перезапись, дописывание или вставка по шаблону (diff и регулярные выражения).
### Несколько типов объединений, начиная от перезаписи и добавления и заканчивая объединением через встроенный парсер синтаксиса.
## Интеграция в системе
### Поддержка всех популярных действий, начиная от сборки системы и заканчивая входом в сеанс.
### Совместимость с пакетным менеджером.
#### При настройке пакетов, утилиты Calculate связывают настраиваемые файлы с пакетами.
#### При наличии изменённых пользователем файлов, новые настройки сохраняются в файлах с префиксом ._cfg0000_
.
#### При вызове настройки системы с помощью утилит Calculate, действие по обновлению изменённых пользователем настроек на новые будет аналогично вызову системной утилиты dispatch-conf.
## Гибкие настройки
### Внутренние переменные - вычисляемые и с предустановленным значением.
### Условия для применения шаблона, вставки части настроек
### условных выражений, встроенных переменных, функций (ini()
, pkg()
и др.), механизмов по объединению файлов, указания прав доступа.
## Отсутствие ограничений в именах и относительных путях
### Имена шаблонов, пути к ним могут иметь произвольные значения для удобства использования. Настоящие имена и пути могут быть переопределены в параметрах заголовка.
### Директории являются так же шаблонами и имеют свои свойства
### Наследование условий
# Хранение шаблонов
## Пути
### Шаблоны
Шаблоны располагаются в нескольких путях, описанных в переменной cl_template_path. Количество путей не ограничено. По умолчанию используются:
/var/lib/layman/calculate/profiles/templates
/var/calculate/templates
/var/calculate/remote/templates
Шаблоны будут выполняться в заданном порядке.
Каждый путь имеет своё имя, по умолчанию заданы следующие имена:
cl_template_location = overlay,local,remote
Путь к шаблонам можно явно задать в параметре "--templates"
при выполнении утилит.
Пример:
cl-setup-system --templates local
Выполнение этой команды приведёт к настройке системы только пользовательскими шаблонами, находящимися в директории /var/calculate/templates
.
### Clt-шаблоны
Для удобства изучения работы шаблонов утилиты Calculate поддерживают так называемые Clt-шаблоны.
#### Ограничения в использовании
***** Clt-шаблоны могут быть расположены только в директории /etc, а также в путях, указанных в системной переменной $CONFIG_PROTECT.
***** Clt-шаблоны могут быть использованы только для настройки системных файлов.
#### Предустановленные значения
***** Значения параметров: path (целевой путь), name (имя файла) получат значения исходя из имени и пути к файлу шаблона.
***** Функция merge() в случае наличия конфигурационного файла в системе с тем же именем без расширения ".clt"
, определит пакет, которому принадлежит файл и получит это значение.
#### Именование файлов шаблонов
***** Все clt-шаблоны имеют расширение ".clt"
. Если такого же файла без расширения шаблона в системе нет или он был добавлен вручную (не связан ни с одним пакетом), следует использовать функцию merge()
в заголовке шаблона, для связки шаблона с пакетом.
Пример 1. Clt-шаблон с подменой имени:
cat /etc/samba/smb.conf.default.clt
# Calculate name=smb.conf format=samba
link=/etc/samba/smb.conf.default
[global]
workgroup = CALCULATE
Пример 2. Clt-шаблон с указанием имени пакета:
cat /etc/samba/smb.conf.clt
# Calculate merge(net-fs/samba)!= format=samba
link=/etc/samba/smb.conf.default
[global]
workgroup = CALCULATE
Для проверки выполните:
emerge samba
либо
cl-core-setup --pkg-name=samba
### Переменные с предустановленным значением
#### в зависимости от выбранного профиля дистрибутива заполняются значения переменных. Пример для Calculate Linux Desktop XFCE:
/var/lib/layman/calculate/profiles/calculate/desktop/CLDX/calculate.env
/var/lib/layman/calculate/profiles/calculate/desktop/calculate.env
/var/lib/layman/calculate/profiles/calculate.env
В этих файлах устанавливаются такие значения, как имя дистрибутива, версия, пути для хранения шаблонов, настройки утилит, системные настройки и прочее.
Пример:
[main]
os_linux_system = desktop
## Дерево шаблонов
### Структура
В основе дерева шаблонов утилит Calculate 3.1 находятся действия. Действия описаны переменными, значения которых устанавливаются утилитами при наступлении определённых событий.
Пример корня дерева шаблонов:
1_ac_install_disk
2_ac_install_merge
3_ac_install_live
...
Имена состоят из порядкового номера и имени переменной действия. Порядковый номер определяет последовательность выполнения шаблонов. Например, при событии установки системы на жесткий диск устанавливаются переменные: ac_install_disk, ac_install_merge и ac_install_live, при установке системы на USB-Flash только ac_install_flash.
### Наследование
Директории в шаблонах также имеют свойства, в которых могут быть описаны права доступа, условия, имена, целевые пути и т.д. Для описания свойств директорий шаблонов используются файлы .calculate_directory.
На пути к файлу шаблона проверяются все условия для его выполнения. Условия могут быть описаны как в одном файле шаблона, например при создании шаблона пользователем, так и разбиты на несколько директорий для удобства администрирования, как это сделано в оверлее Calculate.
# Использование шаблонов
## События
### ввод машины в домен
### вывод машины из домена
### настройка профиля пользователя
### настройка системы
### настройка системы во время сборки перед обновлением пакетов
### настройка системы во время сборки перед сборкой пакетов
### настройка системы во время сборки после распаковки образа
### настройка системы при помощи утилит ‘cl-setup*’
### обновление портежей
### первая загрузка
### создание iso образа
### удаление пакета
### установка PXE системы
### установка пакета
### установка системы
### установка системы на USB-Flash
### установка системы на жесткий диск
## Системные и пользовательские
## Примеры
### Настройка параметров ядра
Во время установки ядра sys-kernel/calculate-sources
можно использовать не готовый бинарный пакет, а скомпилировать ядро, как и другие пакеты в вашей системе, с изменёнными настройками при помощи шаблона. Для этого создайте шаблон с произвольным именем в директории /var/calculate/templates
:
# Calculate env=install format=openrc name=.config
ac_install_patch==on&&merge(sys-kernel/calculate-sources)!=
CONFIG_JOLIET=n
CONFIG_ZISOFS=n
И выполните:
USE="-minimal" emerge calculate-sources
В примере из поддержки были удалены две файловые системы.
### Наложение патчей при сборке nvidia-drivers
Во время сборки x11-drivers/nvidia-drivers-319
при помощи шаблонов можно наложить патч. Для этого создадим шаблон с произвольным именем в директории /var/calculate/templates
со следующим содержимым:
# Calculate format=diff pkg(sys-kernel/calculate-sources)>=3.10
pkg(sys-kernel/calculate-sources)<3.11&&merge(x11-drivers/nvidia-drivers)==319
--- NVIDIA-Linux-x86_64-319.17-no-compat32.orig/kernel/nv-i2c.c 2013-04-26 00:22:30.000000000 -0400
+++ NVIDIA-Linux-x86_64-319.17-no-compat32/kernel/nv-i2c.c 2013-05-13 05:20:55.571981365 -0400
...