Задача, которая возникла — изучить способ виртуализации на FreeBSD с помощью Jail. В целях предварительного изучения, для теста была предоставлена машина достаточно простой конфигурации на платформе x86. Технические характеристики в тесте роли не играли — главное получить результат. На момент установки имелся образ релиза FreeBSD 8.0, хотя последним релизом и являлся FreeBSD 8.2.

Технология Jail заключается в механизме виртуализации на уровне операционной системы — создания нескольких независимо работающих копий системы внутри одной ОС — далее они будут называться в статье клетками. К сожалению, в данный момент использование FreeBSD Jail имеет ряд недостатков, один из которых — невозможность ограничивать системные ресурсы для клетки. На данный момент это решается сторонними патчами.

Установка всей системы производится с нуля. Я выбрал Custom установку. В ней были выбраны основные пакеты системы, порты и исходные коды — ядра и include.

Для того, чтобы создать отдельную клетку, необходимо убедится, что установлены все исходные коды в /usr/src. Клетки будут хранится в /jails. Создаю клетку под названием test.

Для удобства определяю под переменной D путь к этой клетке.

# setenv D /jails/test

Создаю директорию для клетки

# mkdir -p $D

Собираю мир

# cd /usr/src

# make buildworld

Устанавливаю мир в клетку

# make installworld DESTDIR=$D

# make distribution DESTDIR=$D

Подключаю для клетки devfs

# mount -t devfs devfs $D/dev

Для клетки создается alias интерфейс, к примеру:

# ifconfig vr0 alias 192.168.1.2 netmask 255.255.255.0

Теперь прописывается клетка в /etc/rc.conf под названием test

jail_enable=”YES”

jail_list=”test”

jail_test_rootdir=”/jails/test”

jail_test_hostname=”www.example.org”

jail_test_ip=”192.168.1.2″

jail_test_devfs_enable=”YES”

jail_test_devfs_ruleset=”test_ruleset”

Клетка запускается командой:

# /etc/rc.d/jail start test

Подключение к клетке для установки паролей и запуска прочих команд:

# jail /jails/test/ test 192.168.1.2 /bin/csh

На этот момент получается, что установлена начальная система клетки, т.е. никакие параметры и настройки в клетку из основной системы не переносились. В клетке можно установить необходимые пакеты, настроить SSH и работать как с обычной системой. В основной системе все процессы, которые создаются в клетках будут видны в дереве процессов. В клетках видны только те процессы, которые создаются пользователем этой клетки.

Чтобы исключить частые скачивания и обновления портов, а также для экономии дискового пространства можно каждой клетке выделить доступ к портам основной системы. Это можно сделать двумя способами:

# mount_unionfs /usr/ports /jails/test/usr/ports

или

# mount_nullfs /usr/ports /jails/base/usr/ports

Tagged with:
 

Leave a Reply

Set your Twitter account name in your settings to use the TwitterBar Section.