Создание дисковых шаблонов

Материал из ISPWiki

Перейти к: навигация, поиск

Содержание

Создание дисковых шаблонов для FreeBSD

Для начала нужно установить исходники операционной системы, они располагаются в /usr/src

Далее создадим директорию, в которой будет расположен дисковый шаблон, например:

mkdir -p /vs/tsrc/FreeBSD-8-minimal

Соберем мир и установим его в созданную директорию

cd /usr/src/
make buildworld
make DESTDIR=/vs/tsrc/FreeBSD-8-minimal installworld
make DESTDIR=/vs/tsrc/FreeBSD-8-minimal distribution
cp /etc/resolv.conf /vs/tsrc/FreeBSD-8-minimal/etc/resolv.conf

Итак, мы имеем шаблон "дефаултной" системы, изменим по своему усмотрению конфиги, поставим дополнительные пакеты и т.д. Для этого удобнее всего войти внутрь шаблона и проводить все операции как на обычном сервере, для этого выполним следующие команды:

mount -t devfs devfs /vs/tsrc/FreeBSD-8-minimal/dev
chroot /vs/tsrc/FreeBSD-8-minimal /bin/csh

Теперь мы внутри шаблона, редактируем все, что считаем нужным, устанавливаем порты, пакеты и т.д.

Для инициализации виртуального сервера можно создать файл с именем

/root/.vpsinstall

он будет запущен при создании виртуального сервера

пример файла .vpsinstall

#!/bin/sh
HOST=`hostname`
IP=$1
echo "${IP}	${HOST}" >> /etc/hosts
echo "hostname=\"$HOST\"" >> /etc/rc.conf

Обычно он бывает гораздо сложнее и выполняет функции настройки конфигов по конкретным IP-адресам и доменному имени, генерирует SSL сертификаты и пароли, выполняет инициализацию баз данных и т.д.

По завершении работы по создании шаблона, команда exit вернет вас из шаблона.

Создаем конфиг со списком файлов, которые не нужно включать в шаблон (например .history)

cd /vs/tsrc/FreeBSD-8-minimal
echo "root/.history" > .uptmp.exclude
echo "tmp/" >> .uptmp.exclude

Запускаем утилиту архивирования шаблона:

/usr/local/ispmgr/sbin/uptmp -C FreeBSD-8-minimal /vs/tsrc/FreeBSD-8-minimal

В текущей директории получим файлы

  • VERSION - хранит имя шаблона и текущую версию
  • .uptmp - список файлов шаблона (НЕ УДАЛЯЙТЕ ЕГО, он необходим для создания обновлений)
  • install.tgz - архив, из которого можно развернуть шаблон

Файл install.tgz можно залить на свой сервер (ftp или http), c которого будет производится его установка в VDSmanager

scp install.tgz install.tgz.md5 download@master.download.ispsystem.com:~/htdocs/FreeBSD-8.0/i386/VDSmanager/DiskTemplate/FreeBSD-8-minimal/
rm install.tgz install.tgz.md5

После этого заходим в интерфейс VDSmanager - > "Шаблоны диска" и устанавливаем созданный шаблон.

Обновление дисковых шаблонов для FreeBSD

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

mount -t devfs devfs /vs/tsrc/FreeBSD-8-minimal/dev
chroot /vs/tsrc/FreeBSD-8-minimal /bin/csh

Если вам необходимо выполнить какие-либо действия после обновления, например, для перезапуска сервисов, создайте скрипт

/.uptmp.afterupdate

После разворачивания шаблона он будет выполнен на каждом из запущенных виртуальных серверов

После этого запускаем утилиту создания обновления шаблона

/usr/local/ispmgr/sbin/uptmp -c /vs/tsrc/FreeBSD-8-minimal

и заливаем файлы на свой сервер

cd /vs/tsrc/FreeBSD-8-minimal
scp update-2.tgz update-2.tgz.md5 download@master.download.ispsystem.com:~/htdocs/FreeBSD-8.0/i386/VDSmanager/DiskTemplate/FreeBSD-8-minimal/
rm update-2.tgz update-2.tgz.md5

