AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk падает при запуске

Newbies/FAQ Forum 7 сообщений -
#1

Здравствуйте!

Система Debian 6.0, Asterisk версии 1.8.4.4~dfsg-2. Asterisk был установлен из пакетов unstable-репозитария. Прекрасно работал больше полугода, но после появления в репозитариях версии 1.8.7.1~dfsg-1 решил обновится. На трех серверах всё прекрасно обновилось и заработало, а на одном стало выдавать следующее сообщение в syslog:
Код:

Nov 21 23:29:50 xxxxx kernel: [91461.777732] asterisk[624] general protection ip:7f61e61ac6d2 sp:7fffe6302780 error:0 in libc-2.11.2.so[7f61e6175000+158000]\


Попробовал откатиться назад на версию 1.8.4.4~dfsg-2, но не помогло, выдает тоже самое. Уже неделю маюсь и пытаюсь понять в чем причина. Пробовал включать большие значения verbose и debug в конфиге Asterisk, но это даёт только то, что Asterisk падает на данном этапе:
Код:

[2011-11-21 23:29:50] DEBUG[624] translate.c: Discovered 2 cost path from testlaw to g722, via slin
[2011-11-21 23:29:50] DEBUG[624] translate.c: Discovered 2 cost path from testlaw to slin16, via slin
[2011-11-21 23:29:50] DEBUG[624] translate.c: Discovered 4002 cost path from testlaw to speex16, via slin
[2011-11-21 23:29:50] DEBUG[624] config.c: Parsing /etc/asterisk/cli_aliases.conf


Пробовал как описано на Asterisk debugging, дамп ядра получаю, но на результаты работы "gdb" смотрю, как баран на новые ворота.
Решил обратиться на форум за советом или за помощью.
Заранее спасибо.
#2

По видимому виновен какой-либо из модулей оставшийся от старой версии. Последовательность действий такова:
1) Читаете инфу по файлу modules.conf
2) Выбираете стратегию загрузки исходя из: грузить всё (не грузить указанное), или не грузить ничего (грузить указанное)
Для себя избрал первый вариант. Т.е в файле я пишу autoload=yes, а дальше расписываю те модули грузить которые мне нет нужды.
#3

А libc на падающей и не падающих машинах одинаково? Возможно что-то(в т.ч. левое) подтянуло или не подтянуло версию в зависимостях.

Запустить asterisk -fcvvvvvvvvdddddddd и приблизительно глянуть после/перед каким модулем падает.

_________________
Slackware 13.37 - Asterisk 1.8
#4

Obi Van писал(а):
По видимому виновен какой-либо из модулей оставшийся от старой версии. Последовательность действий такова:
1) Читаете инфу по файлу modules.conf
2) Выбираете стратегию загрузки исходя из: грузить всё (не грузить указанное), или не грузить ничего (грузить указанное)
Для себя избрал первый вариант. Т.е в файле я пишу autoload=yes, а дальше расписываю те модули грузить которые мне нет нужды.

Такая мысль сразу приходила в голову. Потому перед возвратом к версии 1.8.4.4~dfsg-2 папка с модулями была полностью очищена. Потому все модули были установлены заново из пакетов, а конфиг оставался от версии 1.8.4.4~dfsg-2.

Цитата:
А libc на падающей и не падающих машинах одинаково? Возможно что-то(в т.ч. левое) подтянуло или не подтянуло версию в зависимостях.

Запустить asterisk -fcvvvvvvvvdddddddd и приблизительно глянуть после/перед каким модулем падает.

Проверял libc6 на всех серверах. На двух работающих libc6 версии 2.13-21, на одной версия 2.11.2-10 - и всё работает. На падающем ставил и 2.13-21, и 2.11.2-10, тогда в сообщении меняется только версия используемой libc.

Запустил
Код:
asterisk -fcvvvvvvvvdddddddd
с выводом в файл (во вложении), но либо плохо смотрел, либо не показывается на каком же модуле падает Asterisk.
#5

Да, действительно ничего полезного не видно. Вы туда только stdout направили, или stderr тоже?

Попробуйте запустить * с gdb(с указанными флагами) - так сказать, оперативно поймаем момент.
Можно ещё и через strace пропустить, будет видно какой функции скормили непотребство.

Больше ничего без перестройки в голову не приходит(престройка может быть вилечит баг, потому и не поймаем).

_________________
Slackware 13.37 - Asterisk 1.8
#6

Запускал
Код:
asterisk -fcvvvvvvvvdddddddd > fault.txt

Перезапустил с выводом stdout и stderr в файл
Код:
asterisk -fcvvvvvvvvdddddddd > fault.txt 2>&1
- обновленный файл во вложении, но в нем тоже ничего полезного не увидел.
Сделал как описано здесь Getting a Backtrace.
То есть запустил
Код:
asterisk -fcvvvvvvvvdddddddd
, * упал и создал dump.
Затем выполнил команду согласно инструкции
Код:
gdb -se "asterisk" -ex "bt full" -ex "thread apply all bt" --batch -c core > /tmp/backtrace.txt
.
Файл backtrace.txt во вложении, пожалуйста, посмотрите.
Если не правильно сделал, пожалуйста, приведите порядок запуска команд.
#7

В backtrace.txt есть всё что нужно.
В нем ищете строку "Segmentation fault", и на 11 строчек ниже видет модуль, который Вам портит жизнь(не то что-бы он виноват, он виновника пинает) - /usr/lib/asterisk/modules/chan_vpb.so
Он Вам нужен? Вероятно всего нет. Избавляетесь от его загрузки любым путем(от noload=chan_vpb.so до rm /usr/lib/asterisk/modules/chan_vpb.so).
Если он Вам таки нужен, то следует сверить версии библиотеки /usr/lib/libvpb.so на рабочих и нерабочих машинах. Если ничего не даст - попробуйте перестроить * самостоятельно на машине где падает. Если это не помогает, то постите багрепорт.

_________________
Slackware 13.37 - Asterisk 1.8