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() { ... }

Рекомендации

  1. Один каталог на окружение/лабораторию — группировать связанные окружения в подкаталоги.
  2. globals() для общих параметров — домен, сеть, VNC-бинды.
  3. CLI-переопределение — держать CBSDfile как шаблон, изменять через командную строку.
  4. Volumes для персистентных данныхsysdir_volume=1 для приложений с постоянными данными.
  5. skel/ для статических файлов — конфигурационные файлы, скрипты, шаблоны.
  6. Лабораотрии для сложных наборов — подкаталоги с общей конфигурацией через preup().

Связанные страницы