Цифра 2 в данном случае обозначает номер версии шаблона, и она будет постоянно увеличиваться

Создание дисковых шаблонов XEN

По сути, виртуальная машина xen - это обычный сервер, так что надо на него все устанавливать самым обычным способом (в HVM режиме воспользовавшись стандартным инсталятором). Если виртуальный сервер должен работать в VM режиме, то там надо будет ставить некоторые специальные пакеты (например: udev) и не надо ставить ядро. Оно должно лежать где-нибудь рядом с шаблоном диска на dom0 и должно поддерживать xen. Ничего плохого в использовании одного ядра (двух: i386 и amd64) для всех виртуальных машин я не вижу. Они, кстати, в этом случае будут память общую для сегмента кода использовать. Разве что, найдется маньяк, которому нужны непременно разные версии.

FreeBSD в VM режиме пока не работает (был какой-то проект, но похоже загнулся). Они обещают в "8ке" поддержку xen.

Debian (используя debootstrap)

Получаем "голую", абсолютно не настроенную систему (т.е. только необходимые файлы будут распакованы).

mount -o loop <image path> /mnt/debian
/usr/sbin/debootstrap --arch ARCH lenny /mnt/debinst http://ftp.us.debian.org/debian
mount -t proc /proc /mnt/debinst
LANG=C chroot /mnt/debinst /bin/bash
cd /dev
MAKEDEV generic

Редактируем fstab, он должен выглядеть примерно так:

/dev/hda         /             ext3    defaults                 0    1
/dev/hdb         none          swap    sw                       0    0
proc             /proc         proc    defaults                 0    0

Настраиваем сеть. Прописываем hostname в /etc/hostname. Прописываем hostname в /etc/hosts. Редактируем /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.0.42
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

Настраиваем apt. Редактируем /etc/apt/sources.list:

deb-src http://ftp.us.debian.org/debian lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

Устанавливаем пароль root. И ставим openssh-server (по умолчанию его нет) + udev (без него sshd работать не будет).

Вот собственно и все. Теперь можно настроить всякие мелочи.

  • Вынести ненужные пакеты (например dhcp-client).
  • Если хочется иметь безпарольную консоль, открываем /etc/inittab и заменяем в следующей строке /sbin/getty на /bin/bash:
1:2345:respawn:/sbin/getty 38400 tty1

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

xm console <имя виртуального сервера>

