tea blog Блог о Mac OS, Hackintosh и не только

16Фев/110

OpenVZ. Установка контейнера CentOS 5.5 на хост Debian Lenny

Intel D945GCLF2

В мире Apple и Хакинтошестроения пока ничего интересного (для меня) не происходит. Напишу пару заметок о Linux, может кому-то пригодится.

Есть у меня дома небольшой сервер на базе Intel D945GCLF2 с процессором Intel Atom 330 на борту, с 2 Gb оперативки и двумя террабайтными винтами (Western Digital Green Caviar), собранными в RAID 1 (зеркалирование).

Живет это все в корпусе Chenbro ES30068.

Изначально эта конфигурация собиралась для Mac OS X Server, но поигравшись с ней полгода я понял, что Mac Server дома мне не нужен. Сервер, который по моему разумению должен был быть тихим и холодным, достаточно сильно грелся и шумел вентиляторами. Загрузка процессора всегда была достаточно высокой и некоторые приложения вели себя не стабильно (rtorrent регулярно падал).

Т.к. за эти полгода я заходит на сервер исключительно через терминал, а всеми Mac-вкусняшками не пользовался вообще, то было принято решение: сносим Mac OS X и ставим Linux. Мой выбор пал на Debian Lenny. Debian давно зарекомендовал себя как крайне стабильный дистрибутив, к тому же с Debian я раньше никогда не сталкивался и было интересно попробовать что-то новенькое.

Установка прошла достаточно гладко, сейчас я уже и не вспомню всех подробностей и нюансов. На сервере сейчас работает rtorrent понятно для чего, afp сервер для маковских шар, samba для виндовых шар (используется сетевым медиаплеером ASUS O!Play HDP-R1), mt-daap сервер для iTunes и много чего по мелочам. К слову, сейчас загрузка процессора редко превышает 20% и то, только в момент перехеширования торрентов. Теперь он действительно стал тихим и холодным.

Постепенно приближаемся к теме, вынесенной в заголовок...

Моя семья достаточно давно (более 5 лет) является активным пользователем IP-телефонии. Дома стоит Siemens Gigaset C470 IP, на мобильном SIPDroid. Подключены несколько тарифов от разных провайдеров (sipnet.ru, pctel.ru, zadarma.com), подключен прямой московский DID от "Центрального телеграфа".

Все это хозяйство конечно можно настроить и разрулить с помощью самого C470IP, он позволяет создавать некоторое кол-во правил и выбирать провайдера в зависимости от направления, но хочется чего-то большего... Короче нужно ставить asterisk!

Linux сервер есть. Сам asterisk ставится на Debian достаточно просто как из пакетов так и из исходников, но т.к. опыта в его настройке никакого нет то хочется прицепить к нему какую-то GUI-морду. Выбор GUI есть достаточно большой: AsteriskNow, FreePBX, Trixbox, Elastix.

Проблемы начались, когда я стал пытаться поставить что-то из вышеперечисленного. По человечески мне сделать это так  не удалось, либо не работает морда либо все остальное, что висит на apache, к тому же практически все эти системы рассчитаны на установку на CentOS.

После многих неудачных попыток я стал подумывать, а не перейти ли мне на CentOS или может собрать что-то маленькое исключительно для asterisk? CentOS не хотелось ставить исключительно из-за лени - это же все нужно настраивать заново, а оно и так без перезагрузок уже почти год работает. От покупки нового железа удержала природная жаба - есть практически простаивающий сервер, зачем городить что-то еще?

Какого-же решение? Виртуализация! Ведь можно на одном сервере крутить несколько операционок! Только Atom 330 не поддерживать аппаратную виртуализацию. Нужно что-то, что не будет безбожно тормозить. Сначала я решил попробовать гипервизор Xen... Запустить его на Atom 330 мне так и не удалось. Хотя в сети и встречаются сообщения о успешном запуске Xen даже на Atom 230 у меня ничего не получилось.

Следующий претендент OpenVZ. OpenVZ это технология виртуализации на уровне операционной системы. OpenVZ позволяет на одном физическом сервере запускать множество изолированных копий операционной системы, называемых Виртуальные Частные Серверы (Virtual Private Servers, VPS) или Виртуальные Среды (Virtual Environments, VE). OpenVZ базируется на ядре Linux, поэтому гостевыми операционными системами может быть только Linux, но мне только это и нужно. Согласно сайту OpenVZ, накладные расходы на виртуализацию очень малы, и падение производительности составляет всего 1-3 %, по сравнению с обычными Linux-системами. Вау, то что нужно.

