Management and Repository for FreeBSD Jails

Attention! I'm apologize, but it is automatic machine translation of the text. You can improve it if will send to me more correct version of the text or fix html pages via GITHUB repository.

Создание 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 из соответствующего репозитория ( на момент написания статьи это репозиторий для squeeze )

                % 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 squeeze:

                % debootstrap squeeze /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!