Документация по системе инициализации и наложения конфигурации

Товарищи!
Подскажите, есть ли документация, объясняющая этапность наложения темплейтов, загрузки системы?

Т.е. в моём случае:

  1. Есть сервер PXE.
  2. Грузится клиент, ему подсовывается calculate-livecd
  3. Система на клиенте грузится, пытается войти в домен (настроен на PXE-сервере)
  4. Запускается КДЕ под гостем.

Читал:
http://www.calculate-linux.org/blogs/show/355

Брал оттуда темплейты. Читал на официальную документацию по темплейтам.
Как работает calculate-инициализация так и не нашёл нигде толком.

Системы на PXE на генте собирал раньше руками, проблема именно в понимании идеологии calculate.

Подскажите, пожалуйста, куда копать.

Заранее спасибо!

А что нужно настроить?

Нужно настроить PXE-сервер с доменом и вход PXE-клиентов в этот домен при старте (загрузке по сети). Настроили по документации. Клиент загружается под гостем, в домен не входит - в консоли просит пароль, хотя пароль для входа в домен указывали в настройках в файле: /var/calculate/pxe/os/cldx_13.6.1-x32/pxelinux.cfg/default
DEFAULTPARAM calculate=domain:192.168.1.17,domain_pw:XXXXXX
К указанному домену пытается подключаться, монтирует шару, но пароль всё равно запрашивает в консоли. Ну и под гостем автоматом заходит.
По ссылке:
http://www.calculate-linux.org/blogs/show/355
Описано как кое-чего побеждать наложением шаблонов. Положил эти шаблоны - они не накладываются на клиента.
ПРо шаблоны почитал, зачем они и какие они бывают - понятно. Но не понятно кем и когда они накладываются, реализация этой задумки не видна - документации нет и внятных примеров нет, либо я не нашёл.

Проблема больше в непонимании логики работы системы.
Вопрос не в нюансах настройки под конкретную задачу. Вопрос в том, чтобы понять принцип работы системы calculate, на каком этапе загрузки накладываются шаблоны, в каких ещё случаях (читал, что при preinstall ещё накладываются). Откуда всё это запускается, в какую директорию ложить нужный шаблон, чтобы он накладывался именно в нужном мне случае и т.д.
Подобной документации нет. Или я не нашёл. Какая-нибудь блок-схема с описанием была бы…

Нашёл введение в шаблоны:
http://www.calculate-linux.org/blogs/show/142
там про простые шаблоны, в примере используется утилита cl-template - у меня ни на сервере ни на клиенте - её нет.
Правда внизу приписка, что в новых версиях примеры работать не будут. Но утилита-то должна быть…

Вообще, документация, на мой взгляд, отличается множеством деталей высокого уровня и простым описанием начального уровня, а серединки - нет :frowning:
Может я плохо искал?

DEFAULTPARAM calculate=domain:192.168.1.17,domain_pw:XXXXXX

Возможность автоввода в домен сломалась из-за изменений порядка загрузки - поправим в ближайшее время.

Вообще, документация, на мой взгляд, отличается множеством деталей высокого уровня и простым описанием начального уровня, а серединки - нет :frowning:

К сожалению документация не всегда поспевает за изменениями в утилитах. cl-template давно не используется.

Вопрос в том, чтобы понять принцип работы

Шаблоны выполняются при разных событиях: настройка системы при первой загрзки/livecd (вызов в init.d/calculate), настройка пакета во время установки (cl-core-setup в profile.bashrc), настройка сеанса в момент входа пользователя в сеанс (cl-desktop), обновление настроек при обновлений портежей (cl-update в eix-sync.conf) и т.д. Выбор какие шаблоны нужно выполнять зависит от переменных ac_. Они описываются на странице http://www.calculate-linux.ru/main/ru/templates_variables, которая к сожалению устарела. В ближайшее время мы будем ее обновлять.

Спасибо за направления.
Можно ещё тогда пару вопросов?

Правильно ли я понимаю, как работает загрузка calculate по PXE:

