Bozaro

Установка OpenVZ на Ubuntu Linux

by Bozaro on Мар.14, 2009, under Ubuntu

Решил озадачиться виртуализацией под Linux. Основная задача – разнести различные функции на различные виртуальные сервера на домашней машине (резервное копирование, мониторинг, DHCP, DNS, SubVersion и т.д.). Нужно это для следующих целей:

  1. Чтобы можно было обновлять/восстанавливать/переустанавливать все это по отдельности;
  2. Чтобы упростить борьбу с Firewall-ом, так как часть сервисов должна смотреть в Internet, а часть сугубо локальная;
  3. Для проведения экспериментов лучше виртуальной машины придумать что-то сложно.

Выбор остановился на OpenVZ по следующим причинам:

  1. OpenVZ почти не дает усадки по производительности;
  2. OpenVZ не требует процессора с поддержкой виртуализации.

Минусы у OpenVZ:

  1. Под OpenVZ можно запустить только Linux, причем специально подготовленный;
  2. В Ubuntu от OpenVZ отказываются в пользу KVM.

Установка OpenVZ

Все операции выполняем от имени root-а:

[HW]$ sudo bash

Из Ubuntu 8.10 OpenVZ был исключен в пользу KVM, поэтому надо подключать репощиторий пакетов от Ubuntu 8.04:

[HW]$ cat << EOF >> /etc/apt/sources.list
deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
EOF

Далее просто устанавливаем OpenVZ:

[HW]$ apt-get update
[HW]$ apt-get install linux-openvz vzctl

Так же для OpenVZ нужно установить пакет bridge-utils, иначе виртуальные машины не будут иметь доступа в локальную сеть:

[HW]$ apt-get install bridge-utils

Конфиг /etc/network/interfaces должен выглядеть где-то так:

auto lo
iface lo inet loopback

#Inet iface
auto eth0
iface eth0 inet dhcp

#eth1 - LAN
auto br0
iface br0 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        bridge_ports eth1

Для корректной работы в /etc/sysctl.conf пришлось дополнительно добавить следующие опции сети:

[VPS]$ cat >> /etc/sysctl.conf <<EOF
#-- OpenVZ begin --#

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

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

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

# TCP Explict Congestion Notification
#net.ipv4.tcp_ecn = 0

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

#-- OpenVZ end --#
EOF

Затем меняем в /boot/grub/menu.lst дефолтовый вариант загрузки и перезагружаемся.

Подготовка образа для виртуальной машины

Сразу оговорюсь, что можно взять уже готовый образ с сайта: http://wiki.openvz.org/Download/template/precreated.

Но, так как данный образ нужно допиливать напильником (в нем нет русской локали и нет поддержки NFS), решено было изготовить свой образ с нуля.

Для этого нужно установить пакет debootstrap:

[HW]$ sudo apt-get install debootstrap

Затем создать директорию и установить в неё минимальный Ubuntu (ARCH нужно заменить на amd64 или i386 в зависимости от желаемой архитектуры):

[HW]$ mkdir intrepid-chroot
[HW]$ sudo debootstrap [--arch ''ARCH''] intrepid intrepid-chroot

Затем создаем виртуальную машину:

[HW]$ sudo mv hardy-chroot /vz/private/101
[HW]$ sudo chown -R root /vz/private/101
[HW]$ sudo vzctl set 101 --applyconfig vps.basic --save
[HW]$ echo "OSTEMPLATE=ubuntu-8.10" | sudo tee -a /etc/vz/conf/101.conf >/dev/null
[HW]$ sudo vzctl set 101 --ipadd x.x.x.x --save
[HW]$ sudo vzctl set 101 --nameserver x.x.x.x --save
[HW]$ sudo rm /vz/private/101/etc/rcS.d/S10udev

Затем запускаем систему (в контейнере мы будем под root-ом):

[HW]$ sudo vzctl start 777
[HW]$ vzctl enter 777

Удаляем лишние пакеты:

[VPS]$ apt-get remove --purge busybox-initramfs console-setup dmidecode eject \
 initramfs-tools klibc-utils laptop-detect libklibc libvolume-id0 module-init-tools \
 ntpdate ubuntu-minimal udev xkb-data tasksel tasksel-data

Так же можно удалить DHCP:

[VPS]$ apt-get remove --purge --auto-remove dhcp3-client dhcp3-common

Меняем список источников:

[VPS]$ export COUNTRY=<YOURCOUNTRY>.
[VPS]$ export DISTRIB=intrepid
[VPS]$ cat >/etc/apt/sources.list <<EOF
# Binary
deb http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB} main restricted universe multiverse
deb http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB}-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu ${DISTRIB}-security main restricted universe multiverse

# Binary Canonical
# deb http://archive.canonical.com/ubuntu ${DISTRIB} partner

# Binary backport
# deb http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB}-backports main restricted universe multiverse

# Source
# deb-src http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB} main restricted universe multiverse
# deb-src http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB}-updates main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu ${DISTRIB}-security main restricted universe multiverse

# Source backport
# deb-src http://${COUNTRY}archive.ubuntu.com/ubuntu/ ${DISTRIB}-backports main restricted universe multiverse

# Source Canonical
# deb-src http://archive.canonical.com/ubuntu ${DISTRIB} partner
EOF

Доставляем нужные пакеты:

[VPS]$ apt-get update && apt-get upgrade
[VPS]$ apt-get install language-pack-ru nfs-common ssh mc

Если установили SSH, то нужно позаботиться о том, чтобы у каждого виртуального контейнера были свои ключи:

[VPS]$ rm -f /etc/ssh/ssh_host_*
[VPS]$ cat << EOF > /etc/rc2.d/S15ssh_gen_host_keys
#!/bin/sh
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
rm -f \$0
EOF
[VPS]$ chmod a+x /etc/rc2.d/S15ssh_gen_host_keys

Убираем файл mtab и делаем ссылкой на /pronc/mounts:

[VPS]$ rm -f /etc/mtab
[VPS]$ ln -s /proc/mounts /etc/mtab
[VPS]$ update-rc.d -f mtab.sh remove

Отключаем лишние службы:

[VPS]$ update-rc.d -f klogd remove

Так же желательно поменять локаль и часовой пояс:

[VPS]$ echo LANG="ru_RU.UTF8" > /etc/default/locale
[VPS]$ echo Europe/Moscow > /etc/timezone
[VPS]$ ln -s ../usr/share/zoneinfo/Europe/Moscow /etc/localtime

Убираем запуск терминалов:

В файлах  /etc/event.d/tty* надо заменить «start on runlevel 2″ на «stop on runlevel 2″. Без этого в логах постоянно будет появляться сообщение о перезапуске терминала и постоянный запуск/падение getty будет давать ощутимую нагрузку на процессор.

Убираем следы жизнедеятельности:

[VPS]$ echo "localhost" > /etc/hostname
[VPS]$ echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
[VPS]$ cd /dev && /sbin/MAKEDEV ptyp
[VPS]$ > /etc/resolv.conf
[VPS]$ apt-get clean
[VPS]$ > /var/log/messages; > /var/log/auth.log; > /var/log/kern.log; > /var/log/bootstrap.log; \
> /var/log/dpkg.log; > /var/log/syslog; > /var/log/daemon.log; > /var/log/apt/term.log; rm -f /var/log/*.0 /var/log/*.1

Выходим из виртуальной машины:

[VPS]$ exit

И финальный шаг – архивирование образа виртуальной машины:

[HW]$ sudo tar -czf /var/lib/vz/template/cache/ubuntu-8.10-x86_64.tar.gz -C intrepid-chroot

Создание виртуальный машины

Для создания виртуальной машины достаточно выполнить команды (номера виртуальных машин от 0 до 100 зарезервированы):

[HW]$ sudo vzctl create 101 --ostemplate ubuntu-8.10-x86_64 --config vps.basic
[HW]$ sudo vzctl set 101 --hostname vm-test --save
[HW]$ sudo vzctl set 101 --ipadd x.x.x.x --save
[HW]$ sudo vzctl set 101 --nameserver x.x.x.x --save
[HW]$ sudo vzctl set 101 --features nfs:on --save
[HW]$ sudo vzctl set 101 --onboot yes --save
[HW]$ sudo vzctl start 101

Так же хочу обратить внимание на файл /proc/user_beancounters, который содержит в себе все лимиты, наложенные на виртуальную машину и информацию о том, сколько раз она за них пыталась выйти.

Исправление неполадок

После игр с виртуальными машинами одна из них перестала подключаться по SSH и через vzctl enter. Выдавалась ошибка: «Unable to open pty: No such file or directory».

Решилость это следующими командами:

[HW]$ vzctl exec veid update-rc.d -f udev remove
[HW]$ vzctl restart veid

Ссылки по теме

:,

1 Comment for this entry

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!