Ставим OpenVZ. Для начала нам нужно заменить ядро на модифицированное ядро, с поддержкой OpenVZ. Сначала выясним какой версии у нас ядро:

uname -r
2.6.26-2-686

Найдем и установим OpenVZ ядро этой же версии:

apt-cache search linux image openvz 2.6.26-2
linux-headers-2.6.26-2-openvz-686 - Header files for Linux 2.6.26-2-openvz-686
linux-image-2.6.26-2-openvz-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ support

Нужное нам ядро это linux-image-2.6.26-2-openvz-686. Его и устанавливаем.

sudo apt-get linux-image-2.6.26-2-openvz-686
ln -s /var/lib/vz /vz

Перезагружаемся. Проверяем версию ядра:

uname -r
2.6.26-2-openvz-686

Выставляем параметры ядра так, чтобы виртуальные машины видели сеть. Редактируем /etc/sysctl.conf:

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.eth0.proxy_arp = 1

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Применяем изменения:

sysctl -p

Теперь нам нужен шаблон CentOS 5.5, из которого мы развернем VPS. На сайте OpenVZ есть шаблоны для многих популярных дистрибутивов Linux. Просмотреть список можно тут. Все шаблоны складываем в директорию /var/lib/vz/template/cache. Загружаем нужный шаблон (хоть Atom 330 и поддерживает Intel® 64 Architecture но я не вижу смысла ее использовать на этом железе, поэтому и хост и гостевая системы 32-разрядные):

cd /var/lib/vz/template/cache
wget http://download.openvz.org/template/precreated/centos-5-x86.tar.gz

Устанавливаем необходимые инструменты, для работы с OpenVZ:

sudo apt-get install rsync vzctl vzquota

Настало время создать контейнер нового VPS.

vzctl create 101 --ostemplate centos-5-x86 --config vps-basic
vzctl set 101 --cpulimit 100 --save
vzctl set 101 --ipadd 192.168.0.101 --save
vzctl set 101 --name voip --save
vzctl set 101 --hostname voip.server.com --save
vzctl set 101 --nameserver 192.168.0.1 --save
vzctl set 101 --vmguarpages 250M:256M --privvmpages 750M:768M --save
vzctl set 101 --diskspace 2G:4G --save
vzctl set 101 --onboot yes --save

Параметры:

  • --ostemplate - задает шаблон, из которого будет развернут виртуальный сервер;
  • --cpulimit - Ограничение на загрузку процессора виртуальной средой в процентах. 4 ядра = 400%;
  • --ipadd - ip адрес;
  • --name - имя VPS;
  • --hostname - имя хоста;
  • --nameserver - адрес DNS сервера;
  • --vmguarpages - гарантированный объем памяти;
  • --privvmpages - максимальный объем памяти;
  • --diskspace - ограничения использования дискового пространства, минимум и максимум;
  • --onboot - загрузка выбранного VPS при запуске хост-системы.

Еще один плюс OpenVZ в том, что файловая система VPS лежит не в отдельном файле-контейнере а в основной файловой системе, т.е. доступ к гостевой файловой системе из системы-хоста можно получить просто зайдя в директорию /var/lib/vz/private/101/.  Таким образом нет дополнительных тормозов при дисковых операциях.

Итак, сервер создан и необходимые параметры заданы. Запускаем его:

vzctl start 101
Starting VE ...
VE is mounted
Adding IP address(es): 192.168.0.101
Setting CPU units: 1000
Configure meminfo: 131072
Set hostname: asterisk101
File resolv.conf was modified
VE start in progress...

Что бы зайти в VPS под пользователем root вводим команду:

vzctl enter 101

С остальными командами vzctl можно ознакомиться тут или введя команду:

man vzctl

Заходим в контейнер и смотрим, что у нас получилось:

vzctl enter 101
entered into VE 101
[root@asterisk101 /]#

Смотрим версию ядра:

uname -r

2.6.26-2-openvz-686

Ядро тоже, что и у системы-хоста. Теперь смотрим версию дистрибутива:

cat `ls /etc/*{-,_}{release,version} 2>/dev/null | head -n 1`

CentOS release 5.5 (Final)

Что и требовалось. Напоследок обновимся:

yum -y update

Пока все. О установке asterisk и прочего в следующем посте.

Be Sociable, Share!
1 звезда2 звезды3 звезды4 звезды5 звезд (5 оценок, в среднем: 4,60 из 5)