Переменные шаблонов

Обновлено 5 ноября 2026

Шаблоны настраивают систему, потому что опираются на переменные: имя хоста, диск, видеокарта, язык, домен, пользователь. Значения переменных утилиты вычисляют сами — из оборудования, из конфигурационных файлов и из параметров команды, с которой их вызвали.

Как посмотреть переменные

Список всех переменных с режимом и текущим значением:

cl-core-variables-show

Быстро прочитать конкретные переменные (в том числе от имени обычного пользователя):

/usr/libexec/calculate/cl-variable --value cl_template_data os_net_hostname

Полезная фильтрация: --filter writable — изменяемые, --filter userset — те, что заданы в файлах calculate.env, --filter <кусок имени> — по имени.

В выводе три колонки, и они объясняют почти всё поведение:

  • Режим — две буквы: доступ (r только чтение, w можно менять) и тип (s строка, b логическая on/off, l список, t таблица, c строка с выбором);
  • Расположение — в каком calculate.env задано значение по умолчанию (system, local, remote);
  • Значение — текущее; оно зависит от того, какая команда запущена, поэтому при разных действиях один и тот же набор переменных даёт разные значения.

Имя переменной: модуль и тип

Имя строится как модуль.название, где модуль — пакет утилит (main, install, update, desktop, client, core). В шаблонах модуль обычно можно опустить — тогда берётся модуль по умолчанию, заданный параметром env= в заголовке:

Модуль по умолчанию в заголовке

# Calculate env=install
Modes "#-os_install_x11_resolution-#"

Чтобы обратиться к другому модулю явно, пишите через точку: #-install.os_install_root_dev-#.

По префиксу названия видно назначение переменной:

  • ac_* — переменные выполняемого действия: они говорят, какой набор шаблонов налагается сейчас (ac_install_merge, ac_desktop_profile, ac_update_sync, …);
  • cl_* — настройки самих утилит;
  • hr_* — оборудование;
  • os_* — система;
  • ur_* — пользователь;
  • ld_* — атрибуты LDAP;
  • sr_* — сервисы.

Где хранятся значения

Два разных файла — не путайте:

calculate.env — значения переменных по умолчанию. Слои, в порядке возрастания приоритета:

/etc/calculate/calculate.env          (system)
/var/calculate/calculate.env          (local)
/var/calculate/remote/calculate.env   (remote)

Значение из более позднего слоя перекрывает предыдущие. Секция файла — имя модуля:

calculate.env

[install]
os_install_ntp = ntp0.zenon.net

Менять вручную можно, но надёжнее через утилиту — она проверяет допустимость значения:

Записать в файл по умолчанию:

cl-core-variables --set install.cl_autologin=guest

То же, но слоем local (/var/calculate/calculate.env):

cl-core-variables --set install.cl_autologin=guest:local

Удалить значение:

cl-core-variables --set install.cl_autologin

Недопустимое имя переменная утилита отвергает явно (Ошибка в параметре --set. Переменная <имя> не найдена), поэтому такой способ безопаснее правки файла руками. Значение утилита тоже проверяет: например, --set install.cl_autologin=root или значение с недопустимыми символами даёт Ошибка в параметре --set. без указания причины, а переменная сохраняет предыдущее значение. Если команда ничего не вывела, но значение не изменилось — значит проверка значения не пройдена; сверьтесь с cl-core-variables-show.

Отдельные обёртки

На некоторых сборках встречаются отдельные обёртки cl-core-variables и cl-core-variables-show. Если при запуске они выдают No module named 'calculate.console', работайте через cl-core --method=… — это тот же самый интерфейс.

Приоритет: параметры командной строки > calculate.env.

ini.env — переменные функций шаблонов: их создают сами шаблоны (#-ini(имя,значение)-#) и читают (#-ini(имя)-#). Это пользовательское состояние: где уже что настроено, нужны ли миграции. Читается стеком из нескольких слоёв — /var/lib/calculate/ini.env, /etc/calculate/ini.env, /var/calculate/ini.env, /var/calculate/remote/ini.env и файлы профилей репозиториев; при настройке системы используется системное расположение, при настройке профиля — ~/.calculate/ini.env.

Именно поэтому условие вида ini(пакет.enabled)==on — это «выключено по умолчанию, пока администратор не включил»: если ни в одном слое стека секции нет, условие ложно и шаблон не применяется.

Изменение значений из шаблона

Значение переменной шаблона (os_*, hr_*, cl_* из calculate.env) в шаблоне менять нельзя — они доступны только на чтение. Изменять можно переменные функций, через ini():

Запись переменной функции

#-ini(overlay-calculate.remerge,20261103)-#

Для передачи значения между шаблонами есть стек: push() в одном, pop() в другом.

Типичные ошибки

  • Переменная «пустая», хотя в calculate.env задана: неверно указана секция (должно быть имя модуля, например [install], а не название пакета).
  • Условие по ini(...) не срабатывает: проверьте, в каком именно ini.env лежит значение, — слои перекрывают друг друга, а при разных действиях (core_setup против desktop_profile) читаются разные файлы.
  • Переменная появилась только после установки пакета: часть переменных принадлежит модулям, которые должны быть доступны; если модуля env= нет в системе, шаблон просто пропускается — без ошибки.

См. также