5. Переменные шаблонов

Введение

Утилиты Calculate содержат переменные, которые могут быть использованы в шаблонах. Каждый пакет утилит добавляет свой набор переменных. Несмотря на то что переменные принадлежат разным пакетам, их имена уникальны. Для просмотра переменных и их значений используется утилита cl-core-variables-show:

# cl-core-variables-show
* Список переменных
+----------------------------------------+-----+------------+---------------------------------------------+
|Переменная                              |Режим|Расположение|Значение                                     |
+----------------------------------------+-----+------------+---------------------------------------------+
|main.ac_custom_name                     | wc  |            |''                                           |
|main.cl_action                          | rs  |            |''                                           |
|main.cl_autoupdate_set                  | wb  |   system   |off                                          |
...
|install.ac_install_configure            | rs  |            |off                                          |
|install.ac_install_disk                 | rs  |            |off                                          |
|install.ac_install_flash                | rs  |            |off                                          |
...
|update.ac_update_sync                   | rs  |            |''                                           |
|update.cl_rebuild_world_set             | wb  |            |off                                          |
|update.cl_update_rev_set                | wb  |            |off                                          |
|update.cl_update_world                  | ws  |            |''                                           |
+----------------------------------------+-----+------------+---------------------------------------------+
Здесь видно, что утилита, отобразила переменные всех пакетов. Колонка "Переменная" отображает модуль переменной и имя переменной, разделенных точкой. "Режим" состоит из двух букв:
  • доступ
    • "r" только для чтения
    • "w" поддерживает изменение
  • тип переменной
    • "s" строка
    • "b" логическая переменная (on/off)
    • "l" список
    • "t" таблица
    • "c" строка с выбором

"Расположение" указано для тех переменных, чьи значения изменяются в calculate.env файлах. Есть три места в которых можно изменять значения по умолчанию для writeable переменных: system (/etc/calculate/calculate.env), local (/var/calculate/calculate.env), remote (/var/calculate/remote/calculate.env).

"Значение" отображает содержимое переменной. Содержимое переменных не точное, так как при различных командах содержимое может изменяться (например изменение значений при указании опций команды).

С помощью параметра --filter можно задать фильтрацию выводимых переменных:
  • userset - переменные установленные в calculate.env файлах
  • writable - переменные доступные для изменения
  • system,local,remote - переменные указанные в конкретном calculate.env файле
  • часть имени переменной

Типы переменных

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

Всего существует семь типов переменных:

  1. ac - переменные выполняемых действий
  2. cl - общие настройки утилит
  3. hr - настройки оборудования
  4. ld - атрибуты LDAP
  5. os - операционная система
  6. sr - настройки сервисов
  7. ur - информация о пользователе

Для примера: переменная cl_install_autoupdate_set относится к общим настройкам утилит, принадлежит пакету calculate-install и содержит одно из двух значений - on либо off.

Переменные выполняемых действий

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

calculate-install

  • ac_install_configure - выполнение шаблонов настройки компонентов системы
  • ac_install_disk - настройки системы для загрузки с жесткого диска
  • ac_install_flash - настройка системы для загрузки с USB-Flash
  • ac_install_live - настройка пакета (динамические параметры)
  • ac_install_merge - настройка пакета (статические параметры)
  • ac_install_patch - модификация исходного кода пакета
  • ac_install_pxe - настройка PXE загрузки
  • ac_install_unmerge - настройка системы при удалении пакета

calculate-desktop

  • ac_desktop_profile - настройка пакета в профиле пользователя
  • ac_desktop_merge - настройка пакета в рабочей системе

calculate-client

  • ac_client_merge - настройка пакета в рабочей системе
  • ac_client_domain - настройка машины для работы в домене
  • ac_client_undomain - настройка машины для локальной работы

calculate-core

  • ac_custom_name - выполнение произвольного действия
calculate-builder (Утилиты Calculate 2.2)
  • ac_builder_iso - настройка ISO-образа
  • ac_builder_squash - настройка Squash-образа
calculate-assemble (Утилиты Calculate 2.2)
  • ac_assemble_prepare - первичная настройка собираемой системы
  • ac_assemble_setup - настройка системы во время сборки

События

В зависимости от событий (например, установка пакета), утилиты выставляют значения переменных действий и накладывают шаблоны.

Ниже перечислены события, а также значения переменных действий, записанные через знак двойного равенства, принятый в условных выражениях шаблонов:

Настройка системы

Выполняется во время первой загрузки системы, загрузке с LiveCD, USB-Flash или USB-HDD, при выполнении команды cl-setup-system --live.
  • ac_client_domain==on (если машина настроена на работу в домене)
  • ac_client_undomain==on (если машина настроена как локальная)
  • ac_client_merge==on
  • ac_install_live==on
  • ac_desktop_merge==on

