2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
Сборка и обновление базы
Команды
% cbsd srcup % cbsd buildworld % cbsd installworld % cbsd world % cbsd bases % cbsd removebase
Общая информация
Примечание: под словом "база" будет подразумеваться каталог, содержащий полную копию/иерархию файлов ОС FreeBSD.
Каталог для базы расположен в каталоге ~cbsd/basejail/ и имеет вид base_'arch'_'target_arch'_'ver', например: /usr/jails/basejail/base_amd64_amd64_11.1
Вы можете просмотреть зарегистрированные в CBSD базы и их версии через команду:
% cbsd bases
Для создания новой клетки (или запуска клетки, база которой монтируется в RO), необходима готовая база, из которой будет собран новый jail (или которая будет подмонтирована при запуске клетки).
Если вы создали контейнер и базовые файлы отсутствуют, при запуске CBSD автоматически предложит несколько вариантов получения базы на ваш выбор, это:
- Скачать архив базы по сети. В зависимости от настройки fbsdrepo в initenv-tui, по-умолчанию будет использоваться ТОЛЬКО официальный репозиторий FreeBSD, либо сначала репозиторий проекта CBSD и если на нем архив отсутствует - официальный репозиторий FreeBSD
- Если вы создаете контейнер такой же архитектуры и версии, что и ваща хостер система, CBSD может обойтись без скачивания по сети и без компиляции, построив копию базы из ваших файлов
- Получить базу через распаковку .txz архива. В этом случае, вы указываете путь где расположен архив
- Скомпилировать базу самостоятельно, запустив последовательность команд: cbsd srcup и cbsd world. Это очень долгий процесс.
Таким образом, вы регулируете откуда и как будут получены файлы, в зависимости от уровня вашего доверия и требованиям к безопасности
Ниже описаны шаги для получения исходных кодов FreeBSD из SVN репозитория проекта (http://svn.freebsd.org), его компиляция и инсталляция в отдельный каталог, который будет выступать базой. Данные действия могут быть востребованы, если вы не хотите пользоваться уже собранной версией, доступной на ресурсах ftp://ftp.freebsd.org и http://bsdstore.ru (например по причинам безопасности), которые можно получить через cbsd repo. Также, сборкой можно получить не только релизы, но и промежуточные варианты веток.
Источники и конфигурация получения базы
Начиная с версии CBSD 12.0.4, вы можете регулировать метод получения базы по-умолчанию и настраивать источники. Конфигурационный файл отвечающий за это поведение: ~cbsd/etc/defaults/FreeBSD-bases.conf (или ~cbsd/etc/default/HardenedBSD-bases.conf)
Чтобы произвести изменения, скопируйте этот файл в директорию ~cbsd/etc/
Конфигурационный файл поддерживает переменные $var и $arch, таким образом, вы можете более гибко настраивать источники, например:
auto_baseupdate=0 default_obtain_base_method="extract repo" default_obtain_base_extract_source="/nfs/bases/${platform}/base-${arch}-${ver}.txz" default_obtain_base_repo_sources="https://my.repo.local/bases/${platform}/${ver}/base-${arch}.txz https://mirror-service.local/base-${platform}-${ver}-${arch}.txz"
Заставит CBSD по-умолчанию предпочесть метод получения базы данных с локальной файловой системы (extract). При этом путь, по которому она будет производить поиск и при условии, что CBSD работает на платформе FreeBSD и вы создаете контейнер с версией базы 12.1 и архитектуры amd64, должен выглядеть так: /nfs/bases/FreeBSD/base-amd64-12.1.txz
В случае отсутствия этого файла, CBSD предпримет попытки получить архив через https://my.repo.local/bases/FreeBSD/12.1/base-amd64.txz и https://mirror-service.local/base-FreeBSD-12.1-amd64.txz
Данная возможность, совместно с ключем inter=0 (не интерактивное выполнение CBSD команд) позволяет автоматизировать процесс разворачивания контейнеров с использованием своей собственной инфраструктуры
Параметр auto_baseupdate регулирует автоматическое обновление полученной базы до последнего актуального patch level ( FreeBSD 12.0-p1, FreeBSD 12.0-p2 ..) через утилиту freebsd-update (или hbsd-update для платформы HardenedBSD).
Используйте auto_baseupdate=1, если вы хотите автоматически принимать патчи при получении базы
В качестве примера использования, можете посмотреть на интеграцию CBSD с сервисом Cirrus CI в Issue #367
Получение базы
Сборка или обновление состоит из трех шагов:
- Получение или обновление исходного кода FreeBSD через cbsd srcup:
Получение или обновление исходного кода для той версии FreeBSD, на котором в данные момент работает текущая нода:
% cbsd srcup
Получение или обновление исходного кода для конкретной версии FreeBSD, например, для 11.1:% cbsd srcup ver=11.1
Получение или обновление исходного кода для STABLE ( например, для RELENG_11 ):% cbsd srcup ver=11 stable=1
( Если вы хотите работать с STABLE по-умолчанию, рекомендуется выставить эту опцию глобально в cbsd initenv-tui, после чего добавлять stable=1 к командам будет необязательно ). Эти команды, при наличие исходных кодов в SVN, наполнят каталоги $workdir/src/src_$ver - Компиляция исходного кода через cbsd buildworld:
Результат, полученный с шага 1, может быть использован для компиляции базы. Сборка базы, при наличие $workdir/src/src_$ver каталога для текущей версии ядра:
% cbsd buildworld
При этом, объектные файлы, при наличие прошлых сборок, предварительно удалены не будут (make clean). Если в процессе повторной сборки возникла ошибка, имеет смысл заставить систему провести чистку .o-файлов:% cbsd buildworld clean=1
По-умолчанию, осуществляется многопоточная сборка, где количество job-ов равняется количество ядер (sysctl hw.ncpu). Количество параллельных потоков регулируется через параметр maxjobs, например, для сборки в одном потоке:% cbsd buildworld maxjobs=1
При компиляции, может учитываться персональный src.conf(5), в котором можно указывать стандартные KNOBS-ы. Файл src.conf должен лежать в каталоге $workdir/etc/ с именем src-basename.conf, где basename — любое имя-название конфигурации. Например, в стандартной CBSD имеется файл /usr/jails/etc/src-lite.conf. Для сборки мира с определенным src.conf, необходимо указать параметр basename:% cbsd buildworld basename=lite
Последующие операции над результатом этой сборки, также должны содержать параметр basename=, поскольку результат сборки будет сформирован в катало $workdir/basejail/base_$basename_$arch_$ver, где $basename — название конфигурации. Другие параметры buildworld:- ver — указать конкретную версию
- arch — сборка для конкретной архитектуры
- stable — сборка RELENG_X ветки
- Инсталляция мира через cbsd installworld:
Результат, полученный с шага 2, можно использовать для инсталляции нового мира в ${workdir}/basejail/base_* каталог, откуда уже будет монтироватся в режиме RO, или формироваться новая клетка. Инсталляция файлов для текущей версии системы:
% cbsd installworld
Инсталляция файлов для версии 11.1, собранной с использованием src.conf под именем lite:% cbsd installworld basename=lite ver=11.1
Другие параметры installworld:- arch — инсталляция для конкретной архитектуры
- stable — инсталляция RELENG_X ветки
Команда cbsd world это последовательность cbsd buildworld && cbsd installworld
Имея готовую базу в ${workdir}/basejail, можно приступать к созданию клеток.
Deleting the base
Удаление базы происходит через команду cbsd removebase. По-умолчанию, наследуется версия и архитектура вашего хостера. В том случае, если версии и/или архитектура не совпадает, пользуйтесь ранее описанными аргументами ver, arch, target_arch и stable. Например:
% cbsd removebase % cbsd removebase ver=11 stable=1 % cbsd removebase ver=11.1 stable=0 arch=i386 target_arch=i386