Борьба с «багами» FreePBX в некоторых запущенных случаях может вывести из себя даже опытного администратора. Проблема эта глубока и многогранна, но это вовсе не означает, что с ней нельзя справиться. Так, сегодня мы разберем один из самых неприятных и надоедливых «багов», который мигрирует из одной версии FreePBX в другую, благополучно сохраняясь и мешая пользователям. Да, тяготение к кириллице не обходится без последствий. Если для задания имен внутренних номеров IP-АТС хочется использовать русские буквы, настоятельно рекомендуем изучить сначала этот текст. Он точно будет для вас полезен и убережет от многих ошибок.
Рассматриваемый «баг» был присущ FreePBX версии 13, но проблема никуда не делась и в 14, и в 15 релизах. Итак, узнаем, как бороться с неверным отображением русской кодировки в модуле CDR. Ошибка больше известна в народных кругах как «кракозябры в CDR».
Погружаясь в проблему
Итак, устанавливаем актуальную версию FreePBX, добавляем 2 внутренних номера, для которых указываем имена на русском языке. Допустим, это будут Семен Волжский и Иван Петров. Регистрируем для двух добавленных софтфоны и производим тестовый звонок. Что же, вполне успешно, ведь так? Проследуем в Reports → CDR Reports
, где наблюдаем пресловутые кракозябры, которые совсем не походят на имена вышеуказанных абонентов.
Знакомая многим ситуация. Попробуем выйти из нее вместе. Начинаем с проверки таблицы CDR
в базе asteriskcdrdb
и убеждаемся, что там наблюдается аналогичная картина.
Решение
Важно! Перед практическим применением руководства необходимо создать Backup системы либо Snapshot Virtual Machine. Помните, что ответственность за все происходящее с вашей IP-АТС лежит на вас. Если какие-то шаги будут выполнены неверно, FreePBX и Asterisk могут полностью утратить работоспособность. Учтите это!
В глобальной паутине представлено множество рекомендаций, призванных помочь решить проблему. Так, кто-то рекомендует выставлять значение charset = utf8
в файле /etc/asterisk/cdr_mysql.conf
. Другие говорят, что следует выполнить core reload
после очередного инцидента со слетевшими записями. Продвинутые умы советуют написать скрипт для регулярного обязательного перекодирования записей. Но эти рекомендации в лучшем случае являются костылями, а часто не приносят результата вообще.
На официальном портале Freepbx.org по этой проблеме даже завели Official Bug FREEPBX-15268. До сих пор, чтобы вы понимали, он находится в статусе Unresolved (не решен). Не шибко-то разработчики торопятся справляться с собственными ошибками.
Сравнительно эффективный метод лечения – удаление действующего ODBC-коннектора MySQL и инсталляция ODBC-коннектора версии а 5.3.9 (ANSI Driver) с последующим редактированием файла odbc.ini
. Изменения должны выглядеть следующим образом:
[MySQL-asteriskcdrdb]
driver=MySQL ODBC 8.0 ANSI Driver
Выполнив эти действия, нам удастся добиться корректного отображения записей в CDR, зато логи будут пестрить предупреждениями. И этот бардак вряд ли хоть кому-то доставит удовольствие.
Любопытно, что непосредственно в таблице Cel
, вызывающей негодование у сервера, все вполне нормально.
Получается, мы вроде бы решили проблему. CDR корректен, но в лог лучше не заглядывать, чтобы не портить настроение. Смотреть без эмоций на поток предупреждений просто невозможно.
Что же, решим проблему более элегантным способом. Обеспечим чистоту логов и одновременно отсутствие «кракозябр». Итак, переходим к фигурам высшего пилотажа.
Начинаем с удаления действующего ODBC-коннектора. Из-за существующих зависимостей за компанию в небытие уйдет и сам Asterisk. По этой причине необходимо уточнить, какой коннектор у нас инсталлирован. После удаляем его, прописав в консоли:
rpm -qa | grep mysql-connector-odbc
Выполнив вышеуказанные шаги, наблюдаем, что у нас используется версия 8.0. Необходимо выполнить его удаление, игнорируя при этом наличные связи. Для деинсталляции исключительно коннектора выполним специальную команду.
rpm -e --nodeps mysql-connector-odbc-8.0.13-1.el7.x86_64
В данной команде укажите название пакета, обнаруженного на предыдущем шаге.
На следующем этапе устанавливаем новый Connector. Но использовать мы будем теперь не продукт MySQL, а коннектор от MariaDB. Чтобы инсталлировать коннектор, указываем команду:
yum install mariadb-connector-odbc
Важно! Перед использованием этой команды обязательно необходимо снести старый коннектор. Игнорирование этого требования приводит к отказу модуля CDR.
Проверяем файл /etc/odbcinst.ini
. Там должна находиться аналогичная запись, имеющая заголовок “[MySQL ODBC 8.0 ANSI Driver]”
и подтверждающая наличие коннектора ANSI от MariaDB.
Остается перезагрузиться (fwconsole restart
), после чего процедуру можно считать практически завершенной. Остается выполнить несколько тест-звонков и проверить модуль CDR FreePBX. Не забудем также заглянуть в таблицу CDR asteriskcdrdb
На этой позитивной ноте мы завершаем настройку. Хочется надеяться, что статья принесла вам пользу. Сведений, представленных в ней, вполне достаточно, чтобы поставить точку в войне с надоевшим и коварным багом. Можно гордиться собой, ведь с ним отказались бороться даже сами разработчики. Благодарим, что дочитали статью до конца.