CBSDfile хуки: pre/post действия
Типы хуков
CBSDfile поддерживает функции-хуки, которые автоматически вызываются в определённые моменты жизненного цикла:
| Хук | Когда выполняется |
|---|---|
globals() |
Перед обработкой любого окружения (общие переменные) |
preup() |
Один раз, перед началом создания всех окружений |
preup_<имя>() |
Перед созданием конкретного окружения <имя> |
postcreate_<имя>() |
После создания окружения <имя> |
postdestroy_<имя>() |
После удаления окружения <имя> |
postup() |
Один раз, после обработки всех окружений |
Порядок выполнения
globals()— общие переменныеpreup()— глобальная подготовка- Для каждого окружения:
preup_<имя>()— специфичная подготовка- Создание окружения
postcreate_<имя>()— post-install настройкаpostup()— финализация
Примеры
Подключение общей конфигурации
preup()
{
# Загрузить общий конфиг (например, IP-адреса из внешнего файла)
. ../config
}
Файл ../config может содержать переменные:
REDIS_RO_IP="10.0.0.20"
REDIS_RW_IP="10.0.0.21"
Post-install настройка внутри jail
postcreate_web1()
{
jexec jname=${jname} /bin/sh <<EOF
sysrc nginx_enable="YES"
sysrc php_fpm_enable="YES"
pkg install -y redis
service nginx start
EOF
}
Проверка зависимостей перед созданием
preup_redis1()
{
# Убедиться, что base-jail существует
if ! jstatus jname=base-jail > /dev/null 2>&1; then
echo "Создаю base-jail..."
jcreate jname=base-jail jprofile=base runasap=1
fi
}
Post-create с копированием файлов
postcreate_app1()
{
# Скопировать конфиги в jail
jscp src=./configs/nginx.conf dest=/usr/local/etc/nginx/nginx.conf jname=${jname}
# Скопировать скрипты
jscp src=./scripts/setup.sh dest=/tmp/setup.sh jname=${jname}
jexec jname=${jname} /bin/sh /tmp/setup.sh
}
Переменные внутри хуков
В теле хука доступны:
- Все переменные из globals() и <тип>_<имя>()
- $jname — имя текущего окружения
- $rc — код возврата последней операции
Команды выполнения внутри окружений
| Команда | Описание |
|---|---|
jexec jname=<имя> <команда> |
Выполнить команду внутри jail |
jscp src=<путь> dest=<путь> jname=<имя> |
Копировать файл из хоста в jail |
bexec <имя> <команда> |
Выполнить команду внутри bhyve VM (через SSH) |
bscp <имя> <путь> <путь> |
Копировать файл из хоста в bhyve VM (через SSH) |
Для bhyve VM команда bexec использует SSH. Параметр bhyve_ssh_wait (по умолчанию включён) ждёт стабилизации SSH-соединения перед выполнением.
Рекомендации
preup()— для глобальной подготовки и подгрузки общих конфигураций.postcreate_<имя>()— для post-install настройки сервисов и установки пакетов.preup_<имя>()— для проверки зависимостей и предварительной подготовки.- В
postcreateиспользуйтеjexec/bexecдля выполнения команд внутри окружения иjscp/bscpдля копирования файлов.