Поиск по моему блогу

Создание шаблона TrixBox для OpenVZ



Продолжаем заметки о Linux.
Сегодня будем самостоятельно изготавливать шаблон для OpenVZ. Для большинства популярных linux-дистрибутивов не составляет труда найти готовый шаблон в интернете (например на сайте OpenVZ), но не для всех. Поэтому будем учиться тому, как изготовить шаблон самостоятельно. В качестве цели я выбрал дистрибутив Trixbox версии 2.8 (текущий стабильный релиз 2.8.0.4).
Собственно Trixbox 2.8 это CentsOS 5.5 с предустановленными Asterisk, FreePBX и прочими приятными мелочами. Распространяется он в виде iso-файла. Наша конечная цель - сделать из этого iso полноценный шаблон для OpenVZ и заставить его работать.

Первое, что нам нужно сделать это установить систему на отдельный компьютер или на виртуальную машину. Разницы нет никакой, выбирайте тот вариант, который удобней вам. Я буду устанавливать в виртуалку на VMWare. Выделите для системы 512 Mb оперативки и диск размером 10 Gb - нам понадобится сделать архив всей системы.
Установка Trixbox не отличается от установки любого другого дистрибутива linux, только вопросов при установке будет значительно меньше. Система полностью сконфигурирована, вам останется только выбрать ваш регион и задать пароль root-а. После этого система самостоятельно установится в течении 10 минут.







