-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Welcome to the qtbhyve wiki!
При работе в режиме localhost, работаем с shell/cmd командами напрямую через sudo/doas. Вариант с sudo: от пользователя требуем, что его хост имеет настройку в sudoers.d вида:
Defaults env_keep += "NOCOLOR"
Cmnd_Alias CBSD_CMD = /usr/local/bin/cbsd
xuser ALL=(ALL) NOPASSWD:SETENV: CBSD_CMD
(где 'xuser' - desktop пользователь). Таким образом, все операции с create/stop/start/destroy через CBSD начинаются всегда с одинакового префикса:
/usr/local/bin/sudo /usr/local/bin/cbsd [bcreate|bremove|bstop|bstart] ..
- пользователь, работающий с приложением, должен входить в группу 'cbsd':
% pw groupmod cbsd -m xuser
При старте приложения, необходимо 'просканировать' наличие всех необходимых команд в явно заданном PATH через утилиту which
(если есть аналог на QT - использовать нативный), а именно (аналог на shell):
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
for i in cbsd vncviewer sudo; do
_cmd=$( which $i )
[ ! -x "${_cmd}" ] && exit 1
done
Те, если нет необходимых файлов в PATH, то вывести сообщение с ошибкой об отсутствии команды и умереть.
В коде, в местах вызова внешних команд использовать realpath именно тех путей, что были получены в результате этого скана.
При старте приложения, выполнить putenv для выключения ANSII Color через переменную окружения NOCOLOR, например:
putenv("NOCOLOR=1");
При старте приложения, найти и валидировать рабочий каталог CBSD, для этого
3a) Найти рабочий каталог
a) (макс приоритет) делаем getenv на предмет наличия переменной окружения 'cbsd_workdir', если он есть - используем его как рабочий каталог b) ищем значение параметра cbsd_workdir в ASCII файле /etc/rc.conf (парамет=значение). Например запись в /etc/rc.conf может выглядеть так:
... другие строчки
cbsd_workdir="/usr/jails"
... другие строчки
c) если a/b не найдены, форсируемся в значение cbsd_workdir равное '/usr/jails';
3b) валидирировать, что этот каталог является правильным - проверить наличие файла 'nc.inventory'. Так, если cbsd_workdir='/usr/jails', то должен существовать /usr/jails/nc.inventory.
3с) если файла nc.inventory нет, прежде чем начать работу, необходимо вызвать 'extra' команду, которая рабочий каталог проинициализирует в неинтерактивном/unattended режиме:
/usr/local/bin/sudo /usr/local/bin/cbsd /usr/local/cbsd/sudoexec/initenv inter=0 /usr/local/cbsd/share/initenv.conf
- При написании функций ввести некоторый уровень абстракции, в зависимости от метода работы с CBSD, предполагаются три режима: 'cmd' (через shell команды напрямую на localhost), 'ssh+cmd' (через shell команды, но на remote host через SSH), 'api' (RestAPI)
Те, функции могут быть такого вида:
realCreateVm_cmd()
{
$cmd=SUDO_CMD . "cbsd bcreate <flavor'";
}
realCreateVm_api()
{
... curl ;)
}
createVM()
{
case 'method':
'cmd':
realCreateVm_cmd
...
'sshcmd':
realCreateVm_cmdssh
...
'api':
realCreateVm_restapi
..
}