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 файле
- часть имени переменной
Типы переменных¶
Для удобства в именах переменных используется обозначение типа переменной, часто используется название пакета и может использоваться тип возвращаемого значения.
Всего существует семь типов переменных:
ac
- переменные выполняемых действийcl
- общие настройки утилитhr
- настройки оборудованияld
- атрибуты LDAPos
- операционная системаsr
- настройки сервисовur
- информация о пользователе
Для примера: переменная cl_install_autoupdate_set
относится к общим настройкам утилит, принадлежит пакету calculate-install
и содержит одно из двух значений - on либо off.
Переменные выполняемых действий¶
Пакеты утилит содержат шаблоны настройки, сгруппированные по определенным действиям. Например, настройка профиля пользователя, настройка пакета при установке и т.д. Для того, чтобы определить, какие шаблоны следует накладывать, пакеты утилит содержат специальные переменные выполняемых действий.
calculate-install
ac_install_configure
- выполнение шаблонов настройки компонентов системыac_install_disk
- настройки системы для загрузки с жесткого дискаac_install_flash
- настройка системы для загрузки с USB-Flashac_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
- выполнение произвольного действия
ac_builder_iso
- настройка ISO-образаac_builder_squash
- настройка Squash-образа
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-assembleac_install_merge==on
ac_install_merge==on
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
(если машина настроена как локальная)
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
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==имя_события
Значения переменных¶
Переменные могут содержать несколько типов значений:
- значение для подстановки используется для подстановки значения в шаблон;
Пример:|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 |
- значение для условного выражения участвует в условных выражениях;
Пример:|main.hr_video | rs | |ati | |install.os_install_linux_system | rs | |desktop | |install.os_install_locale_language| rs | |ru |
- информация отображает текущие настройки системы;
Пример:|install.os_net_interfaces_info | rs | |enp1s0 (10.0.0.84) | |main.hr_video_name | rs | |Advanced Radeon HD 7540D |
- массив значений используется другими переменными или функциями.
Пример:|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
.