Введение в шаблоны Calculate 2.2 часть 2 - Clt и autoupdate

В анонсе Calculate Linux 10.9 среди возможностей написано:

  • Автонастройка конфигурационных файлов новых версий пакетов в процессе установки с возможностью автозамены.

Давайте попробуем разобраться, каким образом мы можем сохранить свои настройки в текущей системе, а также использовать их при установке образа с обновлением.

В статье Будущий Calculate Linux 10.11 я вкратце упомянул, что за обновление настроек отвечают утилиты Calculate 2. Причем делают это таким образом, что вновь созданные конфигурационные файлы и директории также начинают принадлежать устанавливаемому пакету. Изменив значение переменной cl_autoupdate_set, можно применять новые файлы настроек непосредственно во время установки пакетов.

Для начала посмотрим, какие файлы были изменены утилитами в вашей системе в директории /etc, выполнив команду:

grep -r "Calculate-" /etc

Для примера откроем файл /etc/conf.d/splash. Ниже приведена часть конфигурационного файла:

#------------------------------------------------------------------------------
 # Modified Calculate-install 2.2.0.0
 # Processed template files:
 # /usr/share/calculate/templates/install/merge/splashutils/conf.d/splash
#------------------------------------------------------------------------------
 # Config file for splashutils.

 # Boot/reboot/shutdown message overrides.
 # SPLASH_BOOT_MESSAGE="Booting the system (\$progress%)"
 # SPLASH_REBOOT_MESSAGE="Rebooting the system (\$progress%)"
 # SPLASH_SHUTDOWN_MESSAGE="Shutting the system down (\$progress%)"

 # Should we drop to verbose mode on initscript errors? (yes/no)
SPLASH_VERBOSE_ON_ERRORS="no"

 # Which special effects should be used?
 # This should be a comma separated list. Valid items: fadein, fadeout
SPLASH_EFFECTS="fadein,fadeout"
...

В заголовке файла приведена ссылка на шаблон, при помощи которого были выполнены настройки. Просмотрим его, выполнив
cat /usr/share/calculate/templates/install/merge/splashutils/conf.d/splash:

 # Calculate format=procmail
SPLASH_VERBOSE_ON_ERRORS="no"

Как видите, целью шаблона было убрать отключение заставки во время загрузки при выводе предупреждающего сообщения. Выбрав подходящий формат конфигурационного файла, можно изменять только необходимые параметры, не копируя весь файл настроек целиком.

Теперь давайте проверим, как будет работать функция генерации и автообновления настроек.

Изменим содержимое файла /etc/conf.d/splash так, чтобы emerge сгенерировал для него новый конфигурационный файл. Как вариант, вернем оригинальное значение переменной SPLASH_VERBOSE_ON_ERRORS:

SPLASH_VERBOSE_ON_ERRORS="yes"

Теперь посмотрим, какому пакету принадлежит файл и пересоберем его:

 # equery b /etc/conf.d/splash
[ Searching for file(s) /etc/conf.d/splash in *... ]
media-gfx/splashutils-1.5.4.3-r3 (/etc/conf.d/splash)
 # emerge splashutils

Затем выполним dispatch-conf:

 # dispatch-conf
--- /etc/conf.d/splash  2010-10-18 11:41:16.005000312 +0400
+++ /etc/conf.d/._cfg0000_splash        2010-10-18 11:43:27.000000000 +0400
@@ -11,7 +11,7 @@
  # SPLASH_SHUTDOWN_MESSAGE="Shutting the system down (\$progress%)"

  # Should we drop to verbose mode on initscript errors? (yes/no)
-SPLASH_VERBOSE_ON_ERRORS="yes"
+SPLASH_VERBOSE_ON_ERRORS="no"

  # Which special effects should be used?
  # This should be a comma separated list. Valid items: fadein, fadeout

>> (1 of 1) -- /etc/conf.d/splash
>> q quit, h help, n next, e edit-new, z zap-new, u use-new
   m merge, t toggle-merge, l look-merge:  

Как видите, определив что файл настроек изменен, утилита emerge сгенерировала файл с новыми настройками /etc/conf.d/._cfg0000_splash. Нажмем "u" для использования нового файла настроек. Повторное выполнение dispatch-conf обновлений уже не выявит.

