Компиляция и установка дополнительных модулей в Asterisk

Установил из стандартного репозитория Linux Debian v6.0.7 IP-PBX Asterisk v1.8.13.1. Далее при ее конфигурировании столкнулся с нехваткой ряда модулей, в частности: codec_ilbc, cdr_mysql, app_konference. К тому моменту IP-PBX Asterisk уже была по большей части настроена и вполне успешно выполняла свои функции, поэтому собирать и устанавливать ее из исходников я желанием не горел. Было принято решение скомпилировать отдельные модули и подсунуть их работающей IP-PBX Asterisk.
Отправляемся на http://downloads.asterisk.org/pub/telephony/asterisk/, находим там и скачиваем архив с исходными кодами версии, установленной у вас IP-PBX Asterisk. Хочу обратить внимание, что номер версии должен совпадать полностью до единой цифры после точек. Откуда такое жесткое требование будет объяснено чуть позже в этой заметке.
Распаковываем исходники, компилируем:

./configure
make menuselect
make

А вот "make install" выполнять не стоит. Также не забудьте на стадии "make menuselect" выбрать необходимые вам модули.
Отыскиваем скомпилированные модули и копируем их в каталог, указанный в опции «astmoddir» конфигурационного файла «asterisk.conf».
Подгружаем модули в CLI IP-PBX Asterisk, но тут нас ждет разочарование:

asterisk*CLI> module load cdr_mysql.so
Unable to load module cdr_mysql.so
Command 'module load cdr_mysql.so ' failed.
[2013-07-20 16:12:08] WARNING[6307]: loader.c:779 inspect_module: Module 'cdr_mysql.so' was not compiled with the same compile-time options as this version of Asterisk.
[2013-07-20 16:12:08] WARNING[6307]: loader.c:780 inspect_module: Module 'cdr_mysql.so' will not be initialized as it may cause instability.
[2013-07-20 16:12:08] WARNING[6307]: loader.c:863 load_resource: Module 'cdr_mysql.so' could not be loaded.

Разработчики встроили проверку, которая предотвращает загрузку модуля от другой бинарной сборки, поскольку это может привести к сбоям в работе IP-PBX Asterisk. Но если мы готовы пойти на риск, то данную проблему можно обойти.
Механизм проверки построен на том, что на стадии компиляции в константу AST_BUILDOPT_SUM заносится хеш-сумма, которая позволяет однозначно идентифицировать каждую бинарную сборку. Выглядит она, как 32 идущих подряд шестнадцатеричных цифры: «6af7a0d0f0f2c25309ff3df194ce74f0» (без кавычек).
Необходимо найти такую строку в любом из модулей, шедших в поставке вашей инсталляции IP-PBX Asterisk. Она расположена ближе к концу файла. Далее в файле «include/asterisk/buildopts.h» исправляем значение константы AST_BUILDOPT_SUM. Пересобираем модули:

make

Вновь копируем в каталог с остальными модулями IP-PBX Asterisk и подгружаем:

asterisk*CLI> module load cdr_mysql.so
Loaded cdr_mysql.so
== Parsing '/etc/asterisk/cdr_mysql.conf': == Found
Loaded cdr_mysql.so => (MySQL CDR Backend)

Обратите внимание, что вносить правки в файл «include/asterisk/buildopts.h» следует каждый раз, после выполнения "make menuselect".
Существует также другой подход. Можно пропатчить вновь скомпилированные модули, например, редактором hexedit. Т.е. просто найти и заменить строку из 32 идущих подряд шестнадцатеричных цифр ближе к концу файла. Только следует убедиться, не встречается ли она в нем несколько раз.

Похожие публикации
  1. Доброго.
    Работает !!!
    В работающих модулях можно легко найти значение AST_BUILDOPT_SUM.
    Я искал в редакторе nano.

    Спасибо большое за статью.

  2. Не поверите, но тоже Руслан

    вытаскиваем сумму:
    grep -Eao "[0-9abcdef]{32}" /usr/lib64/asterisk/modules/codec_ulaw.so

  3. Спасибо! Работает!

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


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>