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. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
Установка CBSD
Требования
Поскольку CBSD — это лишь ряд упрощающих работу с клетками скриптов, вам подойдет любое оборудование, на котором запустится FreeBSD. Предполагается, что cbsd устанавливается на абсолютно чистую и свежеустановленную FreeBSD, поскольку настройки ряда конфигурационных файлов будут изменены. Для полноценной работы, желательно иметь:
- версию FreeBSD не ниже 10.0-RELEASE.
- архитектуру amd64, ввиду того, что разработка ведется под нее.
- файловую систему ZFS, ввиду использования предлагаемых ZFS ряда возможностей.
- ядро с поддержкой RACCT/RCTL и VIMAGE (CBSD может выкачать нужное ядро из своего репозитория с вашего согласия). Начиная с FreeBSD 11-й версии RACCT включается через настройки ядра и файл /boot/loader.conf.
Версионность cbsd
Первые две цифры версии cbsd кореллирует с версиями FreeBSD, для которых она разрабатывалась и тестировалась. Версия 10.1.3 означает, что скрипты писались и тестировались на FreeBSD 10.1. Третья цифра означает версию cbsd.
Установка и подготовка к работе
1a) Установка из портов или пакетов
CBSD можно установить через дерево портов FreeBSD:
% make -C /usr/ports/sysutils/cbsd install
или из pkg репозитория:
% pkg install cbsd
1b) Установка эксперементальной (разрабатываемой) версии CBSD из github
( Для разработчиков и контрибьюторов или тех, кто хочет воспользоваться новыми возможностями в ущерб стабильности и надежности )a) Предварительно необходимо установить необходимые зависимости: libssh2, sudo, rsync, sqlite3
% pkg install sudo libssh2 rsync sqlite3 git
или из портов:
% make -C /usr/ports/security/sudo install % make -C /usr/ports/security/libssh2 install % make -C /usr/ports/net/rsync install % make -C /usr/ports/databases/sqlite3 install % make -C /usr/ports/devel/git install
b) получить последнюю версию CBSD из github
:% git clone https://github.com/cbsd/cbsd.git /usr/local/cbsd
c) Необходимо создать пользователя cbsd (при установке из портов или пакета, этот шаг не нужен)
% pw useradd cbsd -u 150 -s /bin/sh -d /nonexistent -c "cbsd user"
d) создайте ссылки rc.d скриптов для запуска cbsd при старте системы и ссылку на модуль bsdconfig (при установке из портов этого делать ненужно):
% cd /usr/local/etc/rc.d % ln -s /usr/local/cbsd/rc.d/cbsdd % ln -s /usr/local/cbsd/rc.d/cbsdrsyncd % mkdir -p /usr/local/libexec/bsdconfig % ln -s /usr/local/cbsd/share/bsdconfig/cbsd /usr/local/libexec/bsdconfig/cbsd
initenv
2) Первичная инициализация
В классической инсталляции, cbsd содержится в двух копиях. Одна из них (/usr/local/cbsd), содержит дистрибутив, исходный код и конфигурационные файлы по-умолчанию. Также, эта копия может использоваться для управления клетками в случае, если основная копия повреждена (например некорректно обновилась и тд). Указатель того, с каким каталогом скриптов работать, является переменная окружения workdir.
Для инициализации рабочей (основной) копии cbsd, служит команда initenv, с запуском которой в первом вызове необходимо указать через переменную окружения workdir расположение рабочего каталога, а также ответить на ряд вопросов. Файловая система, куда инициализируется CBSD (а точнее, каталог jails-data в нем) должен быть достаточного объема для размещения данных клеток. Определившись с выбором где размещать рабочий каталог, первым делом укажите его в качестве домашнего каталога для пользователя cbsd (в нашем случае рабочий каталог в /usr/jails):
Инициализация с рабочим каталогом в /usr/jails:
% env workdir="/usr/jails" /usr/local/cbsd/sudoexec/initenv
# zfs create zroot/jails # zfs set mountpoint=/usr/jails zroot/jails
При первом запуске проследует диалог вопрос-ответ по основным настройкам ноды. Ожидаемые примеры ввода система пишет в качестве примера (e.g.), нажатие Enter без заполнения ввода приведет к использованию значения, предложенного в качестве примера. После каждого обновления cbsd, initenv необходимо вызывать вновь. Последующие разы initenv можно запускать через cbsd (настройка рабочего каталога сохраняется в /etc/rc.conf).
При первичной инициализации могут встретиться следующие вопросы:
- Please fill nodename — Имя ноды. Если будет работа с несколькими нодами, это имя должно быть уникальным. Рекомендуется использовать имя, аналогичное hostname. Именно это имя используется при работе с данным серверов через удаленных хосты. Пример: node1.my.domain.
- Please fill nodeip — Рабочий и постоянный IP ноды. Он не должен быть alias-ом и желательно прописывать данный IP на отдельно скоммунтированный (свободный от любого другого кроме management-трафика) интерфейс. Например: 192.168.1.2
- Please fill nodeloc — Информативная строчка. Будет использоваться в будущем в WEB интерфейсе. Здесь можно оставить информацию о географической расположенности этой ноды. Например: USA, Dallas DC.
- Please fill jnameserver — Список IP DNS серверов, устанавливаемых в /etc/resolv.conf созданных и запускаемых клеток. Если адресов несколько, они должны указываться через запятую. Рекомендуется поднимать на master-ноде DNS сервер для кеширования запросов.
- Соответственно, при использовании кеширующего DNS, если IP адрес ноды например 192.168.1.2, используйте этот адрес в jnameserver.
- Please fill nodeippool — Список подсетей, в которых дозволено запускаться клеткам. Если сетей несколько — используется пробел в качестве разделителя. Например: 10.0.0.0/24 192.168.1.128/29
- Please fill natip — Здесь необходимо ввести IP адрес, который будет выступать в качестве NAT для приватных адресов. Обычно это IP вашей ноды. Например: 192.168.1.2
- Please fill fbsdrepo — Использовать ли официальный репозиторий FreeBSD для получения base. Ожидается ответ 1 или 2. Если на серверах FreeBSD базы не обнаружено — используется репозиторий cbsd. Например: 1.
- Please fill zfsfeat — Использовать ли возможности файловой системы ZFS (клоны, снапшоты). Ожидается ответ 1 или 2. Вопроса не будет, если система запущена не на ZFS.
- Configure NAT for RFC1918 Network? — Использовать ли трансляцию приватных адресов? Если клетки создаются в RFC1918 сетях, необходимо включить. Например: 1.
- Which one NAT framework should be use: [pf or ipfw] — Какой инструмент для NAT предпочесть. Рекомендуемый — pf. Например: pf
initenv preseed
Вы можете использовать неинтерактивную инициализацию CBSD используя обычный ascii файл с заранее заготовленными ответами на вопросы. Это может быть полезно, если вам приходится это делать часто, в больших количествах, или вы встраиваете CBSD в существующую инфраструктуру по автоматическому развертыванию и конфигурируванию окружений. В качестве примера можете посмотреть на файл /usr/local/cbsd/share/initenv.conf. Для инициализации, достаточно указать путь к файлу с ответами:
/usr/local/cbsd/sudoexec/initenv /path/to/initenv.conf
initenv hooks
В момент выполнения initenv команды (необходимо выполнять ее каждый раз при обновлении CBSD), выполняются различные модификации и миграции. Вы можете встроить в этот процесс собственные скрипты и сценарии, которые выполнятся до каких-то модификаций, так и после. Это может быть удобно, например, для сценариев выполняющих резервное копирование (или эвакуацию окружений на соседнюю ноду) в качестве pre-хука и нотификацию в мониторинг или другой канал связи об успешном обновлении в качестве post-хука.
Для этого, создайте в рабочем каталоге (workdir) каталог с именем upgrade:
mkdir -p ~cbsd/upgrade
Любые скрипты, имя которых начинается с pre-initenv- или post-initenv- и имеющие исполнимый флаг будут выполнены до модицикаций initenv или послe соответственно.
Внимание: в дальнейшем, эти настройки можно изменить через команду cbsd initenv-tui или bsdconfig cbsd, либо в файле ${workdir}/var/db/local.sqlite, являющейся SQLite3 базой.