LXC представляет собой набор утилит для управления виртуализацией на уровне операционной системы. Технология основана на механизме cgroups
, которая позволяет создавать несколько Linux-окружений с собственным пространством процессов и сетевым стеком. Все контейнеры работают на одном ядре вместе с основной машиной, что делает виртуализацию этого типа очень эффективной. По этой причине виртуализация такого типа — отличный выбор для различных применений, где не требуется устанавливать дополнительные модули к ядру и подобная специфика.
Почти всю полезную информацию можно найти в дебиановском источнике. Ниже — наиболее короткий howto, как быстро настроить lxc-виртуализацию под Debian Linux.
Настройка хост-машины
Начинаем как обычно с установки необходимого софта
apt-get install lxc bridge-utils libvirt-bin debootstrap
Контейнеры будем создавать в стандартной директории /var/lib/lxc
. Для удобства сделаем симлинк в корне файловой системы на эту директорию:
ln -s /var/lib/lxc
Настроим сеть. Для этого доустанавливается пакет bridge-utils
, типовой конфиг сети (/etc/network/interfaces
) будет следующим
auto lo iface lo inet loopback auto br0 iface br0 inet static address 123.123.123.3 netmask 255.255.255.248 gateway 123.123.123.1 bridge_ports eth0 bridge_fd 0 bridge_maxwait 0 bridge_stp off dns-nameservers 8.8.8.8 8.8.4.4
Проверяем, всё ли в порядке с установкой
lxc-checkconfig
и если все нормально, то ставим туда первый контейнер
lxc-create -n myvm -t debian
В результате получаем виртуальную машину и root
-пароль к ней. Контейнер будет из stable
-дистрибутива (Wheezy
), однако его можно дообновить до testing
или изначально ставить testing
.
Настройка виртуальной машины
Конфиг виртуальной машины находится в /lxc/myvm/config
. Доводим его до вменяемого состояния, например такого
lxc.network.type = veth lxc.rootfs = /var/lib/lxc/myvm/rootfs # Common configuration lxc.include = /usr/share/lxc/config/debian.common.conf # Container specific configuration lxc.mount = /var/lib/lxc/myvm/fstab lxc.utsname = myvm lxc.arch = amd64 lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 00:25:90:01:5e:22 lxc.start.auto = 1
Последний параметр отвечает за автозагрузку при запуске основной машины.
Перед запуском виртуалки также меняем сетевые настройки в /etc/network/interfaces
.
В новой системе только минимальный набор софта, который не включает в себя некоторые широкоизвестные и часто применяемые утилиты. Например, не получится сразу выполнить ping
, поскольку соответствующего ему пакета нет в системе. Доустанавливаем необходимый софт:
apt-get install apt-utils iputils-ping cron rsyslog iptables
Иногда будем получать ругань вроде
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "ru_RU.UTF-8", LC_COLLATE = "ru_RU.UTF-8", LC_MESSAGES = "C", LC_NUMERIC = "POSIX", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
Поэтому сразу конфигурируем локаль
dpkg-reconfigure locales
Стандартного почтового агента (MTA) в системе тоже нет, поэтому ставим его и настраиваем:
apt-get install exim4 dpkg-reconfigure exim4-config
Полезные команды для управления
Запустить и погасить виртуальную машину используются
lxc-start -n myvm -d lxc-stop -n myvm
Параметр -d
в случае старта означает запуск в режиме демона. Если его не указать, то getty
захватит текущую консоль (что бывает полезно, если не удаётся подключиться по SSH).
Получить краткую информацию о статусе машины можно с помощью
lxc-info -n myvm
Заключение
Вышеприведенная конфигурация — очень быстрый способ поставить виртуальную машину, например для целей тестирования ПО. Если требуется даже базовая безопасность, необходимо много чего доработать.
PS
Статья устарела. Более качественный способ приведён в дебиановском мануале. И, что важно, постоянно обновляется.