воскресенье, 21 августа 2011 г.

Скомпилировать дополнительный модуль для Asterisk'а

При компилировании дополнительных модулей для Астериска, если он компилировался не на этой машине (например установка FreePBX с диска, где все бинарники уже скомпилированы и нет заголовочных файлов), обычно заканчивается сообщением в логах во время звгрузки модуля "was not compiled with the same compile-time options as this version of Asterisk".
Поиск по Нету ничего путного не дал кроме рекомендации перекомпилировать Asterisk. Однако копание в исходниках дало такой параметр: AST_BUILDOPT_SUM. Именно он генерируется на этапе компиляции Астериска и прописывается в каждом модуле для проверки скомпилирован ли он вместе с основным Астериском.
Для того, что бы найти его значение, открываем любым редактором (лучше шестнадцатеричным) какой-нибудь из модулей, например chan_sip.so и ищем в нем слово AST_BUILDOPT_SUM. Следом за ним в кавычках идет 19 шестнадцатеричных символов. Берем их и правим файл include/asterisk/buildopts.h меняя значение AST_BUILDOPT_SUM на полученные 19 символов.
Необходимо отдавать себе отчет, что такая защита сделана не зря, и обращать внимание на строку "will not be initialized as it may cause instability" (может привести к нестабильности).

1 комментарий:

  1. Доброго дня.
    Вариант два:
    Модули в сборке FreePBX (и других) собраны без отладочных символов (stripped в общем).
    То есть, поиск по BUILDOPT в этих модулях ничего не дает.
    Поэтому, делаем так: открываем модуль в hex-редакторе, крутим в конец файла. Чуть выше есть строка из идущих подряд 32х hex-символов (0-9,a-f). Это и есть тот самый ключ.
    После этого компилируем нужный нам модуль Астериска из исходников, находим ключ в этом модуле, открываем его hex-редактором и заменяем этот ключ на НАЙДЕНЫЙ РАНЕЕ от FreePBX.
    Кладем.заменяем пропатченный таким образом модуль в папку модулей (/usr/lib64/asterisk/modules на FreePBX), в консоли Астериска делаем "module unload / module load".
    Модуль должен подгрузиться без ошибок.

    ОтветитьУдалить