Столкнулся на днях со странной ошибкой asterisk. Мне нужно было перенести виртуальную машину с настроенной телефонией с одного гипервизора Hyper-V на другой. Воспользовался штатным функционалом экспорта импорта, но виртуалка не завелась на новом месте.
Точнее не завелся сам астериск. Виртуальная машина нормально запустилась. Но asterisk не работал. Он безуспешно пытался стартовать, при этом в логах /var/log/messages были следующие сообщения:
Nov 4 22:39:50 asterisk kernel: traps: asterisk[56183] trap invalid opcode ip:7fdba37acec6 sp:7ffd14936730 error:0 in codec_lpc10.so[7fdba37a8000+d000] Nov 4 22:40:21 asterisk kernel: traps: asterisk[56358] trap invalid opcode ip:7f9da4abeec6 sp:7ffd4f0f4fd0 error:0 in codec_lpc10.so[7f9da4aba000+d000] Nov 4 22:40:50 asterisk kernel: traps: asterisk[56511] trap invalid opcode ip:7f4c39587ec6 sp:7fff445bba50 error:0 in codec_lpc10.so[7f4c39583000+d000] Nov 4 22:41:21 asterisk kernel: traps: asterisk[56672] trap invalid opcode ip:7f65e7730ec6 sp:7fff404edab0 error:0 in codec_lpc10.so[7f65e772c000+d000] Nov 4 22:41:51 asterisk kernel: traps: asterisk[56844] trap invalid opcode ip:7f547328bec6 sp:7ffda3ba3c90 error:0 in codec_lpc10.so[7f5473287000+d000] Nov 4 22:42:21 asterisk kernel: traps: asterisk[56999] trap invalid opcode ip:7f89929deec6 sp:7ffd458d1430 error:0 in codec_lpc10.so[7f89929da000+d000]
Я сначала подумал, что что-то не так с виртуалкой. Вместо импорта, сделал на новом гипервизоре виртуальную машину и прицепил к ней жесткий диск. Загрузился с тем же результатом. Все работает, кроме астериска. Дело происходит на CentOS 7. Asterisk готовил по своей же статье — настройка asterisk, которая не раз была проверена.
Начал гуглить и с удивлением обнаружил, что таких ошибок почти нет. Сходу я вообще ничего не нашел по своей теме. Начал переделывать поисковые запросы и немного приблизился в разгадке. Проблема кроется в типе процессора и сборке астера из исходников. Скажу сразу, что помогло мне решить проблему. Я пересобрал asterisk из исходников, добавив флаги:
./configure --libdir=/usr/lib64 CC="gcc -O3" CFLAGS=-O3
А затем в menuselect поставил галочку в разделе Compiler Flags в пункте DONT_OPTIMIZE. По идее, этот параметр можно было добавить к опции ./configure, но я, чтобы не ошибиться, решил через меню чекнуть. В итоге пересобрал так и asterisk заработал.
Если вам это не поможет, попробуйте добавить ключ CFLAGS=-mtune=native. Я видел и такую рекомендацию.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Другие материалы по asterisk:
- Установка и настройка астериск с нуля
- Мониторинг asterisk в zabbix
- Соединение двух серверов астериск
- Анализ SIP трафика
- Замена +7 на 8 и наоборот
- Ограничение на звонки для группы номеров
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.