Переменные шаблонов
Обновлено 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= нет в системе, шаблон просто пропускается — без ошибки.
См. также
- Кто и когда налагает шаблоны — что такое ac_* на практике.
- Шаблон молча не сработал — как проверить значение конкретной переменной.