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. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
Конфигурации клетки
Команда jconfig, jset
% cbsd jconfig % cbsd jset
Описание:
Конфигурирование параметров jail
Каждая клетка CBSD хранит настройки в SQLite3 базе. Помимо этого, в каталоге $workdir/jails-fstab/ могут быть fstab файлы (см. ниже). Для изменения настроек клетки может служить команда cbsd jconfig, запускающая TUI меню для изменения основных параметров.
IP адреса клеток
IP адреса, которые привязываются к клетке, указываются в параметре ip4_addr. В качестве IP могут выступать как IPv4, так и IPv6 адреса. При запуске и останове клетки, работа с IP может проходить в двух режимах:
- автоматическое создание на-лету IP адресов для клетки в момент запуска и автоматическое удаление IP с интерфейса при останове
- использование ранее иницииализированных IP адресов.
Если клетке назначаются более одного адреса, они должны быть указаны через запятую без пробелов. IP могут содержать префикс сети, указанный через IP/prefix. По-умолчанию, alias создается с префиксом /32, что может не подходить, если jail использует подсеть отдельную от сети сервера — в этом случае, корректный /prefix необходим.
interface является параметром, который управляющий этим поведением. Если он установлен в значение 0, то при jstart и jstop не будут вызываться ifconfig alias и ifconfig -alias соответственно. Если его значение равно auto или имени физического интерфейса (например bce0), то перед запуском клетки будет вызвана команда
% ifconfig interface ips alias
а при остановке —
% ifconfig interface ips -alias
Будьте предельно аккуратны с этим параметром. Если в наличие есть только 1 IP сервера, который используется и основной системой и этот же IP назначается клетке, убедитесь, что interface выставлен в значение 0, иначе при остановки клетки, единственный ip адрес сервера будет удален автоматически и сервер станет недоступен. Например, чтобы запустить конфигуратор для клетки jail1, выполните:
% cbsd jconfig jname=jail1
Монтирование файловых систем в jail
Каждый jail может иметь свой fstab файл, в котором перечисляются файловые системы, монтирующиеся в jail при запуске клетки. Системные записи (ими управляет CBSD и править этот файл ненадо) располагаются в файле $workdir/jails-fstab/fstab и совпадает по синтаксису с форматом системного файла /etc/fstab с тем исключением, что в качестве точки монтирования указывается путь относительно корня JAIL, а не мастер системы. Для пользовательских записей, вы можете использовать файл в том же каталоге с расширением .local. Например, если вы хотите сделать между клетками jail1 и jail2 один общий каталог (через nullfs), который физически расположен в мастер ноде (например /home/sharefs), в файлах $workdir/jails-fstab/jail1/fstab.local и $workdir/jails-fstab/jail2/fstab.local должна присутствовать строчка:
/home/sharefs /home/sharefs nullfs rw 0 0
если вы хотите смонтировать в каталог /tmp клетки jail1 tmpfs (те, фактически в /usr/jails/jails/jail1/tmp), то запись в $workdir/jails-fstab/jail1/fstab.local должна выглядить так:
tmpfs /tmp tmpfs rw 0 0
обе записи выполняют действие, аналогичное командам:
mount -t nullfs -o rw /home/sharefs /jailroot/home/sharefs mount -t tmpfs -o rw tmpfs /jailroot/tmp
Если вы хотите смонтировать в jail2 каталог из jail1, путь к jail1 должен указывать на каталог содержащий данные jail1 (а их точки монтирования ${workdir}/jails/jail1). Например запись в $workdir/jails-fstab/jail2/fstab.local:
/usr/jails/jails-data/jail1-data/usr/local/www /usr/local/www nullfs ro 0 0
Сделает каталог /usr/local/www между jail1 и jail2 общим, но в jail2 он будет в режиме read-only
Бывают случаи, когда монтирование через mount -t /type/ не работает или монтирование должно происходить нестандартным способом. В этом случае используйте зарезервированное слово 'external', где поле 'source' будет указывать на ваш внешний скрипт, результат работы которого должен быть смонтированный каталог.
Пример такой записи в fstab.local:
/root/ntfs-3g.sh /home/web/downloads external rw 0 0
и пример рабочего скрипта /root/ntfs-3g.sh для этой записи: ntfs-3g.sh, который монтирует внешний USB-диск напрямую в.
Презентация ZFS файловых систем в jail
Если вы хотите привязать отдельные ZFS файловые системы в jail ( тоесть, хотите иметь возможности внутри jail выполнить zfs mount ), список ZFS необходимо перечислить в $workdir/jails-fstab/$jnamefstab.local файле, указав в поле FStype ключевое слово zfs. Например, если вы хотите презентовать файловую систему ZFS: zroot/jail1_webfs для клетки jail1, запись в $workdir/jails-fstab/jail1/fstab.local должна выглядеть так:
zroot/jail1_webfs /home/web zfs rw 0 0
Примечание: точка монтирования (/home/web в данном примере) роли не играет
Примечание2: клетка должна иметь параметр allow_zfs установленным в 1, что можно сделать через cbsd jconfig jname=$jname
Фактически, это заставляет CBSD выполнить команды:
% zfs set jailed=on $FS % zfs jail $jname $FS
при старте клетки, и
% zfs set jailed=off $FS % zfs unjail $jname $FS
при ее остановке.
Изменение параметров через jset
Другая возможность изменить определенные параметры клетки — воспользоваться командой cbsd jset Полный список возможных аргументов можно получить через --help:
% cbsd jget --help
Например, поменять ip адрес для клетки jail1:
% cbsd jset jname=jail1 ip4_addr="10.0.0.20/24,192.168.0.20/24"
cbsd jconfig jname=jail2
cbsd jset
Пользовательские скрипты при запуске и останове клеток
Вы можете написать собственные сценарии, которые будут выполняться внутри клетки и в мастер-хосте при запуске и останове клетки. Для этого, в системном каталоге клетки ( $workdir/jails-system/$jname/ ) имеются следующие каталоги:
- master_poststart.d - скрипты для отработки в мастер-хосте после того, как jail запустится (будьте аккуратны, поскольку скрипты выполняются не в окружении)
- master_poststop.d - скрипты для отработки в мастер-хосте после того, как jail остановится (будьте аккуратны, поскольку скрипты выполняются не в окружении)
- master_prestart.d - скрипты для отработки в мастер-хосте до того, как jail запустится (будьте аккуратны, поскольку скрипты выполняются не в окружении)
- master_prestop.d - скрипты для отработки в мастер-хосте после того, как jail остановится (будьте аккуратны, поскольку скрипты выполняются не в окружении)
- start.d - скрипты для отработки внутри клетки при ее запуске. Аналог параметра exec.start оригинального jail.conf
- stop.d - скрипты для отработки внутри клетки при ее останове. Аналог параметра exec.stop оригинального jail.conf
- remove.d - (с версии CBSD 11.0.10) скрипты отработают при удалении окружения
Писать скрипты для master_\* каталогов может быть полезно, если при старте-останове клеток вам необходимо выполнить какой-то действие не связанное с самим окружением в клетке - например, создать ZFS снапшот, поставить счетчики в IPFW и т.п.
Пример скрипта, который перед запуском клетки с именем asterisk проверяет не изменился ли один из IP-адресов, выдаваемый по DHCP от провайдера.
#!/bin/sh iface="vlan200" ufanetip_from_dhcp=$( ifconfig ${iface} | awk '/inet /{print $2}' ) current_asterisk_jail_ip=$( /usr/local/bin/cbsd jget mode=quiet jname=${jname} ip4_addr | cut -d, -f2 ) if [ "$ufanetip_from_dhcp" != "$current_asterisk_jail_ip" ]; then echo "Setting NEW Ufanet IP from DHCP!!!!" echo "Current ip4_addr setting in ${jname} jail is: 192.168.1.250,$ufanetip_from_dhcp" /usr/local/bin/cbsd jset jname=${jname} ip4_addr="192.168.1.250,$ufanetip_from_dhcp" fi
В скриптах вы можете использовать переменные CBSD, такие как $jname, $path, $data, $ip4_addr, например, поместив такой скрипт (с правами на выполнение) в /usr/jails/jails-system/jail1/master_poststart.d/notify.sh:
#!/bin/sh echo "Jail $jname started with $ip4_addr IP and placed on $path path" | mail -s "$jname started" root@example.net
Вы будете получать уведомление по факту запуска клетки на email: root@example.net
Функционал запуска пользовательских скриптов и доступность переменных в окружениях может играть большую роль при интеграции CBSD и внешних приложений, таких как Consul
В качестве примера использования, посмотрите статьи:
Очередность запуска клеток
В CBSD имеется возможность указать, в какой последовательности будут запускаться клетки. Например, вы можете пожелать, чтобы клетка mysqljail и redisjail стартовали раньше чем wwwjail. Данный функционал реализует cbsd jorder и регулируется в настройке каждой клетки.
//продолжение следует