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. Если вы используете более раннюю версию, рекомендуется сначала обновиться.

Получение ISO и USB Memstick загрузочных образов из клеток

Команда jail2iso

			% cbsd jail2iso
		
Описание:

Скрипт jail2iso позволяет создать загрузочный образ для CD/DVD/Memstick или гипервизора bhyve из указанной клетки. Несмотря на то, что функционал jail2iso не используется в работы CBSD или клеток, этот скрипт может быть очень полезен для легкого и комфортного построения кастомизированных LiveCD, содержимое которых вы можете устанавливать, настраивать и проверять в клетке. Например, этот функционал удобен для:

  • Создание Rescue-систем с необходимыми инструментами на борту
  • Построение собственного дистрибутива FreeBSD
  • Создание образов для бездисковых серверов/станций (например загружаемые с PXE, MicroSD, Flash, CD/DVD, и тд) и монтирующие домашние каталоги или клетки/файлы с данными по NFS/FibreChannel/iSCSI/InfiniBand.
  • Переноса jail в образ bhyve для использования особенностей функционала bhyve (и потери особенностей функционала jail)

Схема работы скрипта для iso/memstick

  • Создание файловой иерархии будущего образа, состоящей из подмонтированной базы и данных клетки
  • Создание MFS/UZIP образа, который будет оставаться в памяти. Используется в основном для ускорения работы в режиме LiveCD, позволяя "закешировать" часто вызывающиеся утилиты и библиотеки, например от / до /usr.
  • Монтирование поверх MFS иерархии данных с файловой системы носителя через nullfs/RO
  • Монтирование tmpfs поверх RO файловой системы для возможности производить модификации.

Если вам необходимо ряд директорий при загрузке образа перезагрузить в RW через tmpfs, до вызова утилиты jail2iso необходимо прописать в файл $systemdir/jail/tmpfsdir все пути. Например для rescuebsd клетки это файл: /usr/jails/jails-system/rescuebsd/tmpfsdir содержащий:

			/root
			/var/run
			/var/cache
			/var/db
			/var/spool
			/var/log
			/usr/home
			/usr/local/etc
		

Данные записи будут обработаны /etc/rc.d/tmpfsdir, который сохранит на образ jail2iso. Все содержимое в этих файлах, которое находится на jail, будет перемещено на tmpfs файловую систему. Поскольку RW области монтируются через TMPFS, количество доступной для записи памяти будет зависеть от количества оперативной памяти, на котором запускается LiveCD. Вы можете предпочесть написать собственный /boot/loader.conf на создаваемом образе. Для этого, сохранив файл loader.conf в каталог $systemdir/$jname/. Все, что вы напишете в этом файле, добавиться к файлу loader.conf, генерируемого jail2iso, которая имеет следующие обязательные записи:

geom_uzip_load="YES"
tmpfs_load="YES"
nullfs_load="YES"

mfs_load="YES"
mfs_type="mfs_root"
mfs_name="/mfsroot"
vfs.root.mountfrom="ufs:/dev/md0"

net.inet.ip.fw.default_to_accept=1
		

Например, для клетки xrescuebsd, которая загружается в режиме KMS на ядре с newcons, имеется файл /usr/jails/jails-system/xrescuebsd/loader.conf со следующим содержимым:

kern.ipc.shmmni=4096
kern.ipc.shmseg=4096
radeonkms_load="YES"
i915kms_load="YES"
linux_load="YES"
		

Вы можете указать, какой тип образа jail2iso должна создать, ISO образ с cd9960 для CD/DVD/Виртуальных машин или Memstick, образ, который вы сможете записать на USB Flash носитель.

Схема работы скрипта для образа bhyve

Поскольку образ bhyve изначально будет в режиме RW, для него не требуется создание RO образа c UZIP и сопровождение tmpfsdir, поэтому данная стадия при формировании образа отсутствует. Скрипт автоматически создаст fstab-запись для монтирования соответствующего устройства в bhyve машине и откорректирует /etc/ttys, как этого требует инструкция. При создании образа bhyve, пользуйтесь параметром

% cbsd jail2iso ... freesize=
		

Поскольку без этого параметра, создается диск объемом, равным объему фактических данных, без запаса. Это сделает систему нерабочей, поэтому, через freesize= дополнительно указывается объем свободного места в образе после копирования туда основных данных.

Дополнительные сведения

cbsd jail2iso не контроллирует и не лимитирует объемы конечного результата — они ограничены лишь вашим носителем, для которого создается образ.

Для создания ISO образа:

% cbsd jail2iso media=iso ..
		

Для создания memstick:

% cbsd jail2iso media=memstick ..
		

Для создания bhyve образа:

% cbsd jail2iso media=bhyve freesize=XXg ..
		

Каталог, куда будет сохранен образ указывается через аргумент dstdir. По-умолчанию, на образ будет сохранено GENERIC ядро из каталога $workdir/basejail/. Его можно получить по команде:

% cbsd repo action=get sources=kernel
		

для вашей версии FreeBSD, или собрать самостоятельно через cbsd buildkernel. Если ядро GENERIC не подходит, через аргумент name для jail2iso вы можете указать другое ядро, если оно у вас есть. Кроме этого, для уменьшения размера финального образа, jail2iso выполняет ряд действий:

  • удаление .a-архивных файлов в каталогах библиотек
  • удаление необязательных данных по файлу-списку.

По-умолчанию, данный список расположен в $workdir/share/jail2iso-prunelist. Вы можете его откорректировать по собственному усмотрению или создать свой, указав путь к нему через аргумент prunelist

Пример создания memstick из клетки jail1:

% cbsd jail2iso media=memstick jname=jail1 dstdir=/tmp
		

Если файл /tmp/jail1.img создался, его можно записать на USB носитель через команду:

% dd if=/tmp/mc.img of=/dev/da0 bs="10240" conv="sync"
		

, если /dev/da0 — это USB flash носитель.

Пример создания и запуск bhyve образа из jail1 с сетью через интерфейс em0:

% cbsd jail2iso media=bhyve jname=jail1 dstdir=/tmp freesize=1g
% kldload vmm
% kldload if_tap
% sysctl -w net.link.tap.up_on_open=1
% ifconfig tap0 create
% ifconfig bridge0 create
% ifconfig bridge0 addm em0 addm tap0
% ifconfig bridge0 up
% sh /usr/share/examples/bhyve/vmrun.sh -d /tmp/jail1-10.0_amd64.img vm1 
		

где /tmp/jail1-10.0_amd64.img — результат работы jail2iso.