Using templates to configure services

Note The tool is under construction.

Introduction

This manual explains how to configure services with templates. Используя одни только шаблоны, вы можете создавать различные профили настроек утилиты cl-setup для многократного использования.

Conventions:

  • Services are settings of a package or packages, combined in a logical solution
  • Профиль - группа шаблонов, выполняющих настройку сервиса

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

1) Create a file named /var/calculate/ini.env and add the following line to it:

[setup-kernel]
setup.name = Kernel settings

Now cl-setup can recognize the setup profile you submitted and handle it:

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

2) You can now prepare a template for kernel settings. Use the same tool to set the path to your templates:

# cl-setup setup kernel

Basic path and templates will be created.

3) Now create the template:

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

где:

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

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

cl-setup kernel

Once this operation is completed, the package forwarding setup variable in /etc/sysctl.conf will get a new value, while the file header will be modified to contain the path to your template:

#------------------------------------------------------------------------------
# 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 или в свой профиль, вы всегда сможете воспользоваться вашим инструментарием для решения административных задач.

Template profile

cl-setup had the following syntax:

cl_setup [profile] [option or option=value (space separated if more than one]

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

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

Template profiles, copied parameters and conditionals are described in the ini.env. file. Вы можете выбрать любой доступный путь к файлу для создания своих настроек - например, в /var/calculate/ini.env, /var/calculate/remote/ini.env, /etc/calculate/ini.env или в своём профиле.

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

[setup-openvpn]

Properties of the copied parameters

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

cl-setup help service_name

The properties are comma-separated, and followed by the value. Example:

dns.name = DNS

Available properties:

available

Here you can describe the possible values the parameter takes. В квадратных скобках можно перечислить допустимые значения, в круглых через запятую указать возможность выбора одного из значений, в фигурных - определённый тип значения, такой как IP-адрес. Example:

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

When you choose between on and off, the "checkbox" field will be displayed in the GUI client window. Example:

gateway.available = (on, off)

block

Это свойство служит для предотвращения ввода блокирующих друг друга параметров, а также делает невозможным выбор параметра при определённом значении другого. In this case, the value must be specified in curly braces. You may specify multiple conditions, comma-separated. Example:

dns.block = type(client)

default

This is the default field value. Если пользователь не указал параметр, то в него будет вписано это значение.

type.default = client

description

Brief description of the settings It is provided when help is displayed for the settings profile To localize, put the locale in brackets at the end of the line.

name

Parameter name in English To localize, put the locale in brackets at the end of the line. If you choose to localize, the English locale is also mandatory. Example:

name.name[fr] = Option

separate

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

type.separate[fr] = Options générales

Example: OpenVPN parameters profile

See below a sample OpenVPN configuration service:

[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] = Порт