FreeBSD virtual environment management and repository

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-based платформу, перед инициализацией крайне рекомендуется создать для рабочего каталога CBSD отдельный датасет, чтобы избежать возможных конфликтов и влияний при работе различных систем автоматических снапшотов (а также, облегчить миграцию рабочего каталога CBSD на другие сервера), например:
# 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 базой.