Шаблон молча не сработал: диагностика
Обновлено 5 ноября 2026
- 1. Неправильно названа директория события
- 2. На директории или файле первого уровня нет переменной действия
- 3. Не указано нужное условие действия
- 4. Шаблон привязан к пакету, который сейчас не настраивается
- 5. Не указан доступный модуль переменных
- 6. Ошибка в самом шаблоне
- Как посмотреть, что создаст шаблон
- Порядок действий, если ничего не помогло
- См. также
Самый частый вопрос — «я создал шаблон, запустил настройку, а файла нет». Шаблоны почти никогда не «ошибаются молча»: они просто не попадают в выборку. Ниже — причины в порядке убывания частоты, каждая с проверкой.
1. Неправильно названа директория события
Директория первого уровня обязана иметь заголовок с переменной действия — в файле .calculate_directory, например # Calculate append=skip env=install ac_install_merge==on. Сама же директория может называться как угодно: merge, xyz или 2_ac_install_merge наложение не различает, «похожих имён» утилиты не ищут и ничего не угадывают. Без переменной действия поддерево не применяется — в подробном выводе появится Пропущенные директории. Соглашение N_ac_<действие> нужно для другого: директории обходятся в лексикографическом порядке, поэтому номер в начале имени задаёт очерёдность наложения.
Проверка: сравните с фактическим набором в /var/db/repos/calculate/profiles/templates/ (см. карту событий).
2. На директории или файле первого уровня нет переменной действия
Для пользовательского слоя (/var/calculate/templates) правило жёсткое: каждый элемент первого уровня — и директория, и файл — должен иметь в заголовке переменную действия (ac_*) или cl_name==. Если её нет, поддерево пропускается, а процесс настройки помечается как неудачный; в подробном выводе вы увидите перечисление «Skipped templates» и подсказку про заголовок вида # Calculate ac_install_merge==on.
Деревья в репозиториях (/var/db/repos/…) из этого правила исключены — там env= и действие задаются на уровне директории события.
Двоичные файлы на первом уровне не допускаются в любом случае.
3. Не указано нужное условие действия
Классика: шаблон лежит в правильной директории, но в заголовке нет env=install ac_install_merge==on — и наоборот, есть условие ac_desktop_profile==on, а вы запускаете настройку пакета.
Проверьте значения переменных того запуска:
/usr/libexec/calculate/cl-variable --value install.ac_install_merge install.ac_install_live install.cl_setup cl_merge_pkg
Переменные действия лежат в модуле install, поэтому без префикса cl-variable их не находит и отвечает Не найдена переменная. Пустая строка в ответе означает, что переменная определена, но значения не имеет (например, cl_merge_pkg вне настройки пакета).
Полезно помнить
при прямом запуске cl-core-setup в установленной системе включаются сразу ac_install_merge и ac_install_live, а внутри chroot Portage live-режим выключен.
4. Шаблон привязан к пакету, который сейчас не настраивается
Условия mergepkg(<категория>/<пакет>)!=, merge(...)!=, pkg(...)!= — это фильтры по пакету. Они истинны, если пакет настраивается сейчас или числится в кэше настройки:
/var/lib/calculate/calculate-core/cache/merge-setup.list # настройка пакета /var/lib/calculate/calculate-core/cache/merge-patch.list # патчи
Отсюда две неочевидности. Первая: шаблон, привязанный к неустановленному пакету, не применится никогда — он сработает при первой установке этого пакета. Вторая: mergepkg() без аргументов берёт категорию и имя пакета из пути (<категория>/<пакет>/…), так что неверно названная директория пакета даёт тихо неработающий шаблон.
Имена пакетов в этих условиях можно проверить заранее, не запуская наложение: cl-check-templates (пакет sys-apps/calculate-toolkit, ставится в /usr/sbin/cl-check-templates) разбирает условия pkg() и merge() — а с ними и mergepkg() — и сверяет указанные пакеты с репозиториями и базой установленных пакетов, учитывая переименования. Опечатка в имени пакета — это не «шаблон не подошёл», а «никогда не подойдёт».
Проверка: запустите настройку именно этого пакета и смотрите подробный вывод:
cl-core-setup -n <пакет>
В нём перечисляются применённые шаблоны и ошибки по каждому файлу.
5. Не указан доступный модуль переменных
Параметр env=<модуль> подключает переменные соответствующего пакета утилит. Если модуля в системе нет, шаблон пропускается без сообщения об ошибке. Признак: в cl-variable переменная не определена. То же касается условий по ini(...): они читают стек ini.env, и если нужной секции нет ни в одном слое — условие ложно. Многие «выключаемые» шаблоны в оверлеях устроены именно так: они помечены как выключенные и ждут, что администратор включит их значением в ini.env.
6. Ошибка в самом шаблоне
incorrect header parameter: '<имя>'— параметр заголовка не существует для файла или директории (напомню: у директории набор параметров заметно короче);function of templates '<имя>' not found— в заголовке или теле использована функция, которой нет ни среди встроенных, ни среди функций оверлея: шаблон прерывается;Failed to apply custom function …— функция из scripts/functions вернула ошибку: подстановка станет пустой, шаблон применится, но «не туда»;Wrong option 'append=<значение>' in template <файл>— для patch и «исполняемых» форматов (diff, dconf, contents, sqlite, backgrounds) способ объединения обязан быть patch;Wrong value '<x>' in the template— некорректное значение параметра (например, относительный path=).
Как посмотреть, что создаст шаблон
Не дожидаясь реальной настройки системы, можно направить результаты в каталог: --pkg-path задаёт корневой путь для сохранённых конфигурационных файлов.
mkdir -p /tmp/clt-preview
* Конфигурация утилитами Calculate системных настроек baselayout ... * Утилиты Calculate изменили файлы: * /tmp/clt-preview/etc/profile.d/editor.sh * /tmp/clt-preview/etc/os-release
Настоящие файлы при этом не изменяются — проверьте ls -l /etc/profile.d/editor.sh. Это удобный способ посмотреть, что именно получится из вашего шаблона, включая служебный заголовок и раскладку по директориям.
Полезно заодно убедиться, что шаблон не создаёт лишних директорий: сравнив вывод find /tmp/clt-preview с ожиданиями. Директория-шаблон без .calculate_directory появляется в результате как реальная директория — если её быть не должно, добавьте в неё # Calculate append=skip. У директории первого уровня в /var/calculate/templates к этому добавляется ещё одно требование: в её заголовке обязана быть переменная действия, иначе молча пропустится всё поддерево (в подробном выводе — Пропущенные директории).
Порядок действий, если ничего не помогло
- --pkg-path + -v: видите файл в результате — проблема не в шаблоне, а в выборке (пункты 1–5).
- Уберите из заголовка все условия кроме env=install ac_install_merge==on и проверьте ещё раз: если заработало, «виновато» одно из снятых условий — возвращайте по одному.
-
Сравните с рабочим аналогом: в дереве calculate почти для любого пакета есть готовый шаблон; искать так:
grep -rl 'format=kde' /var/db/repos/calculate/profiles/templates | head