![](https://habrastorage.org/files/a8a/fcc/313/a8afcc3137fb4539a165dd734393cff3.jpg)
Согласитесь, приятно получить сервер уже готовый к выполнению задач. Установленный ISPmanager позволит сразу приступить к размещению сайта. Teamspeak – организовать тренировку по WoT без траты времени на инсталляцию.
Провайдеры за счет этого повышают доход. Сегодня они предлагают не просто машины с чистой ОС, а бухгалтерские, торговые, игровые серверы. «Предпродажная подготовка» повышает лояльность клиентов и уменьшает нагрузку на техподдержку.
Изначально в наших продуктах это было реализовано посредством установки нужных пакетов через Шаблон ОС. Проблема в том, что шаблоны требуют значительных затрат на создание, поддержку и актуализацию. Все усугубляется, когда клиент просит сделать предустановку непопулярного набора пакетов. К примеру, BigBlueButton, платформы для проведения вебинаров. Пользователь заказывает VDS и проводит видеоконференции, но только раз в 3 месяца. Он не хочет тратить по 30 минут на инсталляцию ПО при каждом заказе выделенного сервера. Провайдеру же подобные запросы не всегда интересны. Узкоспециализированный шаблон порой влечет неоправданные издержки.
Под катом мы расскажем о том, как решить такие проблемы с помощью рецептов — скриптов, выполняющих автоматическую установку ПО в VMmanager и DCImanager.
Сначала подробнее остановимся на Шаблонах ОС. C появлением рецептов их популярность снижается и вот почему.
- Если устанавливаемое программное обеспечение поддерживает несколько операционных систем, для каждой придётся сделать свой шаблон. Рецепт же может быть один на несколько ОС.
- Если речь идёт про 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 — под ещё одним спойлером.
Настройка обработчика услуг
Для создания обработчика нужно зайти под администратором в меню “Интеграция” → “Обработчики услуг” и нажать кнопку “Создать”.
![](https://habrastorage.org/r/w1560/files/6ba/14f/752/6ba14f7522a64edca65bced207f190bc.png)
Затем на этапе настройки интеграции установить или снять флажок.
![](https://habrastorage.org/r/w1560/files/554/e0b/64e/554e0b64e1ce4ad286829ed93ad44c9b.png)
И при создании тарифа выбрать желаемый обработчик.
![](https://habrastorage.org/r/w1560/files/0fa/fbc/b6f/0fafbcb6f2744540a1d7f48fa9345b03.png)
![](https://habrastorage.org/files/6ba/14f/752/6ba14f7522a64edca65bced207f190bc.png)
Затем на этапе настройки интеграции установить или снять флажок.
![](https://habrastorage.org/files/554/e0b/64e/554e0b64e1ce4ad286829ed93ad44c9b.png)
И при создании тарифа выбрать желаемый обработчик.
![](https://habrastorage.org/files/0fa/fbc/b6f/0fafbcb6f2744540a1d7f48fa9345b03.png)
Как закрыть доступ к рецепту
Выполняем авторизацию в панели под пользователем с правами администратора. Переходим в меню «Настройки кластера» → «Рецепты», выбираем нужный рецепт и нажимаем «Свойства».
![](https://habrastorage.org/r/w1560/files/e11/388/6f3/e113886f30004ab9a852e4a5da3d7186.png)
Выбираем нужный уровень доступа из выпадающего списка и нажимаем “Ok”.
![](https://habrastorage.org/r/w1560/files/066/d13/504/066d135049fb4c31be8d0cafef600d8e.png)
![](https://habrastorage.org/files/e11/388/6f3/e113886f30004ab9a852e4a5da3d7186.png)
Выбираем нужный уровень доступа из выпадающего списка и нажимаем “Ok”.
![](https://habrastorage.org/files/066/d13/504/066d135049fb4c31be8d0cafef600d8e.png)
На случай если клиент часто устанавливает ПО, которое пользуется малой популярностью, и хочет автоматизации процесса, в наших продуктах есть возможность дать конечным пользователям права на создание своих, локальных, рецептов. Для этого нужно зайти /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 под пользователем с правами администратора, заходим “Настройки кластера”→”Рецепты”.
![](https://habrastorage.org/r/w1560/files/a19/876/cdd/a19876cdd31647cc921a2c1ec2535cd6.png)
Нажимаем кнопку “Создать”.
![](https://habrastorage.org/r/w1560/files/189/1a5/18c/1891a518ccde4ecf80f2b32347c4e5e2.png)
Указываем имя файла, в котором будет находиться рецепт, пишем/вставляем в поле ввода скрипт, заполняем блок метаданных и нажимаем “Ок”.
![](https://habrastorage.org/r/w1560/files/170/834/6fa/1708346fae1d4cbf96aa777a6b3f0ab1.png)
Созданный рецепт появляется в списке.
![](https://habrastorage.org/r/w1560/files/481/f91/a40/481f91a4011248bc90fe51295ad7e0f7.png)
Результат — при заказе услуги клиент хостинг-провайдера видит ещё один вариант предустановленного ПО.
![](https://habrastorage.org/r/w1560/files/8f9/f85/2e7/8f9f852e7cb046beb9288a92068bad24.png)
![](https://habrastorage.org/files/a19/876/cdd/a19876cdd31647cc921a2c1ec2535cd6.png)
Нажимаем кнопку “Создать”.
![](https://habrastorage.org/files/189/1a5/18c/1891a518ccde4ecf80f2b32347c4e5e2.png)
Указываем имя файла, в котором будет находиться рецепт, пишем/вставляем в поле ввода скрипт, заполняем блок метаданных и нажимаем “Ок”.
![](https://habrastorage.org/files/170/834/6fa/1708346fae1d4cbf96aa777a6b3f0ab1.png)
Созданный рецепт появляется в списке.
![](https://habrastorage.org/files/481/f91/a40/481f91a4011248bc90fe51295ad7e0f7.png)
Результат — при заказе услуги клиент хостинг-провайдера видит ещё один вариант предустановленного ПО.
![](https://habrastorage.org/files/8f9/f85/2e7/8f9f852e7cb046beb9288a92068bad24.png)
Интересующихся исходным кодом приглашаем ещё под один спойлер.
Исходный код рецепта
#!/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. В статье использована иллюстрация Антона Курятникова.
Ссылка на источник