FreeBSD. Jail.
Задача, которая возникла — изучить способ виртуализации на 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
Categories
Archives
