Жизнь файла после шаблона

Обновлено 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:

equery f sys-apps/baselayout | grep profile.d
/etc/profile.d
/etc/profile.d/editor.sh
equery b /etc/profile.d/editor.sh
sys-apps/baselayout-2.18-r1
equery b /etc/sysctl.conf
sys-apps/openrc-0.63.3
qcheck sys-apps/baselayout
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 недостаточно: созданный им конфигурационный файл останется в системе и будет числиться за пакетом. Порядок такой:

  1. замените шаблон на «удаляющий» — append=remove с теми же path=/name=, и примените настройку пакета;
  2. удалите сам шаблон;
  3. если файл принадлежал пакету, проверьте состояние: equery f <пакет>, при необходимости переустановите пакет (emerge -1a <пакет>).

См. также