Кто и когда налагает шаблоны

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

Шаблон применяется не «когда захочется», а в момент конкретного действия. Какие шаблоны наложить в этот раз, определяют переменные выполняемых действий ac_*: их выставляет утилита, а шаблоны проверяют в заголовке. Поэтому каталог верхнего уровня дерева шаблонов по соглашению называют по действию: N_ac_<событие>.

Фактический набор директорий в дереве calculate:

1_ac_install_disk         6_ac_desktop_profile
2_ac_install_merge        6_ac_install_config
3_ac_install_live         6_ac_install_configure
5_ac_ad_client            6_ac_install_flash
5_ac_client_configure     6_ac_install_patch
6_ac_backup_create        6_ac_install_pxe
6_ac_backup_restore       6_ac_install_unmerge
6_ac_backup_service       6_ac_update_sync
6_ac_builder_container    7_ac_server_ldif
6_ac_builder_iso          7_ac_server_setup
6_ac_builder_prepare      9_ac_install_merge
6_ac_builder_setup        deprecated
6_ac_builder_squash

Набор зависит от ревизии репозитория: в нём могут отсутствовать deprecated и часть 6_ac_builder_*. Полный и актуальный список даёт ls /var/db/repos/calculate/profiles/templates/.

Цифровой префикс в имени каталога события задаёт порядок относительно других каталогов; порядок файлов внутри одного каталога описан на странице о директориях-шаблонах. Само действие выбирает заголовок в .calculate_directory, а не имя каталога.

Основные события

Настройка пакета

События 2_ac_install_merge, 9_ac_install_merge, 6_ac_install_unmerge — происходит при установке, обновлении и удалении пакета: emerge. Реализовано хуками Portage — фрагментами profile.bashrc, которые лежат в /var/lib/calculate/profile.bashrc.d/ и сами сгенерированы шаблонами. Именно здесь работают шаблоны вида <категория>/<пакет>/…, а условие mergepkg(<категория>/<пакет>)!= проверяет, что настраивается этот пакет.

Важная деталь, объясняющая половину вопросов «почему не применилось»: шаблоны пакета налагаются только если пакет есть в кэшах /var/lib/calculate/calculate-core/cache/merge-setup.list (настройка) или merge-patch.list (патчи). Эти списки обновляет /usr/libexec/calculate/cl-pkg-cache на фазах установки/удаления. Нет пакета в кэше — нет и применения, даже если шаблон написан верно.

Модификация исходников пакета

Событие 6_ac_install_patch запускается перед компиляцией, шаблоны этого события накладывают патчи (обычно format=diff). При ошибке наложения сборка может быть прервана.

Обновление системы и синхронизация портежей

Событие 6_ac_update_sync вызывается действием update. Его запускает cl-update, а при синхронизации портежей — модуль синхронизации Calculate в portage: для репозиториев с sync-type = calculate он выполняет cl-core --method update --repositories <имя> --sync-only on --skip-eix-update -T none. Это «миграции»: директории с именами-датами (2026/20261103), которые применяются однократно, и типичный шаблон проверяет ревизию оверлея через ini(overlay-calculate.remerge)<#-cl_pass_file-#>. Условие ac_update_sync==on выполняется при действиях синхронизации и смены профиля, когда настраиваемый пакет не указан. Переменная принадлежит модулю update и доступна только на чтение: задать её вручную нельзя, её ставит само действие, поэтому и в заголовке её пишут вместе с модулем — env=update ac_update_sync==on, именно так устроен поставляемый каталог 6_ac_update_sync с # Calculate append=skip env=update ac_update_sync==on.

Установка и загрузка системы

События 1_ac_install_disk, 3_ac_install_live, 6_ac_install_flash, 6_ac_install_pxe — настройка устанавливаемой системы (cl-install), live-образа, загрузки с USB-Flash и по сети.

Профиль пользователя

Событие 6_ac_desktop_profile выполняется при входе пользователя в сеанс (через cl-desktop), а также при установке пакета в рабочей системе — тогда донастраивается уже созданный профиль. В этом событии участвуют переменные ur_* и путь ~, а слой clt не используется.

Конкретный конфигуратор

События 6_ac_install_configure, 5_ac_client_configure, 7_ac_server_setup — действия по типам настройки: сеть, звук, загрузчик, локаль, сессия, темы, видео (cl-setup-network, cl-setup-locale, … — см. cl-core --list-methods). Условие в шаблоне при этом обычно проверяет cl_setup==<имя> вместе с ac_install_configure==on.

Домен

5_ac_ad_client — ввод машины в домен и выход из него.

Сборка образа

6_ac_builder_* — действия сборщика (iso, squash, container, prepare, setup).

Один и тот же запуск может включить несколько событий

Это частый источник неожиданностей. Переменные ac_install_merge и ac_install_live включаются одновременно, если вы запускаете настройку пакета напрямую в уже установленной системе (cl-core-setup …, cl-setup-system): ac_install_live — не «только для LiveCD». Внутри chroot Portage (при сборке пакета) live-режим выключается, а merge остаётся. Отсюда практическое правило: если шаблон относится именно к live-образу, его нужно размещать в 3_ac_install_live и опираться на отличия окружения, а не рассчитывать, что событие «установщик».

ac_install_disk выставляется, когда действие — установка системы (и не flash/pxe).

Ручной запуск

Самый частый способ проверить свой шаблон:

cl-core-setup -n <имя-пакета>

  • -v — подробный вывод с перечнем применённых шаблонов и ошибками; для core_setup он включён по умолчанию, так что в примерах флаг можно не писать;
  • -c <категория> — категория пакета; указывать её не обязательно. Совпадения имён в разных категориях редки, и cl-core-setup -n baselayout достаточно. -c пригодится, чтобы различить такие случаи; и знайте обратную сторону: при неверной категории не применится ни один шаблон, причём без сообщения об ошибке — проверка просто покажет пустой результат;
  • --pkg-path <каталог> — направить результаты в каталог, не меняя сами конфигурационные файлы (см. предпросмотр); каталог должен существовать, иначе будет Ошибка в параметре --pkg-path. Осторожно: предпросмотр всё-таки меняет базу пакетного менеджера — наложенные пути записываются в список файлов пакета (CONTENTS) как настоящие: один такой прогон добавляет в CONTENTS несколько строк, которых в выводе equery f <пакет> не было. Перед пробой сохраните этот вывод, а после — сверьте с текущим CONTENTS и уберите появившиеся строки;
  • -T — выбрать слои шаблонов из фиксированного набора: calculate, distros, local, remote, clt; none отключает выборку вовсе.

Список доступных действий: cl-core --list-methods.

См. также