1. Загружается ядро - ему через параметры командной строки передаются параметры домена, доменконтроллера и пароля для входа в домен
2. На этапе инициализации запускается /etc/init.d/client
Где производится монтирование удалённой директории remote, где, в том числе, лежат и темплейты “remote”.
Производится вход в домен
Производится наложение темплейтов для домена
3. После запускается calculate-core, который обеспечивает удалённое управление компьютером для админских задач

Как я понял, вход в домен осуществляется с помощью утилиты cl-client:
cl-client $SERVERLIVE
Нужные переменные берутся через
cl-core-variables-show --only-value client.$varname
При этом cl-client спрашивает пароль для входа в домен. В опциях есть опция: --domain-password, которой не передаётся параметр… Как быть?

И вопрос по системе:
Откуда переменные берёт cl-core-variables-show (он же /usr/sbin/cl-core) на этапе загрузки? Подключается к серверу calculate-core, переданном в параметрах ядру?
Кто и как забирает параметры, переданные в параметрах ядру?

Пытаюсь копать всё дальше.

В директориях с темплейтами лежат файлы, например с таким содержимым:
# Calculate append=skip ac_client_domain==up&&os_remote_auth!=

Как я понял, данные темплейты будут выполняться, только если переменная ac_client_domain=up/on

На сервере cl-core-variables-show не показывает наличие такой переменной, почему?

На коиенте она есть, но в режиме “только на чтение”. Поменять с помощью -set нельзя. Прошёлся по всем calculate.env на сервере не нашёл упоминания ac_client_domain.

Попробовал прописать в /var/calculate/remote/calculate.env в секцию client:
ac_client_domain = on
my_test_var = on

Перезагрузил клиента - но cl-core-variables-show показывает всё тоже, что и до изменения: отсутствие my_test_var и ac_client_domain=off

Куда копать?

Переменные действия только для чтения, и устанавливаются утилитами. Например переменная ac_client_domain==on будет при вводе машины в домен (cl-client ip_домена), при подключении remote (cl-client --mount), настройка пакета если машина в домене (cl-core-setup).
В последней версии утилит добавлена новая команда cl-core-custom, позволяющая выполнять шаблоны для произвольного действия. Фильтрация шаблонов производится по переменной ac_custom_name.
Например эта команда выполнит шаблоны в ветке где ac_custom_name==test

cl-core-custom test

Возможность добавлять пользовательские переменные через calculate.env пока отсутствует.

Документация по переменным действий (ac_) сейчас разрабатывается.

Здесь можно прочитать про переменные в шаблонах.

Сергей Семёнов wrote:

Попробовал прописать в /var/calculate/remote/calculate.env в секцию client:
my_test_var = on

Вы можете держать значения своих переменных в /etc/calculate/ini.env.

Например:

[mytest]
myvar = on
myvalue = Hello

И обращаться к значению через функцию ini:

 # Calculate ini(mytest.myvar)==on
#-ini(mytest.myvalue)-# world

Сергей Семёнов wrote:

На сервере cl-core-variables-show не показывает наличие такой переменной, почему?

На сервере не установлены calculate-client и calculate-desktop - они там не нужны. Во всяком случае сейчас нет возможности безболезненно вводить сервер в домен.

Понятно.
Спасибо большое! Разобрался и начал “пилить” шаблоны.
Но наткнулся на странный “баг”. Такое ощущение, что ^ обрабатывается только для первой строки:

Исходный файл /etc/test:

1test3
1test3
1test4
2test4
2test5
2test5

Накладываю шаблон:

 # Calculate format=patch 
<reg>^1</reg>
<text>odin</text>
<reg>2</reg>
<text>dva</text>

Содержимое результирующего файла /etc/test:

odintest3
1test3
1test4
dvatest4
dvatest5
dvatest5

Версия cldx-20131001-i686.iso

Файл обрабатывается как одна строка с символами перевода: “^” - начало файла, а не строки.

Mikhail Hiretsky wrote:

