Столкнулся на днях со странной ошибкой 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:
Онлайн курcы по Mikrotik
Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курcы по программе, основанной на информации из официального курcа MikroTik Certified Network Associate. Помимо официальной программы, в курcах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте Курcы по ИТ. Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курcов:- Знания, ориентированные на практику;
- Реальные ситуации и задачи;
- Лучшее из международных программ.
- Установка и настройка астериск с нуля
- Мониторинг asterisk в zabbix
- Соединение двух серверов астериск
- Анализ SIP трафика
- Замена +7 на 8 и наоборот
- Ограничение на звонки для группы номеров
тоже столкнулся с такой же проблемой, использую veam для реплицирования виртуалок, но каждый раз пересобирать астер - не вариант, может есть какие нибудь настройки при сборке ядра- чтоб при смене железа он не крашился?
Так я же в статье и предложил пару ключей, с которыми если собрать сразу астер, не должно быть проблем с переездом на новое железо.
Use docker Luke! :)
Давно хочу, никак не найду времени свои сборки на докере сделать. С виртуалками привык уже, но с докером во многих случаях будет удобнее и быстрее.
почему не делаете сборку rpm?
В смысле почему? Потому что делать надо, а это время. Из исходников привык ставить, так быстрее.