Интеграция ISPmanager Lite в дисковый шаблон XEN c ОС Linux Debian для VDSmanager

В этой заметке углубим наработки, изложенные мною ранее в другом материале. А именно интегрируем панель управления ISPmanager Lite v4.XX в дисковый шаблон XEN c ОС Linux Debian v7.XX. Это позволит иметь образ VDS с уже предустановленной ISPmanager, для работы с которой лишь потребуется соответствующая лицензия.
Опять же в данной статье повествование будет вестись на примере архитектуры i386, однако, для amd64 все действия аналогичны. За основу берем дисковый шаблон, который был создан в предыдущем материале. В родительской VDS создаем его копию, изменив имя на Debian-7-amd64-ispmgr-SIM-Networks/Debian-7-i386-ispmgr-SIM-Networks:

rsync --progress --delete -avh /mnt/Debian-7-i386-minimal-SIM-Networks/ /mnt/Debian-7-i386-ispmgr-SIM-Networks/

С помощью chroot войдем в эту систему:

mount -t proc /proc /mnt/Debian-7-i386-ispmgr-SIM-Networks/proc
LANG=C chroot /mnt/Debian-7-i386-ispmgr-SIM-Networks /bin/bash

Далее переходим к инсталляции ISPmanager привычным образом:

wget "http://download.ispsystem.com/install.sh"
sh install.sh

Естественно, что для выполнения данной операции необходима лицензия для ISPmanager Lite. Она должна быть выдана для основного IP-адреса родительской VDS. Несмотря на то, что создаваемый дисковый шаблон работает в chroot, тем не менее, он выполняется в окружении ядра родительской VDS. А значит, сетевые настройки у них будут идентичными. Пускай, в моем случае IP-адрес для определенности будет равен [85.31.29.208]. На заключительном этапе работы инсталляционного скрипта ISPmanager, при проверки работоспособности отдельных сервисов, вы можете получить ошибки, например для брандмауера и дисковых квот. Ничего страшного в этом нет, просто в родительской VDS отсутствуют необходимые настройки. Они появятся в VDS, для которых будет использован создаваемый шаблон.
Делаем резервную копию "/etc/shadow" и временно назначаем пароль администратору root:

cp /mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/shadow /mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/shadow.orig
passwd

Отправляемся в интерфейс Web ISPmanager: https://85.31.29.208:1500/ispmgr Там выполняем процедуры, связанные с первым входом в панель управления, устанавливаем и настраиваем недостающее ПО. Конкретно в моем случае – это nginx и XCache, часовой пояс в PHP.
Теперь произведем более тонкую настройку для устранения несерьезных типичных проблем. Добавим в конфигурационный файл "/mnt/Debian-7-i386-ispmgr-SIM-Networks/usr/local/ispmgr/etc/ispmgr.conf" следующие строки:

FSEncoding UTF-8

BackupPrior 19
BackupIOClass 3

path db4 /usr/bin/db5.1_dump -p /etc/sasldb2

Первая устраняет проблемы с кодировкой во встроенном текстовом редакторе ISPmanager, две следующих обеспечивают запуск процедуры архивации с самым низким приоритетом. Впрочем, наблюдения показывают, что пользы от этого в VDS никакого, производительность системы все равно сильно деградирует, когда запущены архиваторы. Но с другой стороны, вреда тоже нет, а потому оставим их. А последняя строка устранят проблему совместимости ISPmanager с БД Berkeley v5.XX.
Рекомендую в файлах "/mnt/Debian-7-i386-ispmgr-SIM-Networks/var/lib/phpmyadmin/config.inc.php" и "/mnt/Debian-7-i386-ispmgr-SIM-Networksusr/usr/share/phpmyadmin/config.inc.php" найти опцию "PmaAbsoluteUri" и заменить в ней протокол HTTP на HTTPS:

$cfg['PmaAbsoluteUri'] = 'https://'.$_SERVER["HTTP_HOST"].'/myadmin/';

В противном случае ваши клиенты, при попытке перейти по ссылке phpMyAdmin из ISPmanager рискуют получить ошибку "404 Not Found" от nginx.
Устраним проблему с правами доступа к каталогу с настройками AWStats:

chmod 755 /mnt/Debian-7-amd64-ispmgr-SIM-Networks/etc/awstats/

Настроим функционал pmadb в phpMyAdmin:

dpkg-reconfigure -plow phpmyadmin

Клиентам часто необходим mod_expires в Apache, поэтому сразу подключим его прямо в шаблоне:

ln -s /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled/expires.load

Имя хоста будет задаваться скриптом инициализации VDS, потому соответствующий файл настроек обнуляем:

truncate -s 0 /mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/hostname

Проводим аудит и удаляем лишнее из "/mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/hosts".
Удаляем файл с лицензией ISPmanager:

rm /mnt/Debian-7-i386-ispmgr-SIM-Networks/usr/local/ispmgr/etc/ispmgr.lic

Он нужен был временно только для проведения инсталляции. У клиентских VDS IP-адреса будут другими, а значит и лицензии потребуются другие. ISPmanager автоматически установит их при первом запуске.
Удаляем ранее назначенный пароль администратору root и восстанавливаем "/etc/shadow" из резервной копии:

passwd -d root
cp /mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/shadow.orig /mnt/Debian-7-i386-ispmgr-SIM-Networks/etc/shadow

Чистим кэш apt, историю интерпретатора командной оболочки BASH, очередь сообщений MTA Exim, вручную останавливаем СУБД MySQL, дабы не повредить таблицы, и выходим из окружения chroot создаваемого шаблона:

apt-get clean
service mysql stop
exim -bp | exiqgrep -i | xargs exim -Mrm
history -c && history -w && rm ~/.bash_history
exit

