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 !

Создание GNU/kFreeBSD окружения в CBSD jail

Данный HowTo описывает инструкцию step-by-step для получения Debian kFreeBSD в cbsd jail. Данная клетка может быть полезна для знакомства с проектом Debian GNU/kFreeBSD, или для людей, привыкших к утилитам и файловой иерархии Debian kFreeBSD ( репозиторий .deb пакетов собирается и официально поддерживается разработчиками Linux Debian ), или просто Fun-а ради.

Прим: Если вы не хотите настраивать это вручную, можете воспользоваться клеткой kfreebsd из репозитория CBSD

Устанавливаем порт debootrap для получения базовой системы Debian из соответствующего репозитория ( на момент написания статьи это репозиторий для wheezy )

		% make -C /usr/ports/sysutils/debootstrap install
		

Подгружаем необходимые для его работы модули:

		% kldload fdescfs linprocfs linsysfs tmpfs
		

Создаем через cbsd jconstruct-tui клетку с именем произвольным именем (например kfreebsd), в котором изменяем значение параметров по-умолчанию на следующие:

  • *jname* — имя клетки на ваше усмотрение
  • *fqdn* — hostname клетки, на ваше усмотрение
  • *ip4_addr* — IP адрес клетки, на ваше усмотрение
  • *ver* — Вместо цифр пишем зарезервированное слово empty, тк это не FreeBSD jail и версия базы не требуется.
  • *baserw* — устанавливаем в 1 (YES). Тк это не FreeBSD jail, обычная база FreeBSD не подойдет.
  • *srcmount* — 0 (NO). Тк монтировать дерево исходных кодов в клетку незачем.
  • *portsmount* — 0 (NO). Тк монтировать дерево портов в клетку незачем.
  • *applytpl* — 0 (NO). Тк применяемые изменения только для FreeBSD клеток.
  • *floatresolv* — 1 (YES). /etc/resolv.conf для ресолвера клетки имеет тот же синтаксис

Прим: Если данная операция производится на ZFS, после создания клетки необходимо примонтировать созданный (пустой) датасет: zfs mount -a или zfs mount <FS>/kfreebsd

Наполнение клетки данными Debian kFreeBSD wheezy:

		% debootstrap wheezy /usr/jails/jails-data/kfreebsd-data http://cdn.debian.net/debian
		

Для подавления ошибки getpwname от jail v2, скопируем привычный /etc/passwd в клетке, конвертируя из Debian в FreeBSD формат (пути указаны для клетки с именем kfreebsd):

		% awk -F : '{printf("%s:%s:%s:%s::0:0:%s:%s:%s\n", $1,$2,$3,$4,$5,$6,$7); }' /usr/jails/jails-data/kfreebsd-data/etc/passwd > /usr/jails/jails-data/kfreebsd-data/etc/master.passwd
		
		% pwd_mkdb -d /usr/jails/jails-data/kfreebsd-data/etc -p /usr/jails/jails-data/kfreebsd-data/etc/master.passwd
		

Зайдем в корень клетки, назначим пароль пользователью root и перегенерируем shadow password файл:

		% chroot /usr/jails/jails-data/kfreebsd-data bash
		% passwd root
		% vipw
		% vipw -s
		

Пропишем в fstab для клетки о необходимости монтирования необходимых в работе файловых систем в клетку.

В файл /usr/jails/jails-fstab/fstab.kfreebsd.local (если клетка названа kfreebsd):

		linproc /proc linprocfs rw 0 0
		linsys /sys linsysfs rw 0 0
		tmpfs /lib/init/rw tmpfs rw 2 0
		

В cbsd jconfig клетки изменить параметры останова и запуска клетки с FreeBSD-related на Debian-specific:

		exec_start="/bin/sh /etc/init.d/rc 3";
		exec_stop="/bin/sh /etc/init.d/rc 0";
		

Запускаем клетку, указыаем соответствующие зеркала в /etc/apt/sources.list если надо, наслаждаемся apt-get и прочим волшебством.

PS: Debian GNUk/kFreeBSD не является бинарно-совместимым с линукс окружением, это всего лишь сборка ПО в .deb пакеты, работающия на ядре FreeBSD (таковы цели проекта).

Если вы хотите острых ощущений с Linux-in-FreeBSD jail, попробуйте centos клетку (работает через линуксятор, 32bit).

PS2: Если вам нужен настоящий взрослый гипервизор под FreeBSD, в котором можно запустить Linux guest полноценно — присмотритесь к проекту BSD Hypervisor ( BHyVe )

Have fun!