Настройка сервисов при помощи шаблонов
Внимание! Утилита находится в стадии планирования.
Введение
В данном руководстве описан механизм настройки сервисов при помощи шаблонов. Используя одни только шаблоны, вы можете создавать различные профили настроек утилиты 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] = Порт