Согласитесь, приятно получить сервер уже готовый к выполнению задач. Установленный ISPmanager позволит сразу приступить к размещению сайта. Teamspeak – организовать тренировку по WoT без траты времени на инсталляцию.
Провайдеры за счет этого повышают доход. Сегодня они предлагают не просто машины с чистой ОС, а бухгалтерские, торговые, игровые серверы. «Предпродажная подготовка» повышает лояльность клиентов и уменьшает нагрузку на техподдержку.

Изначально в наших продуктах это было реализовано посредством установки нужных пакетов через Шаблон ОС. Проблема в том, что шаблоны требуют значительных затрат на создание, поддержку и актуализацию. Все усугубляется, когда клиент просит сделать предустановку непопулярного набора пакетов. К примеру, BigBlueButton, платформы для проведения вебинаров. Пользователь заказывает VDS и проводит видеоконференции, но только раз в 3 месяца. Он не хочет тратить по 30 минут на инсталляцию ПО при каждом заказе выделенного сервера. Провайдеру же подобные запросы не всегда интересны. Узкоспециализированный шаблон порой влечет неоправданные издержки.
Под катом мы расскажем о том, как решить такие проблемы с помощью рецептов — скриптов, выполняющих автоматическую установку ПО в VMmanager и DCImanager.


Сначала подробнее остановимся на Шаблонах ОС. C появлением рецептов их популярность снижается и вот почему.
  1. Если устанавливаемое программное обеспечение поддерживает несколько операционных систем, для каждой придётся сделать свой шаблон. Рецепт же может быть один на несколько ОС.
  2. Если речь идёт про KVM или выделенный сервер, то чтобы установить дополнительные пакеты нужно внести изменения в install.cfg (файл ответов). Если про OpenVZ, то нужно пересобрать весь контейнер, добавив в него нужные файлы. А в случае рецепта достаточно открыть через браузер меню в VMmanager или DCImanager и вставить код в поле ввода.

Таким образом получается, что дополнительное ПО сейчас можно установить и шаблонами и рецептами, однако последние проще в использовании. На данный момент мы используем шаблоны для добавления новых операционных систем, а рецепты для установки дополнительных пакетов.

Писать рецепт можно на любом языке, надо только, чтобы в ОС был необходимый интерпретатор. После окончания установки операционной системы и перезагрузки сервера, этот файл копируется по SSH во временную директорию и запускается с правами root.
В рецепте должен быть блок метаданных в начале тела.
Выглядит это примерно так
#!/bin/sh
#
# metadata_begin				/*Метка начала блока*/
# recipe: Hello!				/*Внутреннее имя рецепта. Отображается в списках*/
# tags: centos7,debian8,ubuntu1404,ubuntu1604	/*Набор тэгов. Необходим для контроля  совместимости рецепта и операционной системы. Рецепт считается совместимым с ОС, если совпадает хотя бы один тэг в шаблоне ОС и в рецепте*/
# revision: 1					/*Номер версии рецепта*/
# description_ru: Пример рецепта. Приветствие миру, которое будет выводиться при каждом входе в      shell.
# description_en: Example of recipe. Greetings to world, that will be shown after every login to     shell.
# /*Выше — описания на соответствующих языках. Отображаются при выборе рецепта в меню установки ОС на выделенном или виртуальном сервере*/
# metadata_end					/*Метка конца блока*/
#
echo "Hello World!" > /etc/motd

Меню рецептов доступно с уровня администратора:
  • “Настройки кластера” > “Рецепты” в VMmanager.
  • “Настройки” > “Рецепты” в DCImanager.

BILLmanager в свою очередь получает из этих панелей список рецептов и выводит его когда клиент заказывает услугу.
Также можно сделать разные тарифы на серверы: с рецептами и без. Нужные настройки выполняются при создании обработчика, см. спойлер.
Если нужно закрыть для всех клиентов доступ к установке того или иного ПО, например, для исправления ошибок в рецепте, это тоже возможно. Описание процесса на примере VMmanager — под ещё одним спойлером.
Настройка обработчика услуг
Для создания обработчика нужно зайти под администратором в меню “Интеграция” > “Обработчики услуг” и нажать кнопку “Создать”.



Затем на этапе настройки интеграции установить или снять флажок.



И при создании тарифа выбрать желаемый обработчик.


Как закрыть доступ к рецепту
Выполняем авторизацию в панели под пользователем с правами администратора. Переходим в меню «Настройки кластера» > «Рецепты», выбираем нужный рецепт и нажимаем «Свойства».



Выбираем нужный уровень доступа из выпадающего списка и нажимаем “Ok”.


На случай если клиент часто устанавливает ПО, которое пользуется малой популярностью, и хочет автоматизации процесса, в наших продуктах есть возможность дать конечным пользователям права на создание своих, локальных, рецептов. Для этого нужно зайти /usr/local/mgr5/etc и добавить в файл vmmgr.conf или dcimgr.conf строку Option UserRecipes, после чего перезапустить панель командой /usr/local/mgr5/sbin/mgrctl -m vmmgr exit или /usr/local/mgr5/sbin/mgrctl -m dcimgr exit соответственно.
На уровне пользователя в панели появится пункт меню «Управление” > “Рецепты», а значит возможность создавать собственные рецепты и использовать их при переустановке ОС виртуального или выделенного сервера.

Руководство


Теперь попробуем на практике написать рецепт и дать к нему доступ конечным пользователям. Для примера возьмём развёртывание на VDS продукта BigBlueButton 1.0, платформы для проведения вебинаров. Под спойлером описание процесса со скриншотами.
Создание рецепта
Выполняем авторизацию в панели VMmanager под пользователем с правами администратора, заходим “Настройки кластера”>”Рецепты”.