Установка системы на жесткий диск

Выполняется при установке системы командой cl-install.
  • ac_install_merge==on
  • ac_install_live==on
  • ac_install_disk==on

Установка системы на USB-Flash

Выполняется при установке системы, если в качестве носителя используется USB-Flash cl-install.
  • ac_install_flash==on

Установка системы для загрузки по сети (PXE)

Выполняется при установке системы на сервере для загрузки по сети cl-install --pxe.
  • ac_install_pxe==on

Установка пакета

Выполняется во время установки программы emerge <название_пакета> в builder или через calculate-assemble
  • ac_install_merge==on
Выполняется во время удаления программы emerge -C <название_пакета> в builder или через calculate-assemble
  • ac_install_merge==on
  • ac_install_unmerge==on
Выполняется во время установки программы emerge <название_пакета> в рабочей системе
  • ac_install_merge==on
  • ac_install_live==on
  • ac_desktop_merge==on
  • ac_client_merge==on
  • ac_client_domain==on (если машина настроена на работу в домене)
  • ac_client_undomain==on (если машина настроена как локальная)
Выполняется во время удаления программы emerge -C <название_пакета> в рабочей системе
  • ac_install_unmerge==on
  • ac_install_merge==on
  • ac_install_live==on
  • ac_desktop_merge==on
  • ac_client_merge==on
  • ac_client_domain==on (если машина настроена на работу в домене)
  • ac_client_undomain==on (если машина настроена как локальная)

Настройка профиля пользователя

Выполняется при запуске cl-desktop <логин_пользователя> во время входа в сеанс.
  • ac_desktop_profile==up
Выполняется во время установки программы в рабочей системе emerge <название_пакета>
  • ac_desktop_profile==on

Ввод компьютера в домен

Выполняется при вводе компьютера в домен командой cl-client <host>.
  • ac_client_domain==on
  • ac_client_merge==on

Вывод компьютера из домена

Выполняется при выводе компьютера из домена командой cl-client -r.
  • ac_client_undomain==on
  • ac_client_merge==on

Подключение удаленных ресурсов домена при загрузке

Выполняется при запуске демона init.d/client во время загрузки (cl-client --mount)

  • ac_client_merge==on
  • ac_client_domain==on (если машина настроена на работу в домене)
  • ac_client_undomain==on (если машина настроена как локальная)

Обновление портежей

Выполняется после обновления портежей и оверлея командой eix-sync

  • ac_update_sync==on

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

Выполняется во время сборки пакета emerge <название_пакета> перед его компиляцией

  • ac_install_patch==on

Подготовка squash-образа (Calculate утилиты 2.2)

Выполняется перед упаковкой в Squash-образ cl-image iso или cl-image squash.
  • ac_builder_squash==up

Подготовка ISO-образа (Calculate утилиты 2.2)

Выполняется перед созданием ISO-образа командой cl-image iso.
  • ac_builder_iso==up

Подготовка к сборке дистрибутива (Calculate утилиты 2.2)

Выполняется во время подготовки к сборке дистрибутива, после распаковки Stage-образа, командой cl-assemble.
  • ac_assemble_prepare==up

Настройка системы во время сборки (Calculate утилиты 2.2)

Выполняется во время подготовки к сборке дистрибутива, после добавления оверлея calculate, командой cl-assemble.
  • ac_assemble_setup==up

Обновление системы во время сборки (Calculate утилиты 2.2)

Выполняется перед сборкой пакетов в собираемой системе, командой cl-make -u или cl-make -U.
  • ac_assemble_prepare==up
  • ac_assemble_setup==up

Произвольное событие

Выполняется при вызове команды cl-core-custom имя_события
  • ac_core_custom==имя_события

Значения переменных

Переменные могут содержать несколько типов значений:

  1. значение для подстановки используется для подстановки значения в шаблон;
    Пример:
    |main.os_locale_locale             | rs  |            |ru_RU.UTF-8                                   |
    |main.os_net_allow                 | rs  |            |10.0.0.0/24                                   |
    |main.os_net_ip                    | rs  |            |10.0.0.84                                     |
    |main.os_x11_video_drv             | rs  |            |radeon                                        |
    
  2. значение для условного выражения участвует в условных выражениях;
    Пример:
    |main.hr_video                     | rs  |            |ati                                           |
    |install.os_install_linux_system   | rs  |            |desktop                                       |
    |install.os_install_locale_language| rs  |            |ru                                            |
    
  3. информация отображает текущие настройки системы;
    Пример:
    |install.os_net_interfaces_info    | rs  |            |enp1s0 (10.0.0.84)                            |
    |main.hr_video_name                | rs  |            |Advanced Radeon HD 7540D                      |
    
  4. массив значений используется другими переменными или функциями.
    Пример:
    |install.cl_migrate_user           | wl  |            |guest                                         |
    |install.os_device_data            | rt  |            |/dev/sda,dos,hdd,0,ATA OCZ-VERTEX3,60022480896|
    |desktop.cl_desktop_online_data    | rt  |            |guest,0,6                                     |
    

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

