CBSDfile продвинутые возможности
Volume-окружения
Для приложений с персистентными данными можно вынести системные каталоги в отдельные ZFS-датасеты. Это упрощает резервное копирование и миграцию.
Включение volumes
В CBSDfile:
jail_app1()
{
sysdir_volume=1
ip4_addr="10.0.0.30"
}
При sysdir_volume=1 каталог ~cbsd/jails-system/<jname> переносится в ~cbsd/VOLUMES/<jname>-system.
Прямые mount через fstab.local
Создайте файл jails-system/fstab.local в каталоге CBSDfile для определения дополнительных nullfs mount:
/data/jails/app1/data /usr/local/www/nginx nullfs ro 0 0
/data/shared/logs /var/log/myapp nullfs rw 0 0
Эти mount автоматически применяются к jail при создании.
Скелетонные каталоги (skel)
Каталог skel/ рядом с CBSDfile позволяет автоматически копировать файлы в jail при создании. Структура каталогов внутри skel/ воспроизводится в файловой системе jail.
Структура
my-jail/
├── CBSDfile
└── skel/
├── etc/
│ ├── rc.conf
│ └── ssh/
│ └── sshd_config
└── usr/
└── local/
└── etc/
└── pkg/
└── FreeBSD.conf
Файлы копируются в jail при создании. Каталог skel/ обрабатывается автоматически, явное указание в CBSDfile не требуется.
Отключение skel
jail_test1()
{
applytpl=0
}
Лабораторные среды и иерархия
Для сложных конфигураций рекомендуется использовать иерархическую структуру каталогов. Один каталог = один набор окружений (лаборатория).
Рекомендуемая структура
cbsdfile-recipes/
├── jail/
│ ├── app1/
│ │ └── CBSDfile
│ └── web/
│ └── CBSDfile
├── bhyve/
│ ├── db/
│ │ └── CBSDfile
│ └── api/
│ └── CBSDfile
└── labs/
└── lab1/
├── config # Общие переменные (IP-адреса и т.д.)
├── redisro/
│ └── CBSDfile
└── redisrw/
└── CBSDfile
Конфигурация лаборатории
В каждом CBSDfile лаборатории подключают общие переменные:
preup()
{
. ../config
}
Файл config содержит общие переменные:
REDIS_RO_IP="10.0.0.20"
REDIS_RW_IP="10.0.0.21"
REDIS_DOMAIN="lab1.example.com"
Запуск лаборатории
# Вариант 1: перейти в каталог с CBSDfile
cd cbsdfile-recipes/labs/lab1/redisro/ && cbsd up
# Вариант 2: указать путь к CBSDfile напрямую
cbsd up cbsdfile=/full-path/to/cbsdfile-recipes/labs/lab1/redisrw/CBSDfile
Иерархические категории
CBSDfile поддерживает вложенные категории. Функция вида labs_<имя>() будет создана через jcreate. Категория из имени функции определяет тип операции:
# Создаст jail через jcreate
jail_web1() { ... }
# Создаст bhyve VM через bcreate
bhyve_db1() { ... }
# Создаст jail (категория labs использует jcreate по умолчанию)
labs_test1() { ... }
Рекомендации
- Один каталог на окружение/лабораторию — группировать связанные окружения в подкаталоги.
- globals() для общих параметров — домен, сеть, VNC-бинды.
- CLI-переопределение — держать CBSDfile как шаблон, изменять через командную строку.
- Volumes для персистентных данных —
sysdir_volume=1для приложений с постоянными данными. - skel/ для статических файлов — конфигурационные файлы, скрипты, шаблоны.
- Лабораотрии для сложных наборов — подкаталоги с общей конфигурацией через
preup().