Нажимаем кнопку “Создать”.



Указываем имя файла, в котором будет находиться рецепт, пишем/вставляем в поле ввода скрипт, заполняем блок метаданных и нажимаем “Ок”.



Созданный рецепт появляется в списке.



Результат — при заказе услуги клиент хостинг-провайдера видит ещё один вариант предустановленного ПО.


Интересующихся исходным кодом приглашаем ещё под один спойлер.
Исходный код рецепта
#!/bin/bash
#
# metadata_begin
# recipe: BigBlueButton
# tags: ubuntu1404
# revision: 1
# description_ru: BigBlueButton, платформа для проведения вебинаров.
# description_en: BigBlueButton, webinar platform.
# metadata_end
#

# Запускаем логирование.
RNAME=BigBlueButton

set -x

LOG_PIPE=/tmp/log.pipe.$$                                                                                                                                                                                                                    
mkfifo ${LOG_PIPE}
LOG_FILE=/root/${RNAME}.log
touch ${LOG_FILE}
chmod 600 ${LOG_FILE}

tee < ${LOG_PIPE} ${LOG_FILE} &

exec > ${LOG_PIPE}
exec 2> ${LOG_PIPE}

killjobs() {
	jops="$(jobs -p)"
	test -n "${jops}" && kill ${jops} || :
}
trap killjobs INT TERM EXIT

echo
echo "=== Recipe ${RNAME} started at $(date) ==="
echo

#Обновляем пакеты, а затем дистрибутив ОС.
apt-get update
apt-get -y dist-upgrade

#Добавляем репозиторий LibreOffice 4.4. LibreOffice используется для конвертации презентаций в формат PDF.
apt-get -y install software-properties-common
add-apt-repository -y ppa:libreoffice/libreoffice-4-4
add-apt-repository -y ppa:ondrej/php

# Добавляем ключ доступа к репозиторию BigBlueButton и сам репозиторий.
wget http://ubuntu.bigbluebutton.org/bigbluebutton.asc -O- | apt-key add -
echo "deb http://ubuntu.bigbluebutton.org/trusty-1-0/ bigbluebutton-trusty main" | tee /etc/apt/sources.list.d/bigbluebutton.list

# Обновляем список пакетов.
apt-get update

# Ставим кодеки ffmpeg.
apt-get -y install build-essential git-core checkinstall yasm texi2html libvorbis-dev libx11-dev libvpx-dev libxfixes-dev zlib1g-dev pkg-config netcat libncurses5-dev

FFMPEG_VERSION=2.3.3

cd /usr/local/src
if [ ! -d "/usr/local/src/ffmpeg-${FFMPEG_VERSION}" ]; then
   wget "http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2"
   tar -xjf "ffmpeg-${FFMPEG_VERSION}.tar.bz2"
fi

cd "ffmpeg-${FFMPEG_VERSION}"
./configure --enable-version3 --enable-postproc --enable-libvorbis --enable-libvpx
make
checkinstall --pkgname=ffmpeg --pkgversion="5:${FFMPEG_VERSION}" --backup=no --deldoc=yes --default

# Заранее принимаем с лицензионное соглашение пакета ttf-mscorefonts-installer чтобы во время установки BigBlueButton не появлялось окно и не требовалось участие пользователя.
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections

# Ставим сам BigBlueButton.
apt-get -y install bigbluebutton

# Ставим штатный (по задумке разработчиков BBB, тестовый) пакет для проведения конференций.
apt-get -y install bbb-demo

# Ставим пакет для тестирования совместимости клиентского браузера с BBB.
apt-get -y install bbb-check

# Выполняем чистый перезапуск сервера BigBlueButton.
bbb-conf --clean

Итак, новый рецепт доступен для клиентов. Теперь если кому-то надо, например, провести срочный вебинар или совещание, он может в сжатые сроки организовать площадку для встречи. Как видите, ничего сложного.

Желающим воспользоваться нашими продуктами и рецептами в частности, напоминаем ссылки на VMmanager и DCImanager, а также на документацию по рецептам.

Довольных вам клиентов!

P.S. В статье использована иллюстрация Антона Курятникова.
Ссылка на источник
Поделиться с друзьями
-->

Комментарии (2)


  1. rendername
    12.12.2016 07:34

    На уровне API как возможно применить рецепт при создании виртуальной машины?
    Допустим, создание машины происходит по вызову CURL подобного HTTP запроса:

    https://localhost:1500/vmmgr?authinfo=god:god1&out=json&lang=ru&func=user.edit&sok=ok&name=123&passwd=12345&confirm=123456

    Как к этому запросу добавить, к примеру, Django рецепт?
    В документации к VMmanager API, как и всегда у вас, не хватает наглядных примеров.
    Лишь название функций и их параметры.


    1. Nesmiyanov
      12.12.2016 07:39

      Вот пример создания виртуальной машины с CentOS 6 и рецептом tomcat:

      http://ip_address:1500/vmmgr?authinfo=username:password&func=vm.edit&password=hDH678edjdFwem54y&domain=some.domain&hostnode=auto&installtype=installtemplate&iptype=public&mem=512&name=domain%2Ecom&osname=CentOS-6-amd64&recipe=ISPsystem__tomcat%2Esh&sok=ok&user=4&vcpu=1&vsize=5000
      То есть к запросу добавляется параметр «recipe», в котором содержится имя рецепта.

      Как вариант, при использовании API можно подсмотреть в логе панели пример вызова функции, позвав ее с нужными параметрами из интерфейса. На всякий случай напоминаем, что лог VMmanager по умолчанию находится в директории /usr/local/mgr5/var/ и называется vmmgr.log