Наиболее важным изменением Calculate Linux 10.9 является переход на новый формат шаблонов. Шаблоны Calculate 2 уже более двух лет используются при настройке сервера и только сейчас появилась возможность использовать их для настройки системы.\
Я планирую в нескольких статьях описать возможности шаблонов так, чтобы вы смогли (и у вас появился интерес) использовать шаблоны для настройки своей системы.
{{TOC}}
Введение
Для настройки конфигурационных файлов программ, утилиты Calculate 2 используют шаблоны. Шаблоны это текстовые файлы, которые состоят как правило из заголовка и тела. Заголовок занимает одну или более строк, разделенных в конце символом обратной косой черты “\” и начинается с:
# Calculate
Заголовок может содержать параметры и условия. Наиболее популярный параметр 'format'
отражает формат конфигурационного файла, в соответствии с синтаксисом которого должно быть составлено тело файла шаблона. В теле файла шаблона могут использоваться переменные, функции и условия.
Пути хранения шаблонов
В утилитах Calculate 2.2 шаблоны всех приложений хранятся в общих путях. Таких путей несколько:
# /usr/share/calculate/templates/
По этому пути хранятся шаблоны пакета calculate-templates. Пакет содержит все шаблоны утилит Calculate 2.2. По примеру этих шаблонов вы можете создавать свои.
# /var/calculate/templates/
Путь для хранения локальных шаблонов. Используйте этот путь для хранения своих шаблонов.
# /var/calculate/remote/templates/
Путь хранения сетевых шаблонов. Используя этот путь для шаблонов, вы можете управлять настройкой приложений на всех Linux-десктопах, введенных в домен.
Структура шаблонов
Переменные
Шаблоны могут использовать внутренние переменные утилит Calculate. Переменные содержат различные значения, такие как: настройки системы, параметры выполнения программ, заданные действия и т.д. Переменные состоят из нескольких слов, разделенных знаком подчеркивания “_”. Вначале переменной следуют сокращенное обозначение её типа. Пример: 'cl'
- служебная переменная утилит, 'os'
- настройки системы, 'ur'
- данные пользователя. Для обозначения типа значений, в конце имени переменной могут использоваться зарезервированные слова. Пример: 'path'
- путь, 'set'
- установка значения on/off, 'ip'
- ip-адрес и т.д. Значения переменных можно посмотреть, добавив к любой команде утилит Calculate 2.2 параметр (–var/-v), пример:
# cl-install -v --filter *ip
The list of variables:
Variable name Mode Value
----------------- --- ----------
os_install_net_ip [r] 10.0.0.50
os_net_ip [r] 10.0.0.50
----------------- --- ----------
У каждого пакета утилит может быть свой набор переменных. Такие переменные после обозначения типа начинаются с имени пакета. Например переменная 'os_install_locale_lang'
принадлежит пакету calculate-install
и в отличие от 'os_locale_lang'
обозначает язык не в текущей, а в устанавливаемой системе. В шаблонах следует использовать переменную 'os_install_locale_lang'
, т.к. если вы будете просто обновлять настройки, устанавливаемая система будет равна текущей. Две переменные обозначающие язык системы нужны для отображения выполненных изменений в процессе установки или обновления системы. Пример:
# cl-install -v --filter *locale_lang
The list of variables:
Variable name Mode Value
---------------------- --- ----------
os_install_locale_lang [r] ru_RU
os_locale_lang [r] ru_RU
---------------------- --- ----------
В теле шаблона вы можете подставить значение любой переменной. Для этого добавьте перед ней символы '#-'
и в конце '-#'
. Пример:
#-os_install_locale_lang-#
Функции
Функции позволяют вычислять значения на основании заданных параметров. В качестве примера можно привести функцию sum()
, в которой осуществляются простые операции сложения, которые использовались при расчёте расположения иконок на рабочем столе plasma-desktop. Аналогично переменным, функции могут быть вставлены в тексте шаблона, при добавлении перед функцией символов '#-'
и в конце '-#'
. Пример:
#-sum(bt,bt+2,bt+35+2)-#
Функции, как и переменные могут участвовать в условных выражениях в заголовке шаблона, либо в условных блоках.
Условные выражения
В условных выражениях утилит Calculate 2.2 практически ничего не изменилось с первой версии, разве что добавилась поддержка функций. Вы можете выделить определенный текст, добавив к нему условие. При выполнении условия текст будет обработан. Пример:
# cat kopeterc
[Behavior]
#подключаться автоматически
#?pkg(kde-base/kopete)<4.2#
autoConnect=true
#pkg#
#?pkg(kde-base/kopete)>=4.2#
initialStatus=Online
#pkg#
В приведенном примере используется функция pkg()
. Функция возвращает версию установленного пакета. Условные выражения '<'
и '>='
работают также как и аналогичные в языках программирования. Помимо сравнения чисел, могут сравниваться также и версии программ, когда в номере присутствуют более одной точки.
Работа с шаблонами
Долой теорию, приступим к практике!
Для начала обновите утилиты до последних версий, выполнив:
eix-sync
emerge calculate-install calculate-client calculate-desktop
Пример 1. Создадим для примера локальный шаблон
mkdir -p /var/calculate/templates
touch /var/calculate/templates/test.conf
Добавим в него следующий текст:
# Calculate append=after
hello
Параметр заголовка 'append'
говорит о том, что тело шаблона должно дописываться в конец конфигурационного файла.
Для тестирования выполним наложение локальных шаблонов:
# cl-template -l local
* Package calculate-install-2.2.0.0 has changed files:
* /test.conf
* Package calculate-client-2.2.0.0 has changed files:
* /test.conf
* Package calculate-desktop-2.2.0.0 has changed files:
* /test.conf
В результате в корне файловой системы будет создан файл 'test.conf'
со следующим содержимым:
# cat /test.conf
hello
hello
hello
Из примера видно, что наложение шаблона поочередно было выполнено каждым пакетом утилит Calculate 2.2. Давайте проверим.
Пример 2. Изменим содержимое нашего шаблона, добавив переменную
# Calculate append=after
#-cl_name-#
Выполним наложение локальных шаблонов:
# cl-template -l local
* Package calculate-install-2.2.0.0 has changed files:
* /test.conf
* Package calculate-client-2.2.0.0 has changed files:
* /test.conf
* Package calculate-desktop-2.2.0.0 has changed files:
* /test.conf
Проверим содержимое файла '/test.conf'
:
# cat /test.conf
hello
hello
hello
calculate-install
calculate-client
calculate-desktop
Как видите, результат подтвердился, поочередно в конечный файл были добавлены названия пакетов утилит Calculate. Причина такого поведения кроется в хранении шаблонов. Если в Calculate 2 шаблоны разных утилит хранились в разных путях, то утилиты Calculate 2.2 используют несколько общих путей. То есть, забегая вперед, правильно используя шаблоны вы сможете настраивать как определенный системный файл, так и графическое приложение. Иными словами, размещая свой шаблон, вы должны позаботиться о том, какому пакету он будет принадлежать.
Пример 3. Добавим условие в файл шаблона
Утилиты Calculate 2.2 отличаются между собой составом переменных. Например calculate-install обладает исчерпывающей подборкой переменных настройки системы. Пакет calculate-desktop содержит необходимое количество переменных для настройки рабочего стола. Пакет calculate-client - переменные для работы десктопа в домене.
Добавим условие, при котором шаблон будет выполняться только пакетом calculate-install. Для этого отредактируем наш файл шаблона:
# Calculate append=after cl_name==calculate-install
#-cl_name-#
Выполним наложение локальных шаблонов:
# cl-template -l local
* Package calculate-install-2.2.0.0 has changed files:
* /test.conf
Проверим то, что увидели:
# cat /test.conf
hello
hello
hello
calculate-install
calculate-client
calculate-desktop
calculate-install
Отлично! Теперь мы смело можем использовать все переменные пакета calculate-install. Список доступных переменных можно получить выполнив:
cl-install -v
Пример 4. Пример рабочего шаблона
Наш тестовый шаблон создавал файл в корне файловой системы и дописывал в него строчки. Давайте попробуем при помощи этого же шаблона изменить какой-нибудь произвольный файл, например '/etc/samba/smb.conf'
. Отредактируем test.conf:
# Calculate cl_name==calculate-install format=samba path=/etc/samba name=smb.conf
link=/etc/samba/smb.conf.default
[global]
workgroup = MYSERVER
Уже интересней?
На что хочется обратить ваше внимание:
# Здесь уже нет параметра 'append'
, т.к. мы явно указали формат файла (format=samba
), а для формата 'samba'
по умолчанию действует объединение (append=join
).
# Параметром 'path'
мы поменяли путь конечного файла.
# Параметр 'name'
изменил имя нашего шаблона на 'smb.conf'
.
# Ну и наконец 'links'
взял за основу объединения файл примера /etc/samba/smb.conf.default
.
Обратите внимание, что параметр 'workgroup'
заключен в области видимости переменных 'global'
. Это важно, т.к. все параметры конфигурационного файла smb.conf должны быть записаны исключительно в своих областях видимости. Здесь я использую термин “область”, не “секция” и т.п., следуя терминологии принятой в руководстве по шаблонам.
Выполним 'cl-template -l local'
и посмотрим результат:
# cl-template -l local
* Package calculate-install-2.2.0.0 has changed files:
* /etc/samba/smb.conf
Что получилось:
# cat /etc/samba/smb.conf
...
#======================= Global Settings =====================================
[global]
# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
workgroup = MYSERVER
...
Как вы видите, необходимый результат достигнут, мы поменяли параметр конфигурационного файла с произвольным путем, воспользовавшись файлом примера.
Итог
Из статьи вы узнали, что:
# Шаблоны теперь легко найти, т.к. все утилиты Calculate 2.2 используют общие пути для хранения шаблонов.
# О назначении переменных не сложно догадаться.
# Такие функции, как pkg()
могут существенно расширить возможности шаблонов.
# Шаблоны накладываются несколькими пакетами из состава утилит Calculate 2 и для правильной работы неплохо бы добавить условие для проверки определенного пакета.
# Любой шаблон может менять произвольный файл в системе.
P.S. Начиная с версии пакета calculate-install-2.2.0.0_p20100910, первые два примера работать не будут. Тем не менее, я не убираю их из статьи, т.к. по ним можно увидеть логику работы утилиты.