Теперь давайте проверим, как работает функция автозамены. Изменим значение переменной на cl_autoupdate_set на on в файле /etc/calculate/calculate2.env. Также изменим SPLASH_VERBOSE_ON_ERRORS на значение yes в файле /etc/conf.d/splash. И выполним переустановку пакета командой emerge splashutils.

Выполнение команды dispatch-conf уже не покажет обновлений. Открыв файл /etc/conf.d/splash вы увидите, что ваше изменение в настройках заменено утилитами:

SPLASH_VERBOSE_ON_ERRORS="no"

Каким образом следует изменять настройки в системе? При помощи ваших шаблонов. Для шаблонов вы можете использовать директорию /var/calculate/templates, как это было описано в первой части статьи. Здесь же я опишу более удобный способ, используя шаблоны ‘clt’.

Шаблоны ‘clt’ призваны упростить настройку системы, т.к. они размещаются непосредственно в файловой системе вместе с оригинальными файлами настроек, отличаясь от них только расширением ‘.clt’. Шаблоны ‘clt’ отличаются от прочих предустановленным значением параметра name, который равен имени шаблона без расширения ‘clt’. Также по умолчанию такой шаблон будет обрабатываться пакетом calculate-install, со своим набором переменных.

Создадим файл /etc/conf.d/splash.clt, взяв за основу оригинальный шаблон:

cp /usr/share/calculate/templates/install/merge/splashutils/conf.d/splash /etc/conf.d/splash.clt

Исправим значение переменной SPLASH_VERBOSE_ON_ERRORS на yes после чего переустановим пакет выполнив emerge splashutils.

Поскольку значение переменной cl_autoupdate_set по прежнему в значении on, выполнение команды dispatch-conf не даст результата. Открыв файл /etc/conf.d/splash убедимся что значение SPLASH_VERBOSE_ON_ERRORS установлено в yes!

При обновлении системы из ISO образа шаблоны ‘clt’ будут участвовать в её настройке. Они будут также перенесены в новую систему программой установки.

часть 1

Спасибо за огромную проделанную работу.

Это должно реально упростить автоматическое развертывание необходимой системы на новых компах.
Только есть пару вопросов:

  • Насколько я понимаю, шаблоны накладываются при сборке системы (на этапе emerge), в связи с этим такой вопрос - на каком этапе накладываются шаблоны, надеюсь на этапе pkg_postinst? Просто это даст возможность создавать ванильные пакаджи и при разворачивании из них на разных машинах будут накладываться разные шаблоны.
  • В случае если шаблон для определенного файла в /usr/share/calculate/templates/ уже существует, пользовательский шаблон будет накладываться до/после/вместо него? Если до/после, существует ли возможность отменить наложение дефолтного шаблона?
  • Есть ли в планах ведение списка внесенных изменений при наложении шаблонов? Нечто вроде diff с оригиналом, чтоб при желании легко можно было отменить шаблон.

есть мысли по поводу отмены шаблона

можно создать свой шаблон (или шаблон шаблона если хотите) удаляющий шаблон.

т.е. при установке sys-apps/calculate применится шаблон шадлона и удалит/изменит шаблон который нам не по душе.
К примеру в шаблоне для /usr/share/hal/fdi/policy/10osvendor/10-x11-input.fdi отменит переключение языков по CapsLock

ИМХО подход немного дикий, но довольно надежный.

# Шаблоны накладываются на этапе preinst. Это позволяет очень тесно интегрироваться с ebuild-ом, выдавая создаваемые и модифицируемые Вами файлы за оригинальные.
# Пользовательские шаблоны выполняются также на этапе preinst после шаблонов программы. Используются сперва шаблоны из директории /var/calculate/templates, затем /var/calculate/remote/templates и в конце clt-шаблоны. Выборочно отменять выполнение определенных шаблонов программы нет возможности. Можно лишь отключить пакет из автообновления, отредактировав содержимое переменной cl_merges файла /etc/calculate/calculate2.env (команда cl-install --live вернет его на место). Проще модифицировать конечные настройки. Например Вам ничего не мешает не только менять значения файлов, но и переписывать их, либо удалять (см. append=remove).
# Как минимум есть желание бэкапить старые настройки. Насчёт diff-ов пока не знаю.