FreeBSD virtual environment management and repository

2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !

Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.

Как работает хелпер для CBSD образа

Команда imghelper

			% cbsd imghelper
		
Описание:

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

Поскольку большая часть модификаций связана с персональными данными ( пароли, имена пользователей или доменов, название баз и тд ), до отработки сценария должны быть получены все необходимые для работы параметры

Начиная с версии CBSD 10.1.0, диалог ввода настроек выполняет скрипт imghelper, который берет параметры для построения форм из SQLite3 базы, идущей вместе с клеткой

В данном документе рассмотрим построение классического dialog-based меню

Схема SQL файла форм следующая (описываемый формат используется для отработки CBSD updatesql:

CREATE TABLE forms (  idx INTEGER PRIMARY KEY AUTOINCREMENT, param TEXT DEFAULT NULL UNIQUE, \
desc TEXT DEFAULT NULL, defaults TEXT DEFAULT NULL, mandatory INTEGER DEFAULT 0, \
attr TEXT DEFAULT NULL, xattr TEXT DEFAULT NULL  );
		

Где:

  • forms - это константа, имя таблицы, которое imghelper будет искать при открытии файла форм
  • idx - индекс таблицы. При построении форм не используется
  • param - Произвольное имя аргумента (обычно - одно слово), параметра, значение которого мы должны получить
  • desc - Произвольное описание для аргумента
  • defaults - Предлагаемое значение по-умолчанию. Может быть пустым.
  • mandatory - boolean (0,1), признак обязательности. Если параметр обязательный, запуск сценария будет невозможен при пустом значении аргумента
  • attr - Системное поле для различных атрибутов, в данной версии/документации его использовать не будем
  • xattr - Системное поле для различных атрибутов при построении WEB/HTML форм, в данной версии/документации его использовать не будем

Например, для wordpress из CBSD repo генерация базы происходит так: initforms.sh

При запуске cbsd imghelper указывается путь к файлу (при получении имиджа через cbsd repo, данная операция происходит автоматически).

Существует три способа ввода необходимых параметров cbsd imghelper перед тем, как она запустит сценарий установки:

  • Интерактивный режим: используется dialog для отрисовки UI, параметров и полей для ввода. По заполнению которых, кнопка "COMMIT" инициализирует установочный сценарий
  • Интерактивный и не интерактивный, способ 1: указать значения параметров в командной строчке: cbsd imghelper param1=val1 param2="this is arg for param2" ... В этом случае, если все поля имеют значения, сценарий запустится автоматически
  • Интерактивный и не интерактивный, спобоб 2: указывать значения параметров через переменную окружения вида H_param. Данный способ также может кобминироваться с интерактивным режимом, когда переменные окружения будут выступать в качестве "перезаписываемых" или значений по-умолчанию в диалоге, позволяя тем самым строить частично заполненные формы

Не интерактивные режимы полезны для инсталляции клетки в автоматическом режиме, без прерывания на ввод

Практический пример

Создадим файл с формой для ввода 4-х параметров: username, password, dns1, dns2. Для этого, создадим пустую таблицу в файле /tmp/forms.sqlite:

% sqlite3 /tmp/forms.sqlite
sqlite> CREATE TABLE forms (  idx INTEGER PRIMARY KEY AUTOINCREMENT, \
param TEXT DEFAULT NULL UNIQUE, desc TEXT DEFAULT NULL, defaults TEXT DEFAULT NULL, \
mandatory INTEGER DEFAULT 0, attr TEXT DEFAULT NULL, xattr TEXT DEFAULT NULL  );
sqlite> ^D
		

Заполним таблицу необходимыми нам параметрами

% sqlite3 /tmp/forms.sqlite << EOF
INSERT INTO forms ( param,desc,defaults,mandatory,attr ) VALUES ( "username","Please enter user name","oleg",1, "maxlen=10" );
INSERT INTO forms ( param,desc,defaults,mandatory,attr ) VALUES ( "password","Please enter password","",1, "maxlen=15" );
INSERT INTO forms ( param,desc,defaults,mandatory,attr ) VALUES ( "dns1","Please enter DNS1","8.8.8.8",1, "maxlen=15" );
INSERT INTO forms ( param,desc,defaults,mandatory,attr ) VALUES ( "dsn2","Please enter DNS2","",1, "maxlen=15" );
EOF
		

Как видим, все поля являются обязательными. При этом, значение параметров username и dns1 по-умолчанию предопределено и предлагается равным oleg и 8.8.8.8 соответственно

Запускаем imghelper и видим наши поля:

% cbsd imghelper /tmp/forms.sqlite
		

Также, мы можем заранее определить параметры через командную строчку (предварительно получив имена переменных через --help):

% cbsd imghelper /tmp/forms.sqlite --help
[sys] Ncurses-based jail image boostrap helper
require: formfile
opt:  username password dns1 dsn2
External help: /usr/local/share/doc/cbsd/wf_imghelper.html
		% cbsd imghelper /tmp/forms.sqlite username=gelo dns1="1.2.3.4"
		

И наконец, можем просто использовать переменные окружения:

% setenv H_username root
% setenv H_password strong_plain_text_password
% setenv H_dns1 192.168.1.1
% setenv H_dsn2 10.0.0.1
% cbsd imghelper /tmp/forms.sqlite