При возникновении вопросов с установкой обращайтесь к официальному руководству trixbox quick install guide.
Заходим в систему под root-ом. Нам нужно сделать архив всех файлов и после передать его на компьютер с OpenVZ. Сначала создадим файл со списком того, что не нужно включать в архив. Для этого выполним команду:
nano /tmp/exclude-list
Запишем в файл следующее:
.bash_history
lost+found
/dev/*
/mnt/*
/tmp/*
/proc/*
/sys/*
/usr/src/*
Теперь архивируем:
tar --numeric-owner -czvf /tmp/centos-5-i386-trixbox-2.8-image.tar.gz -X /tmp/exclude-list /
Архив готов и занимает чуть меньше 500 Mb. Нужно передать его на целевую систему. Сделать это можно как угодно, например с помощью scp:
scp /tmp/centos-5-i386-trixbox-2.8-image.tar.gz tea@server.com:/tmp
Как видно из предыдущей команды архив передается на наш сервер в папку /tmp.
Виртуальная машина нам больше не нужна, можете смело ее удалять. Все дальнейшие действия будут производится непосредственно на сервере.
ВАЖНО! Все последующие действия будут производиться на работающем сервере с полными правами доступа (root). Очень внимательно вводите команды и перед тем как нажать Enter еще раз проверьте, что вы собираетесь редактировать или удалять!
Теперь мы вручную создадим виртуальное окружение (VE). После того как мы закончим мы получим работающий VPS с которого и снимем шаблон для дальнейшего использования.
Итак приступим. У меня все, что касается OpenVZ, лежит в директории /vz. Это символическая ссылка на /var/lib/vz. Сделать ее просто:
ln -s /var/lib/vz /vz
Создаем пустой контейнер для Trixbox и разархивируем в него полученный ранее архив. VID у меня будет 102:
cd /vz/private
mkdir 102
cd 102
tar xvfz /tmp/centos-5-i386-trixbox-2.8-image.tar.gz
Создаем конфигурационный файл для нашего контейнера:
cp /etc/vz/conf/ve-vps.basic.conf-sample /etc/vz/conf/102.conf
Отредактируем файл /etc/vz/conf/102.conf:
nano /etc/vz/conf/102.conf
Сразу после окончания шапки с комментарием допишем строку:
OSTEMPLATE="centos-5"
Создадим директории для шаблона:
mkdir -p /vz/template/centos/5/i386/{config,vz-addons,yum-cache}
В директории /vz/template/centos/5/i386/config создадим файл rpm и запишем в него 43:
echo 43 > /vz/template/centos/5/i386/config/rpm
В директории /vz/template/centos/5/i386/config создадим файл yum.conf
nano /vz/template/centos/5/i386/config/yum.conf
Запишем в него следующее:
[main]
cachedir=/vz/template/centos/5/i386/yum-cache/
reposdir=/dev/null
installonlypkgs=
 
[centos5-base]
name=CentOS 5 - i386 - Base
enabled=1
gpgcheck=1
 
[centos5-updates-released]
name=CentOS 5 - i386 - Released Updates
enabled=1
gpgcheck=1
В директории /vz/template/centos/5/i386/config создадим файл minimal.list
nano /vz/template/centos/5/i386/config/minimal.list
Запишем в него следующее:
# $Id: minimal.list,v 1.1 2005/10/10 15:23:38 kir Exp $
#
# List of packages to be installed into VPS
# to form a "base" of Fedora Core 4 "minimal" template
#
# NOTE: if you change this file, you have to re-create OS template cache
# from scratch, e.g. run vzpkgcache -f fedora-core-4--minimal
 
ed
basesystem
coreutils
openssh-clients
openssh-server
less
vim-minimal
iptables
rpm
crontabs
gzip
passwd
rootfiles
sudo
tar
tmpwatch
 
# Add-ons for VZ
dummy-centos-4
vzdev
MAKEDEV
Теперь приступим к подготовке самой системы. Нам нужно адаптировать ее для корректного функционирования в виртуальном окружении.
Убедитесь, что вы редактируете файлы в виртуальном окружении, а не в директории /etc своего сервера!
Удаляем пароль пользователя root. Для этого отредактируем файл /vz/private/102/etc/shadow и заменим хеш пароля на !!.
nano /vz/private/102/etc/shadow
После редактирования строка с записями root должна выглядеть примерно так:
root:!!:15027:0:99999:7:::
Удалим из файла /vz/private/102/etc/inittab вызов mingetty, т.к. у нас отсутствуют физические консоли:
sed -i -e '/getty/d' /vz/private/102/etc/inittab
В виртуальном окружении нет физических устройств для монтирования поэтому удалим файл /vz/private/102/etc/mtab и заменим его символической ссылкой на /proc/mounts:
rm -f /vz/private/102/etc/mtab
ln -s /proc/mounts /vz/private/102/etc/mtab
Отредактируем файл /vz/private/102/etc/rc.sysinit и закомментируем команды отвечающие за очистку mtab:
nano /vz/private/102/etc/rc.sysinit
После редактирования эти строки будут выглядеть так:
# Clear mtab
# (> /etc/mtab) &> /dev/null
 
# Remove stale backups
# rm -f /etc/mtab~ /etc/mtab~~
Так же закомментируем в /vz/private/102/etc/rc.sysinit запуск udev:
# /sbin/start_udev
Удалим в файле /vz/private/102/etc/fstab все строки кроме той, в которой монтируется устройство /dev/pts:
nano /vz/private/102/etc/fstab
Останется только это:
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
Создадим ноды устройств:
cd /vz/private/102/dev
mknod ptmx c 5 2
mkdir pts
/sbin/MAKEDEV ttyp ptyp
mknod null c 1 3
mknod -m 644 random c 1 8
mknod -m 644 urandom c 1 9
Чтобы не глючил yum сделаем еще вот такой финт ушами:
mknod -m 644 /vz/private/102/lib/udev/devices/urandom c 1 9
Создадим директорию /vz/private/102/var/lock/rpm:
mkdir -p /vz/private/102/var/lock/rpm
Запретим IPv6. Для этого отредактируем файл /vz/private/102/etc/sysconfig/network и изменим значение параметра NETWORKING_IPV6 на no:
nano /vz/private/102/etc/sysconfig/network
Добавим в файл /vz/private/102/etc/modprobe.d/blacklist две строки:
blacklist ipv6
blacklist net-pf-10
Отключим все физические сетевые интерфейсы. Для этого отредактируем файл /vz/private/102/etc/sysconfig/network-scripts/ifcfg-ethX, где X - номер интерфейса начиная с нуля. Изменим значение параметра ONBOOT на no:
nano /vz/private/102/etc/sysconfig/network-scripts/ifcfg-eth0
Удаляем файл /vz/private/102/etc/resolv.conf - он будет создаваться системой при каждом запуске виртуального окружения:
rm -f /vz/private/102/etc/resolv.conf
У меня в сети есть proxy-сервер с адресом 192.168.0.100 и портом 3128 и я хочу что бы yum работал через него. Для этого создадим файл /vz/private/102/etc/profile.d/proxy.sh:
nano /vz/private/102/etc/profile.d/proxy.sh
Добавим в него две строки:
export http_proxy=http://192.168.0.100:3128
export HTTP_PROXY=http://192.168.0.100:3128
Сделаем его исполняемым:
chmod +x /vz/private/102/etc/profile.d/proxy.sh
На этом подготовка закончена. Осталось задать параметры новому виртуальному окружению и попробовать запустить его. Не буду описывать все параметры, т.к. я это уже делал в предыдущей статье, просто перечислю их:
vzctl set 102 --cpulimit 100 --save
vzctl set 102 --ipadd 192.168.0.102 --save
vzctl set 102 --name trixbox --save
vzctl set 102 --hostname ve102.server.com --save
vzctl set 102 --nameserver 192.168.0.1 --save
vzctl set 102 --vmguarpages 510M:512M --privvmpages 750M:768M --save
vzctl set 102 --diskspace 4G:5G --save
vzctl set 102 --onboot yes --save
Запускаем:
vzctl start 102
Для нормального функционирования asterisk ему необходим tty9. Разрешим VE его использование:
vzctl set 102 --devices c:4:9:rw --save
vzctl exec 102 /sbin/MAKEDEV tty
vzctl exec 102 /sbin/MAKEDEV pty
Проверим работоспособность Trixbox. Для этого зайдем по адресу http://192.168.0.102

Все в порядке, все службы работают! Для входа в панель администратора используйте логин maint и пароль password - это данные по умолчанию.
Заходим в VPS:
vzctl enter 102
Обновляем систему:
yum -y --skip-broken update
shutdown -r now
Некоторые модули ядра не будут обновляться, т.к. у них в зависимостях стоит более новая версия ядра, чем у меня, поэтому я использую ключ --skip-broken.
Осталось теперь только создать шаблон и после этого разворачивать новый сервер за пару кликов. Выходим из виртуального окружения и останавливаем его:
vzctl stop 102
Создаем шаблон:
tar --numeric-owner -czvf /vz/template/cache/centos-5-trixbox-2.8-x86.tar.gz /vz/private/102/
Так же сделаем копию текущей конфигурации для дальнейшего использования:
cp /etc/vz/conf/102.conf /etc/vz/conf/ve-trixbox.conf-sample
Теперь, чтобы создать новый VPS из нашего нового шаблона достаточно ввести следующую команду:
vzctl create 103 --ostemplate centos-5-trixbox-2.8-x86 --config trixbox
На этом пока все. В следующем посте попытаемся сконфигурировать Trixbox.
P.S. Если у кого-то есть замечания/дополнения с удовольствием выслушаю и добавлю.

Комментариев нет:

Реклама от BigBN