Жизнь файла после шаблона
Обновлено 6 ноября 2026
Шаблон не просто пишет файл: он связывает его с пакетом, помечает источником и берёт на себя ответственность при последующих наложениях. Отсюда несколько правил, которые экономят нервы.
Служебный заголовок
В начале файла, созданного шаблоном, утилиты пишут блок вида:
#------------------------------------------------------------------------------ # Modified Calculate Utilities 3.7.6.8 # Processed template files: # /var/calculate/templates/merge/editor.sh # To modify this file, create a /etc/profile.d/editor.sh.clt template. #------------------------------------------------------------------------------
Три его назначения. Он говорит, какие шаблоны участвовали в создании файла (при объединении нескольких это единственный способ понять происхождение). Он подсказывает правильный способ что-то поправить — создать .clt-шаблон, а не редактировать файл руками. И по нему утилиты при следующем наложении узнают свою часть и вырезают её, чтобы не накапливать копии: поэтому символ из comment= обязан быть комментарием для целевой программы, иначе файл станет нечитаемым.
Файл принадлежит пакету
Файл, созданный шаблоном, привязанным к пакету (mergepkg(), pkg(), <категория>/<пакет>/…), регистрируется в списке файлов пакета. Проверить можно обычными средствами Portage:
/etc/profile.d /etc/profile.d/editor.sh
sys-apps/baselayout-2.18-r1
sys-apps/openrc-0.63.3
Checking sys-apps/baselayout ... MTIME: /etc/mtab * 41 out of 42 files are good Последняя строка — итоговое соотношение: какие именно файлы окажутся в списке расхождений и каким будет это число, зависит от того, какие шаблоны налагались на системе и что менялось вручную. Ориентироваться нужно не на число, а на перечень путей: они и говорят, куда смотреть.
Обратите внимание на вывод equery b /etc/sysctl.conf: принадлежность файла определяет, к какому пакету должен быть привязан ваш шаблон, — для /etc/sysctl.conf и файлов в /etc/sysctl.d это sys-apps/openrc, а не sys-apps/baselayout. Строка MTIME: /etc/mtab расхождениями не считается: этот файл меняется при загрузке системы.
Хорошая новость: вам не нужно «обманывать» пакетный менеджер — корректный шаблон сам делает файл легальным. Если же qcheck выдаёт расхождение, а файл создан вами, значит он появился вне связи с пакетом (например, «сырой» шаблон без mergepkg() при настройке всей системы) — разберитесь с привязкой, а не чините контрольные суммы.
Защита файла и обновление настроек
- protected — файл не удаляется при удалении пакета, которому он принадлежит. Используется для настроек, ценность которых переживает пакет (например, ключи, кэши, файлы, созданные при установке).
- autoupdate — при установке пакета изменённый конфигурационный файл переносится в систему сразу; без него изменение остаётся в «ожидающих» и применяется через
dispatch-conf(cl-dispatch-conf), где вы сами решаете, что принять. Если в системе уже существует изменённый вами файл пакета, он не будет заменён молча — для этого и предназначенdispatch-conf. - force — удалять существующий файл перед записью; включается автоматически вместе с symbolic.
- mirror — объединять только если конфигурационный файл уже существует; если цель задана через link= и её нет, файл удаляется. Удобно для шаблонов, которые должны «подтянуться» за реальным файлом, но не создавать его с нуля.
- chmod=, chown= — права и владелец результата; если не указаны, используются права шаблона (или оригинала, если он был).
Когда нужно удалить или «очистить»
- append=remove — удаляет файл (для директории — директорию с содержимым). Это штатный способ убрать то, что больше не нужно: удалённый шаблон сам ничего не удаляет в системе.
- append=clear — обнуляет файл (длина 0); для директории — удаляет всё её содержимое, оставляя саму директорию.
Значения append=delete не существует; всё удаление описывается этими двумя способами вместе с remove/clear.
Как правильно убрать свой шаблон
Просто удалить файл из /var/calculate/templates недостаточно: созданный им конфигурационный файл останется в системе и будет числиться за пакетом. Порядок такой:
- замените шаблон на «удаляющий» — append=remove с теми же path=/name=, и примените настройку пакета;
- удалите сам шаблон;
- если файл принадлежал пакету, проверьте состояние:
equery f <пакет>, при необходимости переустановите пакет (emerge -1a <пакет>).
См. также
- Шаблон рядом с файлом: .clt
- Директории-шаблоны и слои хранения
- Синтаксис шаблона — параметры защиты и объединения.