На этом этапе структура каталогов для будущего шаблона готова. Однако мы установили в него достаточно большое количество ПО, настройки которого отталкиваются от IP-адреса системы. Естественно, как уже отмечалось ранее, он будет меняться от VDS к VDS. Поэтому дисковый шаблон с интегрированной в него ISPmanager потребует ряд дополнительных настроек и манипуляций. Я начал с того, что составил список конфигурационных файлов, в которых присутствует [85.31.29.208]:

/etc/rc.local
/etc/exim4/exim4.conf.template
/usr/local/ispmgr/etc/ispmgr.conf
/usr/local/ispmgr/etc/ispmgr.inc
/usr/local/ispmgr/etc/nginx.inc
/usr/local/ispmgr/etc/nginx.domain

Необходимо подчеркнуть, что в вашем случае он может оказаться более обширным, в зависимости от инсталлируемого ПО. В частности, в моей конфигурации отсутствует какой-либо сервер DNS, поэтому в списке нет файлов настроек, например, BIND.
Далее мною был использован следующий скрипт для того, что бы во всех вышеперечисленных файлах заменить упоминание [85.31.29.208] на строку-маску "XXX.YYY.WWW.ZZZ":

#!/bin/sh

IFS="
"

sed=`which sed`
mktemp=`which mktemp`
chmod=`which chmod`
chown=`which chown`

pattern="XXX.YYY.WWW.ZZZ"
ip="85.31.29.208"
templatedir="/mnt/Debian-7-i386-ispmgr-SIM-Networks"

isplist=$( cat <<EOF
/etc/rc.local
/etc/exim4/exim4.conf.template
/usr/local/ispmgr/etc/ispmgr.conf
/usr/local/ispmgr/etc/ispmgr.inc
/usr/local/ispmgr/etc/nginx.inc
/usr/local/ispmgr/etc/nginx.domain
EOF
)

printf "%s\n" "${isplist}" | while read -r file
do
file=${templatedir}${file}
echo ${file}

tempfile=`${mktemp} "${file}".XXXXXXXXXX`

${sed} -e "s/"${ip}"/"${pattern}"/ig" "${file}"  > "${tempfile}"

mv -f "${file}" "${file}"-orig
mv -f "${tempfile}" "${file}"
${chmod} --reference="${file}"-orig "${file}"
${chown} --reference="${file}"-orig "${file}"
done

exit 0

Создадим каталог "/templates/Debian-7-i386-ispmgr-SIM-Networks", в который необходимо скопировать следующий набор файлов из Debian-7-amd64-minimal-SIM-Networks/Debian-7-i386-minimal-SIM-Networks:

config
dropip
getfile
getused
move
setfile
setip
setname
setpass
setup
VERSION
initrd.img-3.2.0-4-686-pae
vmlinuz-3.2.0-4-686-pae

При развертывании VDS необходимо будет выполнить обратную операцию по замене строки-маски "XXX.YYY.WWW.ZZZ" на настоящий IP-адрес в конфигурационных файлах. Для этого необходимо изменить скрипт BASH "setup" следующим образом:

#!/bin/sh -x

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

IFS="
"

sed=`which sed`
mktemp=`which mktemp`
chmod=`which chmod`
chown=`which chown`

pattern="XXX.YYY.WWW.ZZZ"

isplist=$( cat <<EOF
/etc/rc.local
/etc/exim4/exim4.conf.template
/usr/local/ispmgr/etc/ispmgr.conf
/usr/local/ispmgr/etc/ispmgr.inc
/usr/local/ispmgr/etc/nginx.inc
/usr/local/ispmgr/etc/nginx.domain
EOF
)

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 "# The loopback network interface" >> $TMP/etc/network/interfaces
echo "auto lo" >> $TMP/etc/network/interfaces
echo "iface lo inet loopback" >> $TMP/etc/network/interfaces
echo >> $TMP/etc/network/interfaces

echo "# The primary network interface" >> $TMP/etc/network/interfaces
echo "allow-hotplug eth0" >> $TMP/etc/network/interfaces
echo "iface eth0 inet static" >> $TMP/etc/network/interfaces

echo "  address $2" >> $TMP/etc/network/interfaces
echo "  network $3" >> $TMP/etc/network/interfaces
echo "  netmask $4" >> $TMP/etc/network/interfaces
echo "  broadcast $5" >> $TMP/etc/network/interfaces
echo "  gateway $6" >> $TMP/etc/network/interfaces
echo $7 > $TMP/etc/hostname
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

printf "%s\n" "${isplist}" | while read -r file
do
file=${TMP}${file}

tempfile=`${mktemp} "${file}".XXXXXXXXXX`

${sed} -e "s/"${pattern}"/"${2}"/ig" "${file}" > "${tempfile}"

mv -f "${file}" "${file}".BAK
mv -f "${tempfile}" "${file}"
${chmod} --reference="${file}".BAK "${file}"
${chown} --reference="${file}".BAK "${file}"
done

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

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

cd /mnt/Debian-7-i386-ispmgr-SIM-Networks/
umount /mnt/Debian-7-i386-ispmgr-SIM-Networks/proc
tar czvf image ./ --exclude=image

Перемещаем файл "image"в каталог "/templates/Debian-7-i386-ispmgr-SIM-Networks" и создаем архив с дисковым шаблоном:

mv /mnt/Debian-7-i386-ispmgr-SIM-Networks/image /templates/Debian-7-i386-ispmgr-SIM-Networks/
cd /templates/Debian-7-i386-ispmgr-SIM-Networks/
tar czvf Debian-7-i386-ispmgr-SIM-Networks.tgz ./ --exclude=Debian-7-i386-ispmgr-SIM-Networks.tgz

Архив "Debian-7-i386-ispmgr-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>