Изменение значений переменных

При обращении к переменной ее значение определяется программой на основании настроек системы, а также значений других переменных. Значения некоторых переменных можно изменить. Такие переменные отмечены первой буквой w в поле "Режим". Остальные переменные, доступные только для чтения, отмечены первой буквой r. Пример:

|main.cl_ver                       | rs  |            |3.1.7                                         |
|install.os_install_x11_composite  | wb  |            |on                                            |

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

Изменение значения переменной в командной строке

Для изменения значений переменных используются различные параметры команд:

Например
  • для изменения cl_autopartition_root_size в команде cl-install используется опция --root-size
  • для изменения os_install_x11_video_drv в команде cl-install используется опция --video

Изменение значения через конфигурационный файл

Вы можете предопределить значения переменных в файле calculate.env. Пути к файлам находятся в переменной cl_env_path:

|main.cl_env_path                  | wl  |            |/etc/calculate/calculate.env,                 |
|                                  |     |            |/var/calculate/calculate.env,                 |
|                                  |     |            |/var/calculate/remote/calculate.env           |

Приоритет распределяется от первой к последней записи. Т.е. переменная, измененная в файле /var/calculate/remote/calculate.env, перепишет другие значения.

Пример содержимого файла calculate.env:

[install]
os_install_ntp = ntp0.zenon.net

Обратите внимание: переменная находится в секции [install], т.е. это модуль calculate-install.

Для изменения значений переменных в calculate.env файлах можно воспользоваться утилитой cl-core-variables с параметром --set. Преимущество этого способа заключается в том, что перед записью значения переменной выполняется проверка на допустимость.

Изменение значения переменной install.cl_autologin

cl-core-variables --set install.cl_autologin=guest

Изменение значения переменной install.cl_autologin в /var/calculate/calculate.env

cl-core-variables --set install.cl_autologin=guest:local

Удаление значения install.cl_autologin из calculate.env

cl-core-variables --set install.cl_autologin

Использование переменных

Переменные - основа шаблонов. Их значения настраивают систему в зависимости от текущего состояния оборудования и определяют логику работы. Здесь мы рассмотрим все случаи использования переменных.

Вставка значений в шаблон

Для вставки значения переменной в шаблон используйте конструкцию #-_имя_переменной_-# или расширенная конструкция #-_модуль.имя_перменной_-#.

Пример настройки Xorg-сервера:

Modes "#-install.os_install_x11_resolution-#" 

Необходимость указания модуля зависит от значения модуля по умолчанию. Модуль по умолчанию задается параметром env в заголовке шаблона и распространяется на все вложенные шаблоны.

Пример:

# Calculate env=install

Modes "#-os_install_x11_resolution-#" 

Передача значения функции

Значение переменной, заключенной в #--#, вычисляется и подставляется в шаблон в первую очередь. Если переменная будет записана в параметрах функции, для вычисления последней будет использоваться рассчитанное значение переменной.

Пример:

<entry name="paned_size" type="int" value="#-sum(ysize,,#-os_x11_height-# / 3)-#"/>

В примере функция sum получит три значения: параметр ysize, пустое значение и формулу для расчёта содержимого переменной os_x11_height (разрешение экрана по вертикали), поделенное на 3.

Условия в заголовках шаблонов

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

Пример заголовка шаблона с условием проверки системы:

# Calculate os_install_linux_system==server

Условные выражения

В настоящее время поддерживаются простые конструкции условных блоков. Условное выражение, состоящее из одной или более переменных (или функций), начинается с #? и заканчивается #. Далее следует блок текста, после чего завершающая конструкция из первой переменной условия, заключенной в #. Пример:

#?hr_laptop==#
numlock on
#hr_laptop#

или

#?os_locale_language==ru&&pkg(media-gfx/cldx-themes)!=#
current_theme   calculate_ru
#os_locale_language#

Во втором примере в условном выражении участвует функция pkg(), и её значение сравнивается с пустотой. Условие будет выполнено, если в системе используется русский язык и установлен пакет media-gfx/cldx-themes.

Спасибо!