Linux Vserver

Материал из Слакваря

Перейти к: навигация, поиск
Эта статья находится в процессе написания.

Linux Vserver - система виртуализации путем смены контекста выполнения программ при изоляции в рамках одного рабочего ядра. Аналогом может служить chroot, но vserver обеспечивает безвозвратный механизм смены контекста. vserver позволяет держать, например, 32-битный вариант Linux под 64-битной системой хоста, или старые/ненадежные варианты, которые не идут уже на новом железе, но которые желательно сохранить в работающем виде. Этот вариант удобен и для разработки программ, обеспечивая изолированное дерево библиотек. Преимущества - низкие накладные расходы при работе vservers.

Установка

На сайте проекта регулярно публикуются патчи к различным версиям ядра и необходимые для работы утилиты. Для установки потребуются:

Патчим ядро (находимся в разделе версси ядра, например /usr/src/linux-2.6.32.6):

# patch -p1 < ./patch-2.6.32.6-vs2.3.0.36.28.diff

Компилируем ядро, отметив в конфигурации необходимые для vserver опции

Файл:K_vserver.png

Компилируем dietlibc, beecrypt и utils. При компиляции utils желательно указать точку монтирования файловых систем, где будут располагаться виртуальные серверы (./configure --with-vrootdir=/home/vservers). После успешной установки утилит в /usr/local/lib/util-vserver появятся некоторые скрипты. Понадобятся vprocunhide и vserver-build. vprocunhide делает раздел /proc доступным в виртуальных серверах (может быть необходимым для некоторых программ), стандартный файл со списком разрешений/запретов находится в /usr/local/lib/util-vserver/defaults. Создаем прообраз нашего виртуального сервера:

# ./vserver-build -m skeleton -n testing --hostname testing.blah.org \
  --interface testing=eth0:1.2.3.4/255.255.255.0

skeleton выбран из-за минимальной установки, прозрачной для дальнейшего наполнения. После указанной операции появятся /home/vservers/testing (дерево сервера) и /usr/local/etc/vservers/testing (дерево конфигурации сервера). Следует обратить внимание на файл fstab, в котором /tmp монтируется как tmpfs, при использовании реального /tmp строку с /tmpfs нужно убрать. Создаем дерево сервера. Здесь вариантов много, можно установить как гостевую систему, так и клон корневой. Для клона корневой:

# cp -ax /usr /bin /boot /dev /etc /lib /lib64 /var /sbin /home/vservers/testing
(альтернатива:
  installpkg --root /home/vservers/testing --priority ADD *z
в каждом нужном разделе дистрибутива - a,ap..)
# mkdir /home/vservers/testing/proc
# mkdir /home/vservers/testing/tmp
# chmod a+rwt /home/vservers/testing/tmp
# mkdir /home/vservers/testing/root

Стартовый скрипт созданного сервера называется rc и находится в /etc/rc.d и /etc/init.d виртуального сервера. Он заменяет собой цепочку стартовых скриптов, но стандартный вариант следующий:

#! /bin/sh
#
echo "vserver testing"
if [ "$1" == "3" ]; then
       /etc/rc.d/rc.M
elif [ "$1" == "6" ]; then
       /etc/rc.d/rc.6
else
echo "Invalid level."
exit 1
fi

Настраивам в testing rc.local и старт разных демонов, разнося, если нужно, их по портам и адресам (к примеру, ssh), чтобы они не рвали сеть на себя. Не забываем о существовании скрипта rc.local_shutdown. Прописываем старт скрипта vprocunhide в rc.local нашего настоящего сервера до точки старта виртуальных серверов. Прегружаемся с новым ядром. Пробуем стартовать виртуальный сервер

# vserver testing start

Пробуем зайти в сервер непосредственно

# vserver testing enter
# ps -ax
# top
# mc

Дополнительные настройки сервера описаны в документации к утилитам. Например, можно ограничить ресурсы виртуального сервера через описание в разделах /usr/local/etc/vservers/testing/ulimits и rlimits.

Стартовать и останавливать сервер лучше из /etc/rc.d/rc.local - /etc/rc.d/rc.local_shutdown

Личные инструменты