Шаблон рядом с файлом: .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(, файл берётся в работу независимо от совпадения имени. Он нужен, когда целевой файл при данном запуске всё равно не настраивается:
# 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, когда:
- настроек несколько и их логично сгруппировать (см. директории-шаблоны);
- шаблоны должны переезжать вместе с оверлеем на другие машины;
- нужны условия, функции оверлея и привязка к событиям установки/обновления.
См. также
- Быстрый старт — пример 3.
- Жизнь файла после шаблона — служебный заголовок и владение файлом.
- Синтаксис шаблона — format=, comment=, append=.