В этой заметке углубим наработки, изложенные мною ранее в другом материале. А именно интегрируем панель управления 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 3path 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}"
doneexit 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" EXITmount -o loop $FILE $TMP || exit 1
trap "umount $TMP && rm -rf $TMP" EXITtar -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/interfacesecho "# The primary network interface" >> $TMP/etc/network/interfaces
echo "allow-hotplug eth0" >> $TMP/etc/network/interfaces
echo "iface eth0 inet static" >> $TMP/etc/network/interfacesecho " 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/hostsssh-keygen -t rsa -N '' -f $TMP/etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -N '' -f $TMP/etc/ssh/ssh_host_dsa_keyprintf "%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, как это было описано ранее.