Обновление дискового шаблона XEN c ОС Linux CentOS для VDSmanager

VDSmanager комплектуется шаблоном Centos-6-amd64-minimal с CentOS v6.3. Встала задача обновить его до актуальной на текущий момент v6.5. Естественно, что данная работа базируется на опыте, полученном мною при создании шаблонов с ОС Linux Debian. Однако, на этот раз я пошел несколько иным путем.
Поскольку в CentOS в отличие от Debian возрастает только минорная версия продукта, т.е. изменения не столько глобальны, то было принято решение не создавать шаблон с нуля, а обновить Centos-6-amd64-minimal до v6.5, используя возможности встроенного менеджера пакетов yum. Это позволяет существенно снизить трудозатраты.
Как и в случае с Debian нам потребуется материнская VDS с ОС Linux, поддерживающая chroot. В моем случае это была все та же "templates-debian.amd64" на базе шаблона Debian-6-amd64-minimal, оставшаяся от экспериментов с Debian. Начинаем с того, что распаковываем шаблон Centos-6-amd64-minimal и создаем его копию с именем CentOS-6-amd64-minimal-SIM-Networks. Как я уже писал ранее, оно обусловлено заказчиком: немецкий хостинг-провайдер SIM-Networks.

wget http://download.ispsystem.com/xen2/Centos-6-amd64-minimal.tgz
tar zxvf Centos-6-amd64-minimal.tgz -C /templates/Centos-6-amd64-minimal/
cd /templates/Centos-6-amd64-minimal
tar zxvf image -C /mnt/Centos-6-amd64-minimal/
rsync -av --delete --progress /mnt/Centos-6-amd64-minimal/* /mnt/CentOS-6-amd64-minimal-SIM-Networks/

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

mount -t proc /proc /mnt/CentOS-6-amd64-minimal-SIM-Networks/proc
LANG=C chroot /mnt/CentOS-6-amd64-minimal-SIM-Networks /bin/bash

Настраиваем и подключаем дополнительные репозитории: Extra Packages for Enterprise Linux (EPEL), RPMForge, ATrpms.

yum-config-manager --enable centosplus --enable contrib
rpm --import https://fedoraproject.org/static/0608B895.txt
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
rpm -Uvh http://dl.atrpms.net/el6.5-x86_64/atrpms/stable/atrpms-repo-6-7.el6.x86_64.rpm

Запускаем процедуру обновления ОС CentOS:

yum -y update

Номинально обновление можно считать законченным, но я на этом не остановился и произвел тонкую настройку системы с целью улучшения удобства ее эксплуатации, устранения некоторых мелких проблем. Установим дополнительные пакеты:

yum -y install screen less mc unrar htop bind-utils traceroute tcpdump telnet iotop lftp sysstat dstat atop bzip2 zip ntpdate rsync wget curl smartmontools iftop iptraf mtr nano

Включим автозагрузку atop:

chkconfig --level 12345 atop on

Для установки системной кодировки UTF-8 необходимо создать файл "/mnt/CentOS-6-amd64-minimal-SIM-Networks/etc/sysconfig/i18n" следующего содержания:

LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

Настроим часовой пояс:

rm /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Для того, что бы задать редактор по умолчанию необходимо создать файл "/mnt/CentOS-6-amd64-minimal-SIM-Networks/etc/profile.d/editor.sh" следующего содержания:

export VISUAL="/usr/bin/mcedit"
export EDITOR="/usr/bin/mcedit"

А для изменения приглашения интерпретатора командной оболочки BASH – "/mnt/CentOS-6-amd64-minimal-SIM-Networks/etc/profile.d/bash-prompt.sh":

export PS1="[\u@\h \W]$ "

Ежедневно из планировщика задач cron запускается процедура обновления базы данных утилиты locate. Для того, что бы не было проблем в ее работе, необходимо создать специальную группу пользователей:

groupadd -g 21 slocate

Для уменьшения объема будущего шаблона очистим кэш менеджера пакетов:

yum clean packages

Опять же перейдем с использования файловой системы ext3 на ext4. Для этого внесем корректировки в файл "/mnt/CentOS-6-amd64-minimal-SIM-Networks/etc/fstab":

/dev/xvda         /             ext4    defaults,nobarrier                 0    1
proc             /proc         proc    defaults                 0    0

Чистим историю интерпретатора командной оболочки BASH и выходим из окружения chroot создаваемого шаблона:

history -c && history -w && rm ~/.bash_history
exit

Переходим к созданию скриптов и фалов настройки необходимых для развертывания VDS из VDSmanager. Создадим каталог "/templates/CentOS-6-amd64-minimal-SIM-Networks", в который необходимо скопировать следующий набор файлов из Centos-6-amd64-minimal:

config
dropip
getfile
getused
move
setfile
setip
setname
setpass
setup
VERSION

Файл "config" – это шаблон домена XEN, он задает системные параметры VDS. В нем необходимо исправить значения двух опций: kernel и ramdisk.

kernel = "__TEMPL__/vmlinuz-3.13.4-1.el6xen.x86_64"
ramdisk = "__TEMPL__/initramfs-3.13.4-1.el6xen.x86_64.img"
acpi = 1
apic = 1
name = "__NAME__"
root = "/dev/xvda ro"
vif = [ 'ip=__IP__' ]
disk = [ '__TYPE__:__DISK__,xvda,w' ]
vfb = ['type=vnc, vncunused=0, vncdisplay=__ID__, vncpasswd=__PASSWD__']
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
serial='pty'
extra='xencons=hvc0'

Файлы ядра и загрузочного диска RAM необходимо скопировать в каталог "/templates/CentOS-6-amd64-minimal-SIM-Networks":

cp /mnt/CentOS-6-amd64-minimal-SIM-Networks/boot/initramfs-3.13.4-1.el6xen.x86_64.img /templates/CentOS-6-amd64-minimal-SIM-Networks/
cp /mnt/CentOS-6-amd64-minimal-SIM-Networks/boot/vmlinuz-3.13.4-1.el6xen.x86_64 /templates/CentOS-6-amd64-minimal-SIM-Networks/

"setup" – это скрипт BASH для первичного конфигурирования VDS. В нем необходимо произвести две правки: заменить вызов mkfs.ext3 на mkfs.ext4, и обеспечить заполнение файл "/etc/hosts".

#!/bin/sh -x

PASS=`cat | sbin/crypt`
FILE=${1#*:}
/sbin/mkfs.ext4 -F $FILE || exit 1
TMP=`mktemp -d tmp/vdssetup-XXXXXX`

if [ $? -ne 0 ]; then exit 1; fi
trap "rm -rf $TMP" EXIT

mount -o loop $FILE $TMP || exit 1
trap "umount $TMP && rm -rf $TMP" EXIT

tar -x -z -p -C $TMP -f ${0%/*}/image || exit 1
cp /etc/resolv.conf $TMP/etc/

echo "TYPE=Ethernet" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "DEVICE=eth0" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "ONBOOT=yes" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPADDR=$2" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETWORK=$3" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETMASK=$4" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "BROADCAST=$5" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0
echo "GATEWAY=$6" >> $TMP/etc/sysconfig/network-scripts/ifcfg-eth0

echo "NETWORKING=yes" >> $TMP/etc/sysconfig/network
echo "GATEWAY=$6" >> $TMP/etc/sysconfig/network
echo "HOSTNAME=$7" >> $TMP/etc/sysconfig/network

echo "$2        $7" >> $TMP/etc/hosts

ssh-keygen -t rsa -N '' -f $TMP/etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -N '' -f $TMP/etc/ssh/ssh_host_dsa_key

( /usr/sbin/chroot $TMP /usr/sbin/usermod -p $PASS root ) || exit 1

Правка "move" сводится только к замене вызова mkfs.ext3 на mkfs.ext4. Это скрипт используется при переносе образа диска из одного файла в другой, например, в случае увеличения его размера.

#!/bin/sh -x

FROM=${2#*:}
TO=${3#*:}
/sbin/mkfs.ext4 -F $TO || exit 1
TMP=`mktemp -d tmp/vdssetup-XXXXXX`
if [ $? -ne 0 ]; then exit 1; fi
trap "rm -rf $TMP" EXIT

mount -o loop $TO $TMP || exit 1
trap "umount $TMP && rm -rf $TMP" EXIT

SRC=`mktemp -d tmp/vdssetup-XXXXXX`
if [ $? -ne 0 ]; then exit 1; fi
trap "umount $TMP && rm -rf $TMP $SRC" EXIT

mount -o loop $FROM $SRC || exit 1
trap "umount $TMP $SRC && rm -rf $TMP $SRC" EXIT

tar -c -f- -C $SRC . | tar -x -f- -p -C $TMP

Остальные скрипты и файлы настроек остаются неизменными.
Теперь необходимо создать архив со структурой каталогов для будущего шаблона с ОС Linux CentOS v6.5:

cd /mnt/CentOS-6-amd64-minimal-SIM-Networks/
umount /mnt/CentOS-6-amd64-minimal-SIM-Networks/proc
tar czvf image ./ --exclude=image

Перемещаем файл "image"в каталог "/templates/CentOS-6-amd64-minimal-SIM-Networks" и создаем архив с дисковым шаблоном ОС Linux CentOS v6.5:

mv /mnt/CentOS-6-amd64-minimal-SIM-Networks/image /templates/CentOS-6-amd64-minimal-SIM-Networks/
cd /templates/CentOS-6-amd64-minimal-SIM-Networks/
tar czvf CentOS-6-amd64-minimal-SIM-Networks.tgz ./ --exclude=CentOS-6-amd64-minimal-SIM-Networks.tgz

Архив "CentOS-6-amd64-minimal-SIM-Networks.tgz" содержит дисковый шаблон. Теперь его следует инсталлировать на сервер с VDSmanager, как это было описано ранее.

Похожие публикации

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>