Быстрый старт: первый шаблон за пять минут
Обновлено 5 ноября 2026
Три примера от простого к полезному. Каждый — законченный: создал, применил, проверил.
Пример 1. Изменить один параметр, не трогая файл
Допустим, нужно задать редактор по умолчанию для всех пользователей. Файл /etc/profile.d/editor.sh уже существует — его создаёт система, и руками править его бессмысленно: при переустановке пакета изменения пропадут.
Создайте файл шаблона в локальном хранилище (нужны права суперпользователя):
/var/calculate/templates/editor.sh
# Calculate env=install ac_install_merge==on path=/etc/profile.d comment=# export EDITOR="nano"
Что здесь написано:
- env=install ac_install_merge==on — применять шаблон во время настройки пакета. Переменная действия принадлежит модулю install, поэтому её пишут вместе с env=install: без него движок отвечает Не найдена переменная ac_install_merge и шаблон не налагается. У файла первого уровня в пользовательском хранилище такая переменная обязательна, без неё шаблон молча пропускается;
- path=/etc/profile.d — куда положить результат; имя файла возьмётся из имени шаблона (editor.sh);
- comment=# — так как формат не указан, файл считается «сырым» и пишется целиком; символ комментария нужен, чтобы утилиты вписали сверху служебный заголовок, не сломав синтаксис bash.
Если шаблон читает переменные конкретного модуля (#-os_install_*-#), к заголовку добавляют env=<модуль>; здесь тело переменных не читает, поэтому env= лишнее. Как он работает — в Синтаксисе шаблона.
Теперь примените шаблоны этого пакета:
cl-core-setup -n baselayout
Проверьте результат — файл содержит ваш export и пометку, из какого шаблона он взят:
#------------------------------------------------------------------------------ # Modified Calculate Utilities 3.7.6.8 # Processed template files: # /var/db/repos/calculate/profiles/templates/2_ac_install_merge/sys-apps/baselayout/editor.sh # /var/calculate/templates/editor.sh # To modify this file, create a /etc/profile.d/editor.sh.clt template. #------------------------------------------------------------------------------ export EDITOR="nano"
Служебный заголовок — не украшение: по нему утилиты узнают, что файл им управляем, и при следующем наложении заменят только своё, не трогая остальное.
Пример 2. Точечная правка конфигурационного файла пакета
Для файлов знакомых форматов копировать содержимое не нужно — укажите формат, и шаблон опишет только изменяемые параметры. Пусть надо включить переадресацию пакетов. В Calculate настройки ядра правят файлами-«дропинами» в /etc/sysctl.d, и принадлежат они пакету sys-apps/openrc — ровно так же устроены шаблоны самого дистрибутива:
/var/calculate/templates/merge/.calculate_directory
# Calculate env=install ac_install_merge==on append=skip
/var/calculate/templates/merge/calculate_forward.conf
# Calculate format=procmail mergepkg(sys-apps/openrc)!= path=/etc/sysctl.d net.ipv4.ip_forward = 1
Здесь два файла, и оба нужны. В пользовательском хранилище каждый элемент первого уровня проверяется отдельно от вложенных: если у каталога нет своей переменной действия, всё поддерево пропускается молча — в подробном выводе вы увидите только Пропущенные директории. Поэтому заголовок каталога обязан содержать env=install ac_install_merge==on; эта переменная действует и на файлы внутри каталога, так что в самом шаблоне её можно не повторять. А append=skip нужен, чтобы каталог сам не стал шаблоном: без него в системе будет создан каталог /<имя> (тут — /merge), и он останется висеть в корне мусором.
mergepkg(sys-apps/openrc)!= привязывает шаблон к пакету: он сработает при настройке sys-apps/openrc и не будет мешать, когда настраивается что-то другое. Существующие файлы при этом не переписываются: утилита меняет только указанную запись, остальные ваши настройки остаются на месте.
Проверка та же — примените шаблоны пакета:
cl-core-setup -n openrc
Затем проверьте результат:
grep ip_forward /etc/sysctl.d/calculate_forward.conf
Пример 3. Переопределение через .clt — без хранилища шаблонов
Самый короткий способ поменять настройку конкретного файла — положить шаблон рядом с ним, с расширением .clt. Он наследует путь и имя из своего расположения: /etc/conf.d/consolefont.clt настраивает /etc/conf.d/consolefont.
/etc/conf.d/consolefont.clt
# Calculate format=openrc consolefont="ter-v12n"
path=, name= и env=install здесь не нужны — путь, имя и пакет выводятся из расположения самого шаблона и из владения целевым файлом. Не нужен и ac_install_merge==on: .clt применяется при обновлении пакета и без него. Записанный явно, это обычное условие — и при выключенной переменной шаблон будет пропущен. Применяется обычным обновлением пакета:
emerge -a1 openrc
consolefont="ter-v12n"
Меняет ли .clt файл на месте, зависит от состояния цели. Если конфигурационный файл отличается от того, что записан в списке файлов пакета (его правили вручную либо он пересоздавался), движок бережёт вашу версию и кладёт результат рядом — в ._cfg0000_consolefont, а цель остаётся прежней. На нетронутом файле тот же шаблон меняет цель на месте. Проверить, какому пакету принадлежит файл и нет ли расхождений, помогают equery b <файл> и qcheck <пакет>.
Не копируйте в .clt весь файл целиком: без format= это будет «сырой» шаблон, который перезапишет конфиг полностью и не оставит служебного заголовка. Двух строк с форматом достаточно.
Группировка шаблонов: директория — тоже шаблон
Когда шаблонов несколько, общие условия выносят в заголовок директории. Он хранится в файле .calculate_directory и наследуется всем, что внутри:
/var/calculate/templates/merge/.calculate_directory
# Calculate append=skip env=install ac_install_merge==on
- env=install ac_install_merge==on больше не нужно повторять в каждом шаблоне внутри;
- append=skip означает, что сама директория в систему не переносится (иначе утилиты создали бы /merge).
Файлы внутри становятся короче:
/var/calculate/templates/merge/ncurses.sh
# Calculate mergepkg(sys-libs/ncurses)!= path=/etc/profile.d comment=# export LDFLAGS="${LDFLAGS} -ltinfo"
Как убедиться, что всё правильно
Шаблоны связаны с пакетным менеджером: файл, созданный шаблоном для пакета, регистрируется в его составе и проходит проверку контрольных сумм. Взять хотя бы /etc/profile.d/editor.sh — его создаёт шаблон editor.sh из репозитория calculate:
/etc/profile.d /etc/profile.d/editor.sh
sys-apps/baselayout-2.18-r1 (/etc/profile.d/editor.sh)
Checking sys-apps/baselayout ... MTIME: /etc/mtab * 41 out of 42 files are good
Строка MTIME: /etc/mtab — не ошибка шаблона: этот файл меняется при загрузке системы, и qcheck честно сообщает о расхождении времени. Если же расхождение касается файла, созданного вашим шаблоном, обычно виновата привязка к пакету: не указан mergepkg()/pkg(), и файл попал в «настройку всей системы», а не в состав пакета. Об этом — в разделе Жизнь файла после шаблона.
Дальше
- Разобраться, что писать в заголовке.
- Выбрать формат под свой файл.
- Если шаблон «не работает» — чек-лист диагностики.