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 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