Management and Repository for FreeBSD Jails

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

Конфигурации клетки

Команда 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.name и совпадает по синтаксису с форматом системного файла /etc/fstab с тем исключением, что в качестве точки монтирования указывается путь относительно корня JAIL, а не мастер системы. Для пользовательских записей, вы можете использовать файл в том же каталоге с расширением .local. Например, если вы хотите сделать между клетками jail1 и jail2 один общий каталог (через nullfs), который физически расположен в мастер ноде (например /usr/home/sharefs), в файлах $workdir/jails-fstab/fstab.jail1.local и $workdir/jails-fstab/fstab.jail2.local должна присутствовать строчка:

                        /usr/home/sharefs /usr/home/sharefs nullfs rw 0 0
                

если вы хотите смонтировать в каталог /tmp клетки jail1 tmpfs (те, фактически в /usr/jails/jails/jail1/tmp), то запись в $workdir/jails-fstab/fstab.jail1.local должна выглядить так:

                        tmpfs /tmp tmpfs rw 0 0
                

Если вы хотите смонтировать в jail2 каталог из jail1, путь к jail1 должен указывать на каталог содержащий данные jail1 (а их точки монтирования ${workdir}/jails/jail1). Например запись в $workdir/jails-fstab/fstab.jail2.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

Презентация ZFS файловых систем в jail

Если вы хотите привязать отдельные ZFS файловые системы в jail ( тоесть, хотите иметь возможности внутри jail выполнить zfs mount ), список ZFS необходимо перечислить в $workdir/jails-fstab/fstab.$jname.local файле, указав в поле FStype ключевое слово zfs. Например, если вы хотите презентовать файловую систему ZFS: zroot/jail1_webfs для клетки jail1, запись в $workdir/jails-fstab/fstab.jail1.local должна выглядеть так:

                        zroot/jail1_webfs /usr/home/web zfs rw 0 0
                

Примечание: точка монтирования (/usr/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

Писать скрипты для master_\* каталогов может быть полезно, если при старте-останове клеток вам необходимо выполнить какой-то действие не связанное с самим окружением в клетке - например, создать ZFS снапшот, поставить счетчики в IPFW и тп

В скриптах вы можете использовать переменные 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" [email protected]
                

Вы будете получать уведомление по факту запуска клетки на email: [email protected]

Очередность запуска клеток

В CBSD имеется возможность указать, в какой последовательности будут запускаться клетки. Например, вы можете пожелать, чтобы клетка mysqljail и redisjail стартовали раньше чем wwwjail. Данный функционал реализует cbsd jorder и регулируется в настройке каждой клетки.

//продолжение следует