Записи с меткой ‘openvz’
OpenVZ Debian 7 Wheezy Template
Недавно вышел Debian 7 Wheezy. Среди прочего произошел переход на ядро 3.2 и из-за этого произошел отказ от поддержки OpenVZ. Печально, но Wheezy прекрасно работает на ядре 2.6.32 от Squeeze, а еще лучше работает Proxmox 3. Разумеется под него хочется иметь свою сборку Debian7. Сделать это можно так.
Во-первых, vzctl в Proxmox не содержит в себе конфиги для шаблонов, которые упрощают жизнь. Те, что обычно лежат в /etc/vz/conf и именуются типа ve-basic.conf-sample ve-light.conf-sample ve-unlimited.conf-sample и т.п. Поэтому качаем их из основного дистрибутива:
cd /tmp
wget http://mirror.yandex.ru/debian/pool/main/v/vzctl/vzctl_3.0.30.2-4_amd64.deb
dpkg -x vzctl_3.0.30.2-4_amd64.deb .
cp etc/vz/conf/*sample /etc/vz/conf/
Теперь приступим к сборке почти по стандартной процедуре.
Она содержит три этапа. Первый и третий на хосте, а второй — внутри контейнера.
Первый этап:
Создадим файловую структуру контейнера:
aptitude install debootstrap
debootstrap --arch amd64 wheezy /var/lib/vz/private/777 http://mirror.yandex.ru/debian/
Произведём базовые настройки контейнера:
vzctl set 777 --applyconfig basic --save
echo 'OSTEMPLATE="debian-7.0"' >> /etc/vz/conf/777.conf
vzctl set 777 --ipadd 192.168.35.110 --save
vzctl set 777 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save
mknod --mode 666 /var/lib/vz/private/777/dev/ptmx c 5 2
mkdir -p /var/lib/vz/root/777
Контейнер подготовлен. Запустим его и залезем внутрь:
vzctl start 777
vzctl enter 777
Теперь мы внутри контейнера.
Второй этап:
Будем патриотически использовать локальное зеркало Debian:
echo "deb http://mirror.yandex.ru/debian wheezy main non-free contrib" > /etc/apt/sources.list
echo "deb http://mirror.yandex.ru/debian/ wheezy-updates main contrib non-free" >> /etc/apt/sources.list
echo "deb http://security.debian.org wheezy/updates main non-free contrib" >> /etc/apt/sources.list
aptitude update
aptitude upgrade
chmod 700 /root
sed -i -e '/getty/d' /etc/inittab
sed -i -e '/^#/d' /etc/inittab
sed -i -e '/^\s*$/d' /etc/inittab
echo "1:2345:respawn:/sbin/getty 38400 tty1" >> /etc/inittab
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab
rm -f /etc/ssh/ssh_host_*
echo '
#!/bin/sh
### BEGIN INIT INFO
# Provides: Generates new ssh host keys on first boot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Generates new ssh host keys on first boot
# Description: Generates new ssh host keys on first boot
### END INIT INFO
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ""
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ""
insserv -r /etc/init.d/ssh_gen_host_keys
rm -f \$0
' > /etc/init.d/ssh_gen_host_keys
chmod a+x /etc/init.d/ssh_gen_host_keys
insserv /etc/init.d/ssh_gen_host_keys
dpkg-reconfigure tzdata
Удалим лишние пакеты, если знаем какие. 😉 Например:
dpkg --purge modutils ppp pppoeconf pppoe pppconfig module-init-tools
Далее доставляем всё что нужно в этом шаблоне. Например:
aptitude install ssh quota less mc mtr
Очищаем кэш и вылезаем из контейнера.
aptitude --purge clean
exit
Третий этап:
Теперь контейнер надо собрать в шаблон (template):
vzctl set 777 --ipdel all --save
>/var/lib/vz/private/777/etc/resolv.conf
rm -f /var/lib/vz/private/777/etc/hostname
vzctl stop 777
cd /var/lib/vz/private/777
tar --numeric-owner -zcf /var/lib/vz/template/cache/debian-7.0-amd64-custom.tar.gz .
Вот и всё. Теперь у нас есть template для установки Debian 7 Wheezy в контейнер OpenVZ, например, в Proxmox.
Проверим — работает ли:
# vzctl create 888 --ostemplate debian-7.0-amd64-custom --config basic
Creating container private area (debian-7.0-amd64-custom)
Performing postcreate actions
CT configuration saved to /etc/pve/openvz/888.conf
Container private area was created
Теперь можно наши эксперименты удалить (или оставить — по желанию):
# vzctl destroy 777
# vzctl destroy 888
Внешние серверы в локальном облаке на Proxmox
Как несложно догадаться имеем облако на базе Proxmox.
Все узлы имеют по два интерфейса. Один из них (eth0) смотрит в локальную сеть, а второй (eth1) — в глобальный интернет. Однако, сами узлы не имеют внешних адресов. IPv4 нынче дороги, да и просто незачем.
В этом облаке нужно создать виртуальную машину — контейнер (CT) с внешним адресом.
Виртуальная сеть (aka venet) не подходит ибо маршрутизироваться не будет. Поэтому будем использовать veth. Чтобы это сделать на узле нужно сначала создать мост (bridge) в котором будет состоять eth1. Далее нужно создать CT с veth сетью. Ну или добавить veth интерфейс в существующую, но при этом эта машина должна быть выключена. Обычно получаем eth0, но уже в CT. 😉
Proxmox не даёт настроить IP адрес для veth для VM. Поэтому лезем в /var/lib/vz/private/CTID/etc/network/interfaces на узле и пишим конфиг вручную. Он стандартный:
auto eth0 iface eth0 inet static address IP netmask 255.255.255.0 gateway GW
Теперь запускаем CT и подключаемся к нему по ssh.