Чтобы отключиться от консоли, нажите Ctrl+[

Ubuntu (используя debootstrap)

Для этого надо установить debootstrap скрипты для ubuntu. Вот как это делается на Debian:

#!/bin/bash

# add jaunty repository
cat <<EOF> /etc/apt/sources.list.d/jaunty.list
deb http://archive.ubuntu.com/ubuntu/ jaunty main restricted
deb-src http://archive.ubuntu.com/ubuntu/ jaunty main restricted
EOF

# update
apt-get update
 
# install debootstrap
apt-get install -y --force-yes debootstrap
 
# remove repository
rm /etc/apt/sources.list.d/jaunty.list
apt-get update

После этого процедура полностью аналогична установки Debian.

CentOS, Fedora (используя rinse)

debootstrap умеет устанавливать только Debian (вернее дистрибутивы работающие через apt). Если хочется поставить что-то работающее через yum: centos или fedora, rinse - то что надо.

apt-get install rinse

Правда и тут без граблей не обошлось. У него в списке пакетов для centos5 похоже нескольких не хватает (и без них ничего не встает). Поэтому надо дописать в файл /etc/rinse/centos-5.packages:

nss
nspr
python-iniparse

Теперь ставим голую ОС (процедура во многом схожая с установкой Debian)

mount -o loop <image path> /mnt
rinse --arch i386 --distribution centos-5 --directory /mnt
mount -t proc /proc /mnt/proc
LANG=C chroot /mnt /bin/bash
cd /dev
MAKEDEV generic

Редактируем fstab, должен выглядеть примерно так:

/dev/hda         /             ext3    defaults                 0    1
/dev/hdb         none          swap    sw                       0    0
proc             /proc         proc    defaults                 0    0
none             /dev/pts      devpts  gid=5,mode=620           0    0

Настраиваем сеть. Прописываем hostname в /etc/hosts. Редактируем /etc/sysconfig/network-scripts/ifcfg-eth0:

TYPE=Ethernet
DEVICE=eth0
#BOOTPROTO=none
#BOOTPROTO=dhcp
ONBOOT=yes
IPADDR=82.146.37.118
NETWORK=82.146.37.0
NETMASK=255.255.255.0
BROADCAST=82.146.37.255
GATEWAY=82.146.37.254

/etc/sysconfig/network:

NETWORKING=yes
HOSTNAME=centos5-i386.ispsystem.net
GATEWAY=82.146.37.254

Для Fedora7 надо еще passwd поставить.

Устанавливаем пароль root. И ставим openssh-server (поумолчанию его нет). Добавляем (раскоменчиваем) две строки в /etc/ssh/sshd_config:

PermitRootLogin yes
PasswordAuthentication yes

Использование xen-tools

Для упрощения установки можно воспользоваться пакетом xen-tools (если xen собирался вручную, возникнут проблемы, т.к. он поставит xen из репозитария через зависимости). Он позволяет упростить создание шаблона. Пример:

xen-create-image –hostname=hobbiton –dist=etch \
    –ip=192.168.1.10 –netmask=255.255.255.0 –gateway=192.168.1.1 \
    –lvm=lvmxen –debootstrap
 xm create -c hobbiton.cfg

Ручная установка

Иногда бывает тяжело создать нормальный шаблон для автоматической установки ОС, или появляется необходимость тонкой настройки ОС на этапе установки (например, нужно определенным образом разбить разделы на жестком диске, установить ОС Windows). В этих случаях можно создать шаблон для ручной установки ОС с использование стандартной процедуры установки. Для этого вам понадобится образ установочного диска вашей ОС.

Предположим, у вас есть образ для установки Windows 7 (/xen/iso/Windows7.iso).

  1. Создаем каталог /xen/template/Windows7.
  2. В нем создаем файл VERSION (его содержимое будет отображаться в виде версии в списке шаблонов VDSmanager)
  3. Создаем шаблон конфига XEN (файл с именем config)
kernel = "/usr/lib64/xen/boot/hvmloader"
builder='hvm'
name = "__NAME__"
pae=0
acpi=1
apic=1
vif = [ 'type=ioemu, ip=__IP__' ]
disk = [ '__TYPE__:__DISK__,hda,w', 'file:/xen/iso/Windows7.iso,hdb:cdrom,r' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
device_model = '/usr/lib64/xen/bin/qemu-dm'
boot='cd'
sdl=0
vnc=1
vncviewer=1
vncunused=0
vncdisplay=__ID__
vncpasswd='__PASSWD__'

Теперь вы можете создать VDS, используя шаблон Windows7. И, зайдя на него через VNC, установить Windows на ваш VDS.

Аналогичным образом можно установить и другие операционные системы, например, OpenBSD, в этом случае конфигурационный файл будет выглядеть так:

kernel = "/usr/lib64/xen/boot/hvmloader"
builder='hvm'
name = "__NAME__"
pae=0
acpi=1
apic=1
vif = [ 'type=ioemu, ip=__IP__, model=ne2k_pci' ]
disk = [ '__TYPE__:__DISK__,hda,w', 'file:/xen/iso/install47.iso,hdb:cdrom,r' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
device_model = '/usr/lib64/xen/bin/qemu-dm'
boot='cd'
sdl=0
vnc=1
vncviewer=1
vncunused=0
vncdisplay=__ID__
vncpasswd='__PASSWD__'
ne2000=1

В данном конфигурационном файле следует обратить особое внимание на модель сетевого адаптера - model=ne2k_pci и ne2000=1, т.к. с re (по-умолчанию) внутри VDS не работает сеть из-за конфликта прерываний.

Скрипты, вызываемые VDSmanager

setpass <ip> '<mountdir>' < <password>
setname <ip> '<mountdir>' '<name>'
setip <ip> '<network>' '<netmask>' '<gateway>' '<mountdir>'
setsize <path> <size>
getused '<name>'

ip - основной IP адрес сервера (если адрес в конфиге не указан, может быть указано имя VDS, например, в при работе с уже существующими VDS, созданными не через VDSmanager).

mountdir - каталог, куда на данный момент смонтирован приватный диск.

network, netmask, gateway - выбирается из конфига VDSmanager, в зависимости от IP адреса сервера.

path - путь до приватного диска (файла или ресурса LVM).

size - размер в мегабайтах.

name - имя сервера (hostname).

password - пароль plaintext. Для шифрования можно использовать утилиту /usr/local/ispmgr/sbin/crypt.

Кроме того в каталоге с шаблоном могут находиться следующие файлы:

VERSION - версия шаблона.

image - .tgz архив, содержащий файлы VDS. В этом случае будет создан раздел ext3, в который будут распакованы все файлы из этого архива. Если это не .tgz, то считается, что это бинарный шаблон диска VDS.

config - шаблон конфигурации для VDS. В нем могут быть использованы следующие макросы:

  • __TYPE__ - тип диска (для LVM - phy, для файлов - file)
  • __DISK__ - путь до приватного диска
  • __IP__ - ip адрес сервера + имя bridge интерфейса, если необходимо. Например: 1.1.1.1, bridge=eth0
  • __NAME__ - имя сервера
  • __ID__ - VNC id
  • __PASSWD__ - пароль (plaintext)
  • __TEMPL__ - путь до каталога с шаблоном

+ любые файлы, которые небходимы для настройки и работы VDS.

Для того, чтобы могло определяться занятое место на диске, необходимо наличие внутри шаблона приложения /sbin/xenclient

Создание дисковых шаблонов openVZ

В качестве основы для шаблона лучше использовать имеющиеся шаблоны:

http://download.openvz.org/template/precreated/

Можно создать шаблон через debootstrap и т.п., но могут возникнуть определенные проблемы, которые в шаблонах с openvz.org уже могут быть решены.


  • Скачиваем шаблон, создаём директорию для шаблона и распаковываем его в данную директорию.

Выполнять команды необходимо с правами пользователя root.

mkdir new_template
tar -xvzpf fedora-13-x86.tar.gz -C new_template
  • Монтируем procfs
mount -t proc none new_template/proc
  • И делаем чрут
chroot new_template
  • Далее, устанавливаем пакеты, настраиваем систему.
  • Чтобы выполнить какие-либо действия при создании VDS, необходимо прописать их в скрипт, который удалит себя после выполнения.

Для centos это можно сделать следующим образом:

  1. Создать шеловый скрипт /etc/rc3.d/S50vdsinstall
    echo '#!/bin/sh' > /etc/rc3.d/S50vdsinstall
    echo '' >> /etc/rc3.d/S50vdsinstall
    chmod +x /etc/rc3.d/S50vdsinstall
  2. В скрипте прописать какие-либо действия
  3. В самом конце файла прописать команду для его удаления:
    echo 'rm -f /etc/rc3.d/S50vdsinstall' >> /etc/rc3.d/S50vdsinstall
    В результате этот скрипт будет запускаться при старте системы и после выполнения удалять себя.


  • После того, как шаблон настроен, выходим из чрута
exit
  • Отмонтируем proc и убьём все процессы, использующие файлы в директории new_template
fuser -k new_template/
umount new_template/proc
  • И заархивируем шаблон
tar -czpf fedora-13-my-x86.tar.gz -C net_template .

Имя файла обязательно должно начинаться с имени дистрибутива. Так как openVZ, в зависимости от имени, по-разному настраивает сеть, hostname и т.д внутри VDS

Получившийся файл fedora-13-my-x86.tar.gz на сервере помещается в директорию с шаблонами. Обычно, это /vz/template/cache/

Была ли эта информация полезной? Да | Нет
Личные инструменты