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