Шаблоны утилит Calculate Linux

Предлагаю вашему вниманию краткое содержание доклада с 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
...
1 Like

Alexander , огромное спасибо !!!

Вроде даже что-то понимать стал, но насколько это актуально?

/var/calculate/templates по дефолту отсутствует в новых инсталляциях

merge(sys-kernel/calculate-sources)!=

Знак отрицания что-то значит? Если пакет не установлен?
Список собыйтий и условий где можно посмотреть?

cat /etc/samba/smb.conf.default.clt
 # Calculate name=smb.conf format=samba 
link=/etc/samba/smb.conf.default
[global]
workgroup = CALCULATE

Шаблон будет править smb.conf взял часть параметров из smb.conf.default и самого шаблона? link впервой строке под хэшем или в результирующий конфиг запишется?

Вроде даже что-то понимать стал, но насколько это актуально?

/var/calculate/templates по дефолту отсутствует в новых инсталляциях

Да, директорию нужно создать.

merge(sys-kernel/calculate-sources)!=

Знак отрицания что-то значит? Если пакет не установлен?

Все правильно. Функция проверяет наличие пакета. Если пакета нет, то условие не будет выполнено, значит шаблон не отработает. Подробнее можно почитать здесь.

По переменным событий к сожалению описания нет. В качестве примера можно посмотреть шаблоны оверлея /var/db/repos/calculate/profiles/templates/3.6/*/.calculate_directory

Шаблон будет править smb.conf взял часть параметров из smb.conf.default и самого шаблона? link впервой строке под хэшем или в результирующий конфиг запишется?

Параметр link является частью заголовка, пишется в той же первой строке и означает что содержимое шаблона должно объединиться с файлом smb.conf.default, при этом параметр name=smb.conf говорит о том, что итоговый файл будет иметь имя smb.conf. Если параметра name нет, то имя конечного файла будет взято из имени шаблона.