Иногда, после установки приложений, необходимо выполнить его первоначальную настройку в соответствии с определенными требованиями. Во всех продуктах ISPsystem на основе Core встроен механизм внешней настройки установленного приложения как при их непосредственной установке, так и при обновлении и в любой другой момент эксплуатации.
Как это работает
Во время установки любой из панелей управления ISPsystem после проверки лицензии, панель получает из лицензии специальный адрес сервера настройки "settingurl". Наличие этого адреса сообщает панели о том, что для дальнейшей установки необходимо получить инструкции по указанному адресу.
Далее, панель выполняет переход по указанному адресу, где в качестве параметра запроса указывает идентификатор текущей лицензии.
Сервер производит поиск лицензии и в случае её обнаружения, возвращает XML-документ ответа зашифрованный при помощи алгоритма XXTEA и преобразованный в его шестнадцатеричное представление. В качестве ключа шифрования используется ключ активации лицензии.
Панель производит расшифровку ответа с помощью известного ей ключа активации лицензии и, в случае успеха, начинает выполнение описанных там инструкций. Используются 16 первых символов ключа активации.
XML-документ ответа
Формат ответа:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<func name="xset.up.param">
<arg name="grant">x.x.x.x</arg>
</func>
<func name="имя функции">
<arg name="имя параметра">значение</arg>
</func>
...
</doc>
Таким образом, сервер присылает панели набор команд, которые необходимо выполнить в данный момент.
Список разрешенных на данный момент функций:
- ipaddrlist.delete;
- ipaddrlist.edit;
- dnsparam;
- xset.up.param;
- slaveserver.delete;
- slaveserver.edit;
- backup2.settings.
Специальная функция xset.up.param, сообщает панели с каких IP-адресов разрешено инициализировать процесс внешней настройки.
Пример сервера внешней настройки
-
Создайте файл /tmp/settings.py следующего вида:
#!/usr/bin/env python from flup.server.fcgi import WSGIServer from xxtea import encrypt import struct def app(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><doc><func name=\"ipaddrlist.edit\">ваши настройки</func></doc>" key = "1515848-bXy1Avllp4E5VnyI1394582400" # ключ активации моей лицензии! вам необходимо получить его из биллинга по переданному ID ln = len(data) data += "\0" * ((4 — (ln % 4)) & 3) data += struct.pack("i", ln); return [ encrypt(data, key, True) ] WSGIServer(app, bindAddress=('localhost', 9002)).run()
-
В конфигурационный файл nginx добавьте следующий блок:
server { listen 80; root /tmp; location /setting.py { fastcgi_pass 127.0.0.1:9002; include fastcgi_params; } }
- Запустите скрипт и перезапустите nginx.
Теперь, если в лицензию включить параметр settingurl с адресом вашего сервера и произвести установку панели, то будут выполнены инструкции, переданные вашим сервером.
Параметры settingurl
Панель будет обращаться к settingurl после установки/обновления каждого модуля.
В запросе будет передано два параметра. Это elid со значением install или update.
И module с именем модуля, которой был установлен (этот параметр имеет пустое значение для основного пакета)