Файл обрабатывается как одна строка с символами перевода: “^” - начало файла, а не строки.

А разве нельзя в обработчике использовать re.MULTILINE?
Для примера:

$ python <<< 'import re; print re.search("^none.*$",open("/etc/fstab", "r").read(), re.MULTILINE).group(0)'
none    /tmp    tmpfs   nodev,nosuid,noexec,mode=01777,size=1G  0 0

против

$ python <<< 'import re; print re.search("^none.*$",open("/etc/fstab", "r").read())'
None

Просто изменить код - нельзя. Шаблоны могут отъехать из-за несовместимости. К тому же как указать начало файла, а не строки в шаблоне? В calculate-libs-3.1.7-r5 для format=patch будут добавлены две опции multiline и dotall.

http://www.calculate-linux.ru/main/ru/calculate_utilities_templates

Шаблоны могут отъехать из-за несовместимости

В таком случае - подправьте единственный шаблон в оверлее, использующий ^

$ grep -RA1 -B1 '<reg>\^' /var/lib/layman/calculate/profiles/templates/3.1/
var/lib/layman/calculate/profiles/templates/3.1/1_ac_install_disk/2-system/sys-apps/sysvinit/inittab-# Calculate format=patch
/var/lib/layman/calculate/profiles/templates/3.1/1_ac_install_disk/2-system/sys-apps/sysvinit/inittab:<reg>^#(s[01])</reg>
/var/lib/layman/calculate/profiles/templates/3.1/1_ac_install_disk/2-system/sys-apps/sysvinit/inittab-<text>\1</text>

Добавьте к нему параметр multiline
Судя по всему, сейчас этот шаблон корректно не работает

В таком случае - подправьте единственный шаблон в оверлее

Не наши шаблоны могут отъехать - а тех людей которые использует шаблоны, а именно format=patch. Поэтому стандартное поведение остается прежним.

Добавьте к нему параметр multiline

Отъедут предыдущие версии утилит они не знают ключевого слова multiline.

Mikhail Hiretsky wrote:

Просто изменить код - нельзя. Шаблоны могут отъехать из-за несовместимости. К тому же как указать начало файла, а не строки в шаблоне? В calculate-libs-3.1.7-r5 для format=patch будут добавлены две опции multiline и dotall.

http://www.calculate-linux.ru/main/ru/calculate_utilities_templates

Ну как-то это не хорошо. Есть базовые понятия регексов. Для стороннего наблюдателя - это баг, а не фича. Лично мне пришлось “поприсядать”, походить вокруг этих “грабелек” и определить, что это не я виноват, а это особая баго-фича. :slight_smile:

Так можно весь регекс переназначить, понаписать под это дело шаблонов и оставить всё как есть.

П.С. А как всё-таки в текущем положении определять начало строки?

Есть базовые понятия регексов

В любом языке multiline включается отдельной опцией. Если только оно не обрабатывает текст построчно, как например sed.

Для стороннего наблюдателя - это баг, а не фича.

Как тогда указать начало файла если ^ - начало строки?

А как всё-таки в текущем положении определять начало строки?

Обновление скоро будет, если хотите совместимости с предыдущими версиями:

 # Calculate format=patch
<reg>(^|\n)a.*</reg>
<text>\1changed</text>

Как тогда указать начало файла если ^ - начало строки?

Ну можно было добавить что-то вроде встроенных переменных из awk
к примеру <reg FNR==1 >^... для первой строки, и <reg FNR!=1 >... для остальных.
Это позволило-бы в одном шаблоне отдельно отрабатывать ситуацию с началом файла, и с началом строки. Правда, я не уверен, что парсер xml в pythonе не свихнется от таких пареметров (опять-же, обойти можно как в django FNR__gt=1).

Ну да сейчас это уже не важно. Необходимо было хоть какое-то решение этой проблемы.

Сейчас решение есть, зная работу python-а с регекспами, понять принцип этого формата несложно.

Наличие dotall тоже будет полезно, позволит работать с конфигами с многострочными параметрами, к примеру как в postfix-е.

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