Шаблон рядом с файлом: .clt

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

.clt-шаблон — способ переопределить конкретный конфигурационный файл, не заводя каталог шаблонов и не помня, в какой директории он живёт. Такой шаблон лежит рядом с настраиваемым файлом и отличается от него расширением. Меняет ли он файл на месте, зависит от состояния цели: если файл отличается от записанного в списке файлов пакета (его правили вручную либо он пересоздавался), движок бережёт вашу версию и пишет результат рядом — в файл вида .cfg0000<имя>, а цель остаётся прежней. На нетронутом файле тот же шаблон меняет цель на месте; узнать пакет и расхождения помогают equery b <файл> и qcheck <пакет>.

/etc/conf.d/consolefont          настраиваемый файл
/etc/conf.d/consolefont.clt      шаблон, который его настраивает

Путь и имя цели вычисляются из расположения самого шаблона: снимается расширение .clt, и всё остальное становится адресом конфигурационного файла. Поэтому в заголовке не нужны ни path=, ни name= — их следует из имени файла. Утилиты налагают .clt-шаблоны, сканируя рекурсивно /etc и каталоги из CONFIG_PROTECT.

Минимальный пример

Надо задать размер консольного шрифта. Плохой вариант — копировать весь файл: без format= шаблон считается «сырым», перезапишет цель целиком и не оставит служебного заголовка. Хороший вариант — две строки:

/etc/conf.d/consolefont.clt

# Calculate format=openrc
consolefont="ter-v12n"

Формат указан — значит изменится только этот параметр, остальное в файле сохранится, а сверху появится пометка, что файл управляется шаблоном:

#------------------------------------------------------------------------------
# Modified Calculate Utilities 3.7.6.8
# Processed template files:
# /etc/conf.d/consolefont.clt
#------------------------------------------------------------------------------

Когда .clt применяется

Имя файла до .clt и есть привязка: оно должно полностью совпадать с именем настраиваемого файла (smb.conf.clt настраивает smb.conf). Тогда утилита берёт из расположения шаблона и путь, и имя (path=, name=), и пакет, которому принадлежит целевой файл — его не нужно указывать в заголовке, он подставляется заранее и работает в mergepkg(), merge() и pkg().

Механика из кода: при настройке пакета утилиты собирают список файлов, которыми владеют настраиваемые пакеты (по базам CONTENTS, плюс файлы, уже изменённые обычными шаблонами). Шаблон .clt попадает в обработку, если его цель есть в этом списке — то есть если файл с таким именем действительно принадлежит настраиваемому пакету. Отсюда практическое следствие: произвольно названный .clt, лежащий в /etc, будет просто пропущен.

Второй способ попасть в обработку — явная привязка в заголовке: если в нём встречается merge( или belong(, файл берётся в работу независимо от совпадения имени. Он нужен, когда целевой файл при данном запуске всё равно не настраивается:

/etc/conf.d/consolefont.clt
# Calculate format=openrc merge(sys-apps/openrc)!=
consolefont="ter-v12n"

Третий случай — полная перенастройка системы, а не одного пакета: тогда обрабатываются и .clt без явной привязки.

Проверить явную привязку можно заранее, не дожидаясь emerge:

grep -l 'merge(' /etc/conf.d/*.clt

Применение удобно смотреть в подробном выводе настройки пакета:

cl-core-setup -n openrc

При установке системы .clt-шаблоны копируются в устанавливаемую систему: установщик отдельно обходит каталоги .clt и переносит их в цель, поэтому ваше переопределение доезжает до установленной машины, а не живёт только в live-окружении.

Расхождение со старыми руководствами

Обратите внимание на расхождение со старыми руководствами: там утверждается, что для .clt «заданы по умолчанию» и env=install, и ac_install_merge==on. На самом деле эти параметры просто не нужны: путь, имя и пакет выводятся из расположения шаблона и из владения целевым файлом, а условия заголовка на проходе .clt читаются с установочного модуля — движок сам ставит install на время этого прохода (cl_template.py, строка 5080). Поэтому не надо и «добавлять ac_install_merge==on про запас»: записанное явно, это обычное условие, и при выключенной переменной шаблон не применится.

Особенности и ограничения

  • Профиль пользователя — при настройке пользовательского профиля слой .clt не участвует — .clt предназначен для системных файлов. Для ~/.config используйте обычные шаблоны в 6_ac_desktop_profile.
  • Служебный заголовок — у .clt он отсутствует по определению: файл и есть источник. Чтобы файл «выглядел как настроенный шаблоном», укажите format= или comment=.
  • Несколько .clt на один файл — не поддерживаются осмысленно: оставьте один.
  • Отключение — чтобы перестать управлять файлом, удалите .clt и верните конфигурационный файл к состоянию пакета: etc-update/dispatch-conf или emerge -1 <пакет>.

.clt или каталог шаблонов

Берите .clt, когда:

  • правка относится к одному конкретному файлу на одной конкретной машине;
  • нужно переопределить настройку, которую ставит системный шаблон, и не хочется разбираться в приоритете слоёв;
  • это разовая административная поправка, которую удобно хранить рядом с файлом.

Берите обычный шаблон в /var/calculate/templates, когда:

  • настроек несколько и их логично сгруппировать (см. директории-шаблоны);
  • шаблоны должны переезжать вместе с оверлеем на другие машины;
  • нужны условия, функции оверлея и привязка к событиям установки/обновления.

См. также