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!