Настройка сервисов при помощи шаблонов

Внимание! Утилита находится в стадии планирования.

Введение

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

Используемые обозначения:

  • Сервис - настройки одного или нескольких пакетов, объединённые в логическое решение
  • Профиль - группа шаблонов, выполняющих настройку сервиса

В качестве примера попробуем создать профиль kernel для настройки параметров ядра. Понадобится выполнить всего три действия.

1) Создайте файл /var/calculate/ini.env со следующим содержимым:

[setup-kernel]
setup.name = Kernel settings

Этого достаточно, чтобы утилита cl-setup увидела созданный вами профиль настроек и смогла с ним работать:

# cl-setup list
...
kernel - Kernel settings

2) Теперь можно приступить к созданию шаблона настройки параметров ядра. Воспользуйтесь этой же утилитой для настройки пути для ваших шаблонов:

# cl-setup setup kernel

После выполнения команды будут созданы базовые пути и шаблоны.

3) Осталось создать шаблон настройки параметров ядра:

vi /var/calculate/templates/setup/kernel/sysctl.conf
# Calculate format=procmail path=/etc mergepkg(sys-apps/baselayout)!=
net.ipv4.ip_forward = 1

где:

  • # Calculate - обозначение строки заголовка шаблона
  • format=procmail - формат конфигурационного файла. Он должен быть указан, чтобы ваш шаблон заменял настройки, не переписывая файл полностью
  • path=/etc - путь к конфигурационному файлу
  • mergepkg(sys-apps/baselayout)!= - функция одновременно проверяет наличие пакета, для которого выполняются настройки, и закрепляет созданные файлы. Закрепление происходит на уровне пакетного менеджера: это гарантирует, что при удалении пакета созданные вами файлы будут также удалены.

Готово! Теперь для настройки параметров ядра достаточно выполнить:

cl-setup kernel

После выполнения команды в файле /etc/sysctl.conf изменится значение переменной настройки пробрасывания пакетов, а в заголовке файла появится ссылка на путь к вашему шаблону:

#------------------------------------------------------------------------------
# Modified Calculate Utilities 3.5.9
# Processed template files:
# /var/calculate/templates/setup/kernel/sysctl.conf
# For modify this file, create /etc/sysctl.conf.clt template.
#------------------------------------------------------------------------------
...
net.ipv4.ip_forward = 1

Помимо этого, при выполнении утилиты в файле /etc/calulate/ini.env будет создана запись с отметкой времени выполнения:

[setup-kernel]
run = Mon, 08 Jan 2018 02:14:36 +0300

По этой записи утилиты будут видеть, что серис kernel настроен, и использовать ваш шаблон в дальнейшем для формирования sysctl.conf во время переустановки пакета.

Этот пример описывает простой случай использования шаблонов. Далее вы узнаете, как через утилиту cl-setup передавать параметры вашим шаблонам, выполнять проверки вводимых значений или ещё более сложные настройки. Поместив шаблоны на LiveUSB или в свой профиль, вы всегда сможете воспользоваться вашим инструментарием для решения административных задач.

Профиль шаблонов

Утилита cl-setup имеет следующий синтаксис:

cl_setup [профиль] [параметр или парамер=значение разделённые пробелами]

Чтобы получить список доступных профилей, выполните:

# cl-setup list
openvpn - Настройка OpenVPN

Профили шаблонов, передаваемые параметры и условия проверки значений описываются в файле ini.env. Вы можете выбрать любой доступный путь к файлу для создания своих настроек - например, в /var/calculate/ini.env, /var/calculate/remote/ini.env, /etc/calculate/ini.env или в своём профиле.

Для создания профиля создайте секцию "setup-имя_сервиса" в файле ini.env, например:

[setup-openvpn]

Свойства передаваемых параметров

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

cl-setup help сервис

Свойства отделяются от параметра точкой, далее следует значение. Пример:

dns.name = DNS

Доступные свойства:

available

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

remote.available = [a-zA-Z0-9_-\.]

При указании выбора между двух значений on и off в графическом интерфейсе утилит будет отображено поле "checkbox". Пример:

gateway.available = (on, off)

block

Это свойство служит для предотвращения ввода блокирующих друг друга параметров, а также делает невозможным выбор параметра при определённом значении другого. В этом случае значение параметра нужно указать в круглых скобках. Можно перечислить несколько условий через запятую. Пример:

dns.block = type(client)

default

Значение поля по умолчанию. Если пользователь не указал параметр, то в него будет вписано это значение.

type.default = client

description

Краткое описание назначения настроек. Отображается при выводе справки для профиля настроек. Для локализации используйте в конце в квадратных скобках обозначение языка.

name

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

name.name[ru] = Имя ключа

separate

Описание блока параметров, начинающегося с этого элемента. Как и название параметра, может быть окализован на другие языки. Пример:

type.separate[ru] = Общие настройки

Пример профиля настройки OpenVPN

В качестве примера приведено описание сервиса настройки OpenVPN:

[setup-openvpn]
setup.name = OpenVPN setting
setup.description = ...
setup.descriopion[ru] = ...
setup.name[ru] = Настройка OpenVPN
type.available = (client, server)
type.default = client
type.name = Type
type.name[ru] = Тип
type.separate = Default options
type.separate[ru] = Общие настройки
name.available = [a-zA-Z0-9_-]
name.name = Key name
name.name[ru] = Имя ключа
easy-rsa.name = path to directory easy-rsa
easy-rsa.name[ru] = путь к директории easy-rsa
easy-rsa.default = /usr/share/easy-rsa
gateway.available = (on, off)
gateway.block = type(client)
gateway.name = Default gateway
gateway.name[ru] = Маршрут по умолчанию
gateway.separate = Server setup
gateway.separate[ru] = Настройки сервера
dns.available = {ip}
dns.block = type(client)
dns.name = DNS
remote.available = [a-zA-Z0-9_-\.]
remote.block = type(server)
remote.name = Server address
remote.name[ru] = Адрес сервера
remote.separate = Client settings
remote.separate[ru] = Настройки клиента
port.available = [0-9]{4,5}
port.block = type(server)
port.default = 1194
port.name = Port
port.name[ru] = Порт