четверг, 24 декабря 2020 г.

Миграция или обновление до актуальной версии FreePBX без использования convert.freepbx.org

Раньше для миграции со старых версий FreePBX на актуальную можно было использовать специальный сервис, который располагался по адресу https://convert.freepbx.org, но теперь он закрыт и альтернативы для него создано не будет. Сервис использовался для миграции со старых версий FreePBX Distro, работавших на виртуальных машинах Hyper-V, т.к. скрипт обновления FreePBX Distro до актульной версии не работет на Hyper-V, либо с FreePBX, установленных на других дистрибутивах, в качестве отдельного приложения.

Если же всё-таки нужно обновить FreePBX до актуальной версии, то не будем отчаиваться и опускать руки, а сделаем всё самостоятельно.

Предполагается, что обновление будет выполнено при помощи переноса текущей конфигурации на новый сервер с устновленым на него FreePBX Distro, на момент написания статьи это SNG7-PBX-2011-5, в составе которого FreePBX 15 и Asterisk 16.

Первое, что нам нужно - создать бэкап текщей конфигурации FreePBX, для этого нужно выполнить резервное копирование "MySQL - Config server" из веб-интерфейса АТС, для этого переходим последовательно Админ > Резервное копирование и восстановление и создаём резервную копию, в которой будет только один пункт - "MySQL - Config server".
Либо можно выполнить дамп базы MySQL с помощью команды
mysqldump -hlocalhost -ufreepbxuser -pfreepbxuserpass asterisk > /tmp/asterisk.sql
И в том, и в другом случае мы получим файл, содержащий дамп базы конфигурации FreePBX.

Если полученный файл попытаться импортировать через web-интерфейс FreePBX, то АТС придёт в нерабочее состояние, поэтому нужно из него удалить все данные лишних таблиц. Какие из них необходимы можно решить, посмотрев список, приведённый ниже, он составлен исходя из моего опыта, так что не претендует на полноту.
Внтренние номера
callrecording_module, findmefollow, ringgroups, sip;
Параметры факсов
fax_details, fax_users, iax;
Транки и маршрутизация звонков
cidlookup, cidlookup_incoming, incoming, outbound_route_patterns, outbound_route_sequence, outbound_route_trunks, outbound_routes, trunks;
IVR и moh
ivr_details, ivr_entries, music, recordings;
Временные условия
timeconditions, timegroups_details, timegroups_groups;
Параметры специальных функций
featurecodes.
В итоге получим файл, содержащий примерно следующий текст для каждой таблицы:
DROP TABLE IF EXISTS `cidlookup_incoming`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cidlookup_incoming` (
    `cidlookup_id` int(11) NOT NULL,
    `extension` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
    `cidnum` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `cidlookup_incoming` VALUES (0,'5140','');
После того, как список таблиц и их значений подготовлен, нужно адаптировать список полей таблиц, т.к. со временем в них появляются новые поля, необходимые для новых функций. Список полей для каждой таблицы можно посмотреть в дампе базы свежеустновленного FreePBX. На момент написания статьи при миграции с FreePBX 13 на FreePBX 15 нужно было изменить структуру полей в следующих таблицах: incoming, ivr_details, findmefollow, timeconditions.
Из-за того, что структура полей у этих таблиц изменилась, а значений в наборе не добавилось, то нужно прямо указать поля таблицы, в которые будет производиться импорт данных. Список полей указывается после имени таблицы в команде INSERT. В результате чего для таблиц, в которых были добавлены новые поля, команда импорта будет выглядеть примерно так:
DROP TABLE IF EXISTS `incoming`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `incoming` (
    `cidnum` varchar(20) DEFAULT NULL,
    `extension` varchar(50) NOT NULL,
    `destination` varchar(50) DEFAULT NULL,
    `privacyman` tinyint(1) DEFAULT NULL,
    `alertinfo` varchar(255) DEFAULT NULL,
    `ringing` varchar(20) DEFAULT NULL,
    `fanswer` varchar(20) DEFAULT NULL,
    `mohclass` varchar(80) NOT NULL DEFAULT 'default',
    `description` varchar(80) DEFAULT NULL,
    `grppre` varchar(80) DEFAULT NULL,
    `delay_answer` int(2) DEFAULT NULL,
    `pricid` varchar(20) DEFAULT NULL,
    `pmmaxretries` varchar(2) DEFAULT NULL,
    `pmminlength` varchar(2) DEFAULT NULL,
    `reversal` varchar(10) DEFAULT NULL,
    `rvolume` varchar(2) DEFAULT '',
    `indication_zone` varchar(20) DEFAULT 'default'
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `incoming` (cidnum, extension, destination, privacyman, alertinfo, ringing, mohclass, description, grppre, delay_answer, pricid, pmmaxretries, pmminlength, reversal, rvolume) VALUES ...
После того, как sql-файл подготовлен для импорта, переносим его на свежеустановленный FreePBX и импортируем данные
mysql -hlocalhost -ufreepbxuser -pfreepbxuserpass asterisk < /tmp/mysql-2.sql
Большинство данных перенесено, осталось скопировать записи, которые воспроизводятся в ivr-меню и при удержании звонка (music on hold).
Для этого воспользуемся scp
scp -r root@freepbxold:/var/lib/asterisk/sounds/ru/custom /var/lib/asterisk/sounds/ru/custom
scp -r root@freepbxold:/var/lib/asterisk/moh /var/lib/asterisk/moh
chown -R asterisk: /var/lib/asterisk/sounds/ru/custom
chown -R asterisk: /var/lib/asterisk/moh
Если папки /var/lib/asterisk/sounds/ru нет на новом сервере, то нужно установить русский звуковой пакет, для этого нужно перейти в Администратор > Sound Languages.

Последнее, что осталось - изменить порт, на котором FreePBX будет ожидать подключения от клиентов. Дело в том, что во FreePBX 13 расширения были настроены для использования chain_sip и их подключение происходило на порт 5060. Во FreePBX 15 по умолчанию используется канальный драйвер chain_pjsip и именно для него предполагется использовать порт 5060, а клиентов с chain_sip АТС ожидает на нестандартном 5160. Из этой ситуации есть 2 выхода:
Изменить порт подключения
для этого нужно зайти в Настройки > Установки Asterisk для SIP и поменять порты для подключения chain_sip и chain_pjsip местами, после применения настроек нужно дополнительно перезапустить Asterisk, для этого нужно в консоли выполнить команду
    fwconsole restart
    
Конвертировать все расширения для использования chain_pjsip
для этого создатели FreePBX создали специальный скрипт convert2pjsip, для его использования нужно выполинть в консоли команду
        # для конвертации всех расширений
        fwconsole convert2pjsip -a
        
        # для конвертации конкретного расширения
        fwconsole convert2pjsip -r 5140
        
        # или диапазона
        fwconsole convert2pjsip -r 5100-5140
        
На этом всё, основная конфигурация FreePBX перенесена на актуальную версию. В статье не описан перенос записей звонков, но принцип его переноса такой же, как и основной конфигурации: сохранить дамп базы на старом сервере > проверить соответствие полей таблиц и добавить необходимые > импортировать данные на новый сервер.

Комментариев нет:

Отправить комментарий