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

Введение

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

# cl-install -v
Список переменных library:
------------------------------ --- ----------
        Имя переменной         Режим Значение
------------------------------ --- ----------
cl_autoupdate_set              [r] off
cl_chroot_path                 [w] /
...

Список переменных install:
------------------------------ --- ----------
        Имя переменной         Режим Значение
------------------------------ --- ----------
ac_install_flash               [r] 
ac_install_merge               [r] up
ac_install_system              [r] up
cl_distfiles_path              [w] /var/calculate/remote/distfiles
cl_image                       [r] /var/calculate/remote/linux/cld-11.3-x86_64.iso
...

Здесь видно, что утилита, входящая в пакет calculate-install, отобразила переменные как самого пакета, так и пакета calculate-lib, доступные утилитам других пакетов.

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

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

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

  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_flash - настройка флешки
  • ac_install_merge - настройка пакета
  • ac_install_system - настройка системы при установке на HDD и USB-HDD
calculate-desktop
  • ac_desktop_desktop - настройка в профиле пользователя параметров, не зависимых от конфигурации системы
  • ac_desktop_live - настройка в профиле пользователя параметров, зависимых от конфигурации системы
  • ac_desktop_install - настройка пакета calculate-desktop
  • ac_desktop_merge - настройка пакета
calculate-client
  • ac_client_domain - настройка системы для работы в домене
  • ac_client_merge - настройка пакета
calculate-builder
  • ac_builder_iso - настройка iso-образа
  • ac_builder_squash - настройка squash-образа
calculate-assemble
  • ac_assemble_prepare - первичная настройка собираемой системы
  • ac_assemble_setup - настройка системы во время сборки

События

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

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

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

Выполняется во время первой загрузки системы, загрузке с LiveCD, USB-Flash или USB-HDD, при выполнении команд cl-install --startup и cl-template -l all.
  • ac_client_domain==up/down
  • ac_client_merge==up
  • ac_install_merge==up
  • ac_desktop_install==up
  • ac_desktop_merge==up

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

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

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

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

Установка системы в Builder-режиме

Выполняется при запуске cl-install --build.
  • ac_install_merge==up
  • ac_install_system==up

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

Выполняется во время установки программы emerge <название_пакета>.
  • ac_install_merge==up
  • ac_desktop_merge==up
  • ac_desktop_install==up
  • ac_desktop_desktop==up
  • ac_desktop_live==up
  • ac_client_domain==up/down
  • ac_client_merge==up

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

Выполняется при запуске cl-desktop <логин_пользователя> во время входа в сеанс.
  • ac_desktop_desktop==up
  • ac_desktop_live==up
Выполняется при запуске cl-desktop --startup <логин_пользователя> во время входа в сеанс.
  • ac_desktop_live==up

Подготовка squash-образа

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

Подготовка ISO-образа

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

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

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

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

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

Подготовка к сборке дистрибутива

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

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

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

Обновление системы во время сборки

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

Установка пакета calculate-desktop

Выполняется при установке пакета calculate-desktop командой cl-desktop --install.
  • ac_desktop_install==up
  • ac_desktop_merge==up

Установка пакета calculate-client

Выполняется при установке пакета calculate-client командой cl-client --install.
  • ac_client_domain==up/down
  • ac_client_merge==up

Удаление пакета calculate-desktop

Выполняется при удалении пакета calculate-desktop командой cl-desktop --uninstall.
  • ac_desktop_install==down
  • ac_desktop_merge==up

Удаление пакета calculate-client

Выполняется при удалении пакета calculate-client командой cl-client --uninstall.
  • ac_client_domain==down
  • ac_client_merge==up

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

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

  1. значение для подстановки используется для подстановки значения в шаблон;
    Пример:
    os_locale_locale               [r] ru_RU.UTF-8
    os_net_allow                   [r] 10.0.0.0/24
    os_net_ip                      [r] 10.0.0.131
    os_x11_video_drv               [r] radeon
    
  2. значение для условного выражения участвует в условных выражениях;
    Пример:
    cl_uuid_set                    [r] on
    hr_video                       [r] ati
    os_install_linux_system        [r] desktop
    os_install_locale_language     [r] ru
    
  3. информация отображает текущие настройки системы;
    Пример:
    os_net_interfaces_info         [r] eth0 (DHCP)
    
  4. массив значений используется другими переменными или функциями.
    Пример:
    cl_migrate_user                [r] ['root', 'guest']
    os_install_disk_format         [r] ['swap', 'reiserfs', 'reiserfs', '', 'reiserfs']
    os_install_disk_id             [r] ['82', '83', '83', '5', '83']
    os_install_disk_mount          [r] ['swap', '/', '', '', '/var/calculate']
    

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

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

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

cl_ver                         [r] 2.2.11
os_install_x11_composite       [w] off

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

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

Для изменения значения переменной используйте конструкцию --set переменная=значение.

Пример:

# cl-install -v --filter os_install_net_hostname --set os_install_net_hostname=mylinux

Список переменных install:
----------------------- --- ----------
     Имя переменной     Режим Значение
----------------------- --- ----------
os_install_net_hostname [w] mylinux

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

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

cl_env_path                    [r] ['/etc/calculate/calculate2.env', '/var/calculate/calculate2.env', '/var/calculate/remote/calculate2.env']

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

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

[install]
os_install_ntp = ntp0.zenon.net

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

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

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

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

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

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

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.

Спасибо!