Automake error no makefile am found for any configure output

Появилась интересная задача, которая заключается в том что нужно подключить GSM-модем USB HUAWEI E1550 к Asterisk 13 работающий на Debian 8 Jessie. Настроить возможность принимать/отправлять SMS, принимать/звонить с номера находящегося в GSM-модеме.

Появилась интересная задача, которая заключается в том что нужно подключить GSM-модем USB HUAWEI E1550 к Asterisk 13 работающий на Debian 8 Jessie. Настроить возможность принимать/отправлять SMS, принимать/звонить с номера находящегося в GSM-модеме.

Рекомендуется чтобы GSM-модем HUAWEI E1550 работал на прошивке версии: 11.608.12.00.143, а так же чтобы работал только в режиме «только модем».

На момент написания статьи используемая версия Asterisk — 13.25.0, который развернут на Debian 8 Jessie (как развернуть Asterisk 13 на Debian 8 Jessie, можно по этой статье)

Настройка системы и GSM-модема

Обновляем систему до актуального состояния:

aptget update && aptget upgrade y

Устанавливаем необходимые пакеты для работы с USB GSM шлюзом:

aptget install usbmodeswitch minicom

usb-modeswitch необходима для автоматического переключения устройства из режима, minicom необходима для подключения к последовательным портам (COM).

Подключаем GSM-модем HUAWEI E1550, проверяем появились ли устройства ttyUSB*:

ls al /dev | grep ttyUSB

crwrw 1 root dialout 188, 0 фев 27 11:34 ttyUSB0

crwrw 1 root dialout 188, 1 фев 27 11:33 ttyUSB1

crwrw 1 root dialout 188, 2 фев 27 12:37 ttyUSB2

Теперь необходимо перевести GSM-модем HUAWEI E1550 в режим работы «только модем».

В случае если GSM-модем HUAWEI E1550, уже находится в режиме работы «только модем», то пропускайте данный пункт и переходите к установке модуля chan_dongle.

Запускаем утилиту для подключения к последовательным портам (COM):

Выбираем пункт «Настройка последовательного порта»:

            +[конфигурация]+

            | Каталоги и файлы                   |

            | Протоколы                          |

            | Настройка последовательного порта  |

            | Модем и дозвон                     |

            | Экран и клавиатура                 |

            | Сохранить настройки как dfl        |

            | Сохранить настройки как...         |

            | Выход                              |

            | Выход из Minicom                   |

            ++

Нажимаем «A» для выбора имени устройства COM порта, вводим название устройства «/dev/ttyUSB0»

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

    ++

    | A Последовательный порт          : /dev/ttyUSB0                     |

    | B Размещение lockфайла          : /var/lock                        |

    | C Программа при выходе           :                                  |

    | D Программа при запуске          :                                  |

    | E Скорость/Чётность/Биты         : 115200 8N1                       |

    | F Аппаратное управление потоком  : Да                               |

    | G Программное управление потоком : Нет                              |

    |                                                                       |

    |    Какую настройку изменить?                                          |

    ++

            | Экран и клавиатура                 |

            | Сохранить настройки как dfl        |

            | Сохранить настройки как...         |

            | Выход                              |

            | Выход из Minicom                   |

            ++

Нажимаем 2 раза ENTER и выбираем «Сохранить настройки как…»

            +[конфигурация]+

            | Каталоги и файлы                   |

            | Протоколы                          |

            | Настройка последовательного порта  |

            | Модем и дозвон                     |

            | Экран и клавиатура                 |

            | Сохранить настройки как dfl        |

            | Сохранить настройки как...         |

            | Выход                              |

            | Выход из Minicom                   |

            ++

Вводим название профиля, нажимаем ENTER и выбираем пункт «Выход из Minicom»

Подключаемся к сохраненному профилю (я сохранил профиль как e1550):

В терминале, вводим команду AT, нажимаем ENTER, должен вернутся результат —  «ОК«.

Обратите внимание, что символы, которые вводим, могут не отображаться на экране! Однако, после ввода команды и нажатия Enter, GSM-модем должен отобразить результат.

После успешного выполнения команды AT, выполним команду, которая переключит режим работы GSM-модем, в режим работы «только модем»:

Доступные режимы работы GSM-модема HUAWEI E1550:

AT^U2DIAG=0 (режим только модем)
AT^U2DIAG=1 (режим модем + CD-ROM)
AT^U2DIAG=255 (режим модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (режим модем + Card Reader)

Полезные AT-команды:

ATI — Информация о устройстве
AT+CIMI — IMSI модема
AT+CGSN — IMEI модема

Для выхода из программы нажмите Ctrl+A, затем нажмите Q и подтвердите выход нажатием Enter.

Установка модуля chan_dongle

Скачиваем исходник модуля chan_dongle под Asterisk 13 и разархивируем его:

cd /opt

wget https://github.com/olegkrv/asteriskchandongle/archive/asterisk13.zip

unzip asterisk13.zip

cd asteriskchandongleasterisk13

Выполняем сборку модуля, компиляцию и установку модуля:

aclocal && autoconf && automake a

./configure

make

make install

Не обращаем внимание на строчку «automake: error: no ‘Makefile.am’ found for any configure output» — это не является ошибкой

Копируем конфигурационный файл dongle.conf в каталог asterisk и назначаем ему нужные права:

cp etc/dongle.conf /etc/asterisk/

chown asterisk:asterisk /etc/asterisk/dongle.conf

Чтобы при подключении GSM-модема, Asterisk имел доступ к нему, необходимо устройству назначать владельца asterisk и группу dialout. Создаем файл (nano /etc/udev/rules.d/92-dongle.rules) со следующим содержимым:

KERNEL==«ttyUSB*», MODE=«0666», OWNER=«asterisk», GROUP=«dialout»

Перезапустим службу udev и asterisk:

service udev restart

service asterisk restart

Для проверки, переподключим GSM-модем к системе и проверим назначенные права на него:

ls al /dev | grep ttyUSB

crwrwrw 1 asterisk dialout 188, 0 фев 27 11:34 ttyUSB0

crwrwrw 1 asterisk dialout 188, 1 фев 27 11:33 ttyUSB1

crwrwrw 1 asterisk dialout 188, 2 фев 27 13:09 ttyUSB2

Настройка обработки SMS, USSD, Входящих/Исходящих вызовов

В файле конфигурации (/etc/asterisk/dongle.conf) опишем параметры подключенного устройства HUAWEI E1550.

Для примера скорректируем имеющуюся секцию [dongle0]:

[dongle0]

audio=/dev/ttyUSB1 ; tty порт для audio соединений;

data=/dev/ttyUSB2 ; tty порт для AT команд;

context=fromdongle ; используемый контекст

language=ru ; используемый язык

;imei=123456789012345

;imsi=123456789012345

Параметры imei, imsi должны автоматом подхватится при соединении asterisk c GSM-модемом. Если не этого не произошло, то можно в ручную их указать, в строках imei, imsi.

В консоли asterisk, перечитываем конфигурацию chan_dongle и проверяем состояние устройства. Если все было сделано правильно, то подключение к GSM-модему будет осуществлено и устройство будет отображаться в консоли asterisk:

asterisk rv

dongle reload now

dongle show devices

ID      Group State RSSI Mode Submode Provider Name Model  Firmware         IMEI     IMSI    Number

dongle0 0     Free  18   5    4       MTSRUS       E1550  11.608.12.00.143 3588***  2500*** Unknown

Теперь когда соединение с GSM-модемом установлено, настроим dialplan обработки SMS, USSD, входящих и исходящих вызовов. В файле конфигурации (/etc/asterisk/extensions.conf) добавляем следующее:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

[dongleincomingsms]

exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})

exten => sms,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} — ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}’ >> /var/log/asterisk/sms.txt)

exten => sms,n,Hangup()

[dongleincomingussd]

exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})

exten => ussd,n,System(echo ‘${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}’ >> /var/log/asterisk/ussd.txt)

exten => ussd,n,Hangup()

[dongleincomingcall]

exten => +7915*****13,1,Answer()

exten => +7915*****13,n,Playback(demoechotest)

exten => +7915*****13,n,Echo

exten => +7915*****13,n,Playback(demoechodone)

exten => +7915*****13,n,Hangup()

[dongleoutgoingcall]

exten = _X.,1,Dial(Dongle/dongle0/${EXTEN},,t)

exten = _X.,n,Hangup()

[fromdongle]

include => dongleincomingsms

include => dongleincomingussd

include => dongleincomingcall

include => dongleoutgoingcall

При поступлении SMS и USSD запросов, данные их будут сохранятся в тестовые файлы (/var/log/asterisk/sms.txt), (/var/log/asterisk/ussd.txt). При входящем звонке на номер который находится на GSM-модеме, будет запущен «ЭХО тест», при исходящем будет вызван набранный номер. 

Для наглядности работы модуля chan_dongle, приведу выводы из консоли asterisk.

Получение SMS:

[dongle0] <strong>Got SMS from +7985*****73: ‘ТЕСТОВОЕ СООБЩЕНИЕ’</strong>

Executing [sms@fromdongle:1] NoOp(«Local/sms@from-dongle-00000002;1», «Incoming SMS from +7985*****73 ТЕСТОВОЕ СООБЩЕНИЕ») in new stack

Executing [sms@fromdongle:2] System(«Local/sms@from-dongle-00000002;1», «echo ‘2019-02-27 11:24:31 — e1550 — +7985*****73: ТЕСТОВОЕ СООБЩЕНИЕ’ >> /var/log/asterisk/sms.txt») in new stack

Executing [sms@fromdongle:3] Hangup(«Local/sms@from-dongle-00000002;1», «») in new stack

== Spawn extension (fromdongle, sms, 3) exited nonzero on ‘Local/sms@from-dongle-00000002;1’

Пример отправки SMS:

dongle sms dongle0 +7917*****00 HELLO! THIS IS TEST MESSAGE!

[dongle0] SMS queued for send with id 0x7fc348000a90

[dongle0] Successfully sent SMS message 0x7fc348000a90

[Feb 27 11:30:22] NOTICE[852]: at_response.c:257 at_response_ok: [dongle0] Successfully sent SMS message 0x7fc348000a90

Пример отправки USSD запроса:

dongle ussd dongle0 *100#

[dongle0] USSD queued for send with id 0x2e44cc0

[dongle0] Successfully sent USSD 0x2e44cc0

[Feb 27 11:37:13] NOTICE[852]: at_response.c:267 at_response_ok: [e1550] Successfully sent USSD 0x2e44cc0

[dongle0] Got USSD type 0 ‘USSD Notify’: ‘Баланс:5676,62р ‘

Executing [ussd@fromdongle:1] NoOp(«Local/ussd@from-dongle-00000004;1», «Incoming USSD: Баланс:5676,62р «) in new stack

Executing [ussd@fromdongle:2] System(«Local/ussd@from-dongle-00000004;1», «echo ‘2019-02-27 11:37:15 — e1550: Баланс:5676,62р ‘ >> /var/log/asterisk/ussd.txt») in new stack

Executing [ussd@fromdongle:3] Hangup(«Local/ussd@from-dongle-00000004;1», «») in new stack

== Spawn extension (fromdongle, ussd, 3) exited nonzero on ‘Local/ussd@from-dongle-00000004;1’

Очистка SMS из памяти SIM и GSM-модема

Периодически рекомендуется очищать SMS из память SIM и GSM-модема.

Для очистки памяти SIM в консоли asterisk, вводим команды:

dongle cmd <dongle_name> AT+CPMS=«SM«,«SM«,«SM«

dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти GSM-модема в консоли asterisk, вводим команды:

dongle cmd <dongle_name> AT+CPMS=«ME«,«ME«,«ME«

dongle cmd <dongle_name> AT+CMGD=1,4

Понравилась или оказалась полезной статья, поблагодари автора

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

Загрузка…

I’m trying to add some shell commands to automatically search for Makefile.am in my project autoconf (so that I don’t have to worry about forgetting to add an entry next time when there’s a new Makefile.am). But it does not seem to work. I’ve tried to create a minimum project setup to illustrate the problem. The project directory contains:

├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
├── proj2
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
└── README

Most files here are empty, except:

———configure.ac———

AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT

———proj*/Makefile.am———

SUBDIRS = module1 module2

Note that the line:

AC_CONFIG_FILES([${found_mk}])

works perfectly but this one:

AC_CONFIG_FILES([${found_makefile_am}])

Failed with:

$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1

And I had to replace it with:

AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])

It just seems to me that the shell variable is not properly expanded right before autoconfig invokes automake. So is there any solution to this problem?

В предыдущей статье шла речь об установке системы Asterisk версии 11 на сервер под управлением Ubuntu. Основным поводом установки 11 версии было то, что под 13 версию не существовало модуля chan_dongle. Теперь такой модуль есть, поэтому есть смысл написать заново, теперь уже о Asterisk 13, Debian и некоторых других удобных полезных функциях.

Данная инструкция описывает процесс установки телефонной системы Asterisk с модулями DAHDI, LibPRI, PJSip, SpanDSP, chan_dongle и дополнительными кодеками Opus и g729. Никаких WEB-интерфейсов и прочих утилит для конфигурирования и мониторинга системы данная инструкция не предусматривает. Это связано с тем, что автору приходилось неоднократно разбираться с конфигурационными файлами, сгенерированными автоматически при помощи FreeBPX и прочих подобных систем, что вызывало у автора сильную ненависть к подобным оболочкам. Поэтому, друзья, настраивайте все руками в конфигурационных файлах. Это не так сложно, зато работает как часы и разобраться намного проще.

Disclamer

Автор предупреждает читателей, о тонкой грани между допустимым использованием телефонных систем подобного рода и уголовной ответственностью, которая может наступить при неправильной маршрутизации телефонного трафика (рефайлинг). Пожалуйста, ознакомьтесь с законодательством Вашей страны, чтобы избежать проблем. Автор снимает с себя ответственность за любые действия читателя, в которых ему может помочь материал данной статьи и возлагает ее целиком и полностью на читателя данной статьи. Информация, приведенная в данной статье, является справочной и не носит практического характера.

Входные данные
#

Для написания статьи я создал тестовый виртуальный сервер под управлением Debian 8.4. Во время установки было выбрано следующее программное обеспечение: SSH-сервер и Стандартные системные утилиты. В боевой конфигурации рекомендуется выделить отдельный раздел диска для файлов записей разговоров, если это необходимо.

Версия Debian

Важное замечание: производите все действия по установке под учетной записью суперпользователя root. Не используйте sudo, так как это вызывает ошибки в некоторых случаях. Пожалуйста, не игнорируйте это замечание. Вы можете использовать команду:

либо разрешите на время установки доступ пользователю root через ssh, для чего в файле /etc/ssh/sshd_config установите параметр:

и перезапустите ssh-сервер

Установка зависимостей
#

apt-get update && apt-get upgrade && apt-get dist-upgrade

Далее скопируйте и вставьте целиком:

apt-get install -y build-essential 
    autoconf 
    libncurses5-dev 
    libssl-dev 
    libxml2-dev 
    libsqlite3-dev 
    libmysqlclient-dev 
    curl 
    mpg123 
    libxml2 
    libxml2-dev 
    libaudiofile-dev 
    subversion 
    sox 
    libsox-fmt-all 
    uuid-dev 
    libjansson-dev 
    libiksemel-dev 
    libssl-dev 
    libtiff5-dev 
    mysql-client 
    libmyodbc 
    lame 
    linux-headers-`uname -r`

После этой процедуры желательно перезагрузить сервер.

Установка DAHDI
#

Внимание! В большинстве инсталляций Вам не пригодится этот модуль. Он необходим только если у Вас есть оборудование, подключенное к данному серверу, которое взаимодействует с телефонной сетью посредством E1, T1 и т.п. Это разного рода PSTN/DAHDI-платы.

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar xvfz dahdi-linux-complete-current.tar.gz
rm -f dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-*
make all
make install
make config

Результаты выглядят следующим образом:

DAHDI make

DAHDI make install

DAHDI make config

Установка LibPRI
#

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar xvfz libpri-current.tar.gz
rm -f libpri-current.tar.gz
cd libpri-*
make
make install

Результаты выглядят следующим образом:

libpri make

libpri install

Установка PJSip
#

PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами. Подробнее.

Скопируйте ссылку на загрузку последней версии с сайта www.pjsip.org и используйте в команде wget ниже:

cd /usr/src
wget http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2
tar -xjvf pjproject-*.tar.bz2
rm -f pjproject-*.tar.bz2
cd pjproject-*
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr
make dep
make
make install

Результаты выглядят следующим образом:

pjsip configure

pjsip make dep

pjsip make

pjsip make install

Установка SpanDSP
#

Данный модуль необходим для работы с факсами. Если поддержка факсов не нужна, то можно смело пропустить установку этого модуля.

Так как последняя версия spandsp была выпущена достаточно давно, то можно без проблем установить его из репозитория Debian.

apt-get install -y libspandsp2 libspandsp-dev

Либо же загрузите последнюю версию для установки вручную:

cd /usr/src
wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz
tar vxfz spandsp-*.tgz
rm -f spandsp-*.tgz
cd spandsp-*
./configure
make clean
make
make install

Результаты выглядят следующим образом:

spandsp configure

spandsp make

spandsp makeinstall

Установка Asterisk 13
#

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvfz asterisk-13-current.tar.gz
rm -f asterisk-13-current.tar.gz
cd asterisk-13*
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install
./configure
make menuselect

Результаты выглядят следующим образом:

asterisk install_prereq

asterisk configure — заветная звёздочка

Далее в конфигурационном меню необходимо выбрать по необходимости следующие компоненты:

  • Add-ons: format_mp3
  • Core Sound Packages: CORE-SOUNDS-EN-(WAV, ALAW, GSM, G729, G722), CORE-SOUNDS-RU-(WAV, ALAW, GSM,G729, G722)
  • Extras Sound Packages: WAV, ALAW, GSM, G729 и G722

Как это выглядит на скриншотах:

Addons

Core Sound Packages

Extras Sound Packages

Продолжаем установку (процесс make занимает достаточно много времени).

Saples
#

Если это первая установка или у Вас еще нет базовых конфигурационных файлов, Вы можете их установить, выполнив make samples. Если Вы не понимаете, о чем идет речь, однозначно устанавливайте.

make
make install
make config
make samples
ldconfig

Результаты выглядят следующим образом:

asterisk make

asterisk make install

Установка кодека G729
#

Если кодек g729 не нужен — смело пропускаем.

G729 — узкополосный речевой кодек (вокодер), который применяется для эффективного цифрового представления узкополосной телефонной речи (сигнала телефонного качества).

Для начала нужно узнать, какой процессор используется в Вашем сервере:

grep -E 'model name|flags' /proc/cpuinfo

Внимание! Перед тем, как скачивать кодек, откройте сайт asterisk.hosting.lv, выберите подходящий под систему и процессор кодек, скопируйте ссылку на его загрузку и используйте именно эту ссылку в команде ниже! Это крайне важно!

wget -P /usr/lib/asterisk/modules/ -O codec_g729.so ссылка_на_загрузку

После установочная настройка
#

На этом основная установка системы окончена. Запустите Asterisk и убедитесь, что все в порядке:

/etc/init.d/asterisk start
ps ax | grep asterisk
asterisk -rvvvvvvvvvvddddddddddc

quit
/etc/init.d/asterisk stop

Если планируется использовать USB-модемы, то Asterisk желательно запускать от имени группы dialout, чтобы он имел доступ к устройствам USB.

adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
usermod -a -G dialout,audio asterisk

Задаем права на каталоги:

chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /var/log/asterisk
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /var/spool/asterisk
chown -R asterisk:asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk
chmod -R u=rwX,g=rX,o= /var/lib/asterisk
chmod -R u=rwX,g=rX,o= /var/log/asterisk
chmod -R u=rwX,g=rX,o= /var/run/asterisk
chmod -R u=rwX,g=rX,o= /var/spool/asterisk
chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
chmod -R u=rwX,g=rX,o= /etc/asterisk

Если Вы установили базовые конфигурационные файлы, то по умолчанию в них сконфигурирован английский язык (это влияет на речевые информаторы). Если желаете, можете изменяем язык на русский во всех файлах:

sed -i 's/defaultlanguage = en/defaultlanguage = ru/' /etc/asterisk/asterisk.conf
sed -i 's/;language=en/language=ru/' /etc/asterisk/*.conf

В файле /etc/default/asterisk раскомментируем две строчки и изменяем название группы:

AST_USER="asterisk"
AST_GROUP="dialout"

Запускаем Asterisk и смотрим, от какого пользователя он запустился:

/etc/init.d/asterisk start
ps aux | grep asterisk

Должно быть:

asterisk ps aux

Установка chan_dongle
#

Модуль chan_dongle необходим для работы с USB-модемами Huawei:

  • K3715
  • E169 / K3520
  • E155X
  • E175X
  • K3765

Описываемая в данной статье версия является форком основного проекта, но основной проект не развивается с 2013 года и поддерживает только Asterisk 11. Впрочем, есть еще один форк той версии, что используется в данной статье. В связи с этим гарантировать работу модуля невозможно. Со списком известных багов можно ознакомиться по этой ссылке, но не ожидайте, что автор их исправит, так как этот список не обновлялся с 2011 года. Даже сам автор предупреждает, что модуль работает как попало и может назвонить вам куда нибудь и тем самым сожрать все ваши деньги или натворить еще что-то. Так что пожалуйста, прежде чем читать дальше, еще раз подумайте, стоит ли связываться с этим модулем. На сегодняшний день это единственный модуль, способный заставить дружить недорогие GSM-модемы с Asterisk и, скорее всего, у Вас нет выбора.

This channel driver is in alpha stage.
I am not responsible if this channel driver will eat your money on your SIM card or do any unpredicted things.

Модемы должны быть разлочены, проверка PIN-кода на SIM-карте должна быть отключена. Также необходимо обязательно отключить на модемах функции CR-ROM и CARDREADER, оставив модем только в режиме модема. Для этого необходимо подключиться к модему консолью и дать следующую АТ-команду:

Также желательно отключить на модеме ожидание вызова:

Установите необходимые для сборки chan_dongle пакеты:

apt-get install -y unzip automake autoconf

Далее загружаем форк chan_dongle под Asterisk 13, разархивируем, собираем, устанавливаем. Не обращаем внимание на строчку “automake: error: no ‘Makefile.am’ found for any configure output” — это не является ошибкой:

cd /usr/src
wget https://github.com/oleg-krv/asterisk-chan-dongle/archive/asterisk13.zip
unzip asterisk13.zip
rm -f asterisk13.zip
cd asterisk-chan-dongle-asterisk13
aclocal && autoconf && automake -a
./configure
make
make install

Результаты выглядят следующим образом:

dongle configure

dongle make install

Копируем конфигурационный файл dongle.conf:

cp etc/dongle.conf /etc/asterisk/
chown asterisk:asterisk /etc/asterisk/dongle.conf
chmod u=rwX,g=rX,o= /etc/asterisk/dongle.conf

Перезапускаем Asterisk, смотрим, загрузился ли модуль:

/etc/init.d/asterisk restart
asterisk -rvvvvvvvvvvddddddddddc
dongle show devices

Далее необходимо сделать так, чтобы модемам при подключении назначался верный владелец (чтобы Asterisk имел к ним доступ). Для этого создадим файл /etc/udev/rules.d/92-dongle.rules со следующим содержимым:

KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="dialout"

Затем перезапустим службу udev:

Теперь при подключении устройства типа ttyUSB, система автоматически назначит ему владельца asterisk и группу dialout.

Идентификация по IMSI или IMEI
#

В Файле /etc/asterisk/dongle.conf описываются все устройства. Синтаксис файла — общепринятый в Asterisk. Например, я опишу модем, в котором установлена SIM-карта оператора «Киевстар»:

[Kievstar]
imsi=255012321232123
imei=345654898756548
context=from-dongle

Идентификация устройства производится по IMSI и IMEI. Можно идентифицировать устройство только по одному из параметров. IMSI — это идентификатор SIM-карты, IMEI — это идентификатор терминала. Если Вам важно идентифицировать устройства по SIM-картам, тогда Вы можете указать только IMSI номера этих SIM-карт (написаны на картах), если же важно идентифицировать по терминалам, тогда указывайте IMEI терминала (написан на модеме).

Все входящие вызовы с такого устройства будут обработаны контекстом from-dongle из файла extensions.conf или extensions.ael.

Исходящие вызовы через данный модем необходимо направлять на Dongle/Kievstar.

Также в описании устройства можно указать exten=+380123456789. В таком случае все входящие вызовы будут иметь указанный exten. В некоторых случаях это возможно понадобится.

Если идентификация по IMEI / IMSI не работает
#

В последней версии chan_dongle обнаружение устройств выполняется либо по идентификатору терминала (модема) — IMEI, либо по идентификатору абонента (SIM-карты) — IMSI. Если же по каким-то причинам Вам необходимо идентифицировать устройство по порту USB-контроллера, то используйте расширенную конфигурацию udev для присвоения псевдонимов портам, а затем эти псевдонимы можно использовать для определения модемов в dongle.conf.

Для привязки модемов по номеру порта контроллера USB, нужно определить адреса этих портов. Извлеките все модемы из сервера, затем запустите:

Вставляйте по одному модему и записывайте адреса портов контроллера, которые относятся к каждому из них. Затем в файл /etc/udev/rules.d/92-dongle.rules допишите псевдонимы для каждого из модемов, указав адреса контроллеров в качестве ID, подобно следующему:

KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.1", SYMLINK+="Kievstar-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-1:1.2", SYMLINK+="Kievstar-data"

KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.1", SYMLINK+="Vodafone-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.2", SYMLINK+="Vodafone-data"

KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.1", SYMLINK+="Lifecell-audio"
KERNEL=="ttyUSB[0-9]*", ID=="1-3:1.2", SYMLINK+="Lifecell-data"

Как видно из примера, необходимы только два порта, вместо четырех.

Теперь в файле /etc/asterisk/dongle.conf вместо идентификации по IMEI и/или IMSI укажите идентификацию по портам USB следующим образом:

[Kievstar]
audio=/dev/Kievstar-audio 
data=/dev/Kievstar-data
context=from-dongle

Однако этот метод определения модемов не является рекомендуемым, т.к. при случайной смене USB-порта либо вообще ничего не будет работать, либо Ваши вызовы пойдут не туда куда планировалось. Настоятельно рекомендуется использовать идентификацию по IMEI / IMSI.

На этом установка полностью завершена.

The symptoms are:

In file included from app.c:21:0:
/usr/include/asterisk/version.h:1:2: error: #error «Do not include ‘asterisk/version.h’; use ‘asterisk/ast_version.h’ instead.»
app.c: In function ‘app_register’:
app.c:162:3: warning: passing argument 2 of ‘ast_register_application2’ from incompatible pointer type [enabled by default]
In file included from app.c:20:0:
/usr/include/asterisk/module.h:458:5: note: expected ‘int (*)(struct ast_channel *, const char *)’ but argument is of type ‘int (*)(struct ast_channel *, void *)’
make: *** [app.o] Error 1


Solution:

  • Download patched sources
  • autoconf and autmake should be installed
  • uzip sources
  • cd to unzipped folder
  • issue commands: aclocal, autoconf, automake -a
  • install chan_dongle as usual ./configure, make, make install.

then I got next error


# sudo make install
./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
strip chan_dongle.so
/usr/bin/install -c -m 755 chan_dongle.so
/usr/bin/install: missing destination file operand after `chan_dongle.so’
Try `/usr/bin/install —help’ for more information.
make: *** [install] Error 1

Error because on chan_dongle installed on 64 bit OS. In that case DESTDIR should be: DESTDIR=»/usr/lib64/asterisk/modules

after that you can run asterisk console and load module:


CLI> module load chan_dongle.so


but then next error comes:


WARNING[24644]: chan_dongle.c:218 opentty: unable to open /dev/ttyUSB2: Permission denied
that because of wrong permissions.

That usually happens when asterisk running in non root mode. Set the correct permissions to /dev/ttyUSB


#chmod 666 /dev/ttyUSB*


after all chan_dongle is up and runnin, but after adding second dongle, problem with permissions comes back. The silution is to set permission automatically. Create file in /etc/udev/rules.d/92-dongle.rules
and add


KERNEL==»ttyUSB*», MODE=»0666″, OWNER=»asterisk», GROUP=»uucp»

Я пытаюсь добавить некоторые команды оболочки для автоматического поиска Makefile.am в autoconf моего проекта (так что мне не нужно беспокоиться о том, чтобы забыть добавить запись в следующий раз, когда появится новый Makefile.am). Но, похоже, это не работает. Я попытался создать минимальную настройку проекта, чтобы проиллюстрировать проблему. Каталог проекта содержит:

├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
├── proj2
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
└── README

Большинство файлов здесь пусты, кроме:

———configure.ac———

AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/.am$//g' -e 's/^.///g' | sed ':a;N;$!ba;s/n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT

———проект*/Makefile.am———

SUBDIRS = module1 module2

Обратите внимание, что строка:

AC_CONFIG_FILES([${found_mk}])

работает отлично, но этот:

AC_CONFIG_FILES([${found_makefile_am}])

Не удалось с:

$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1

И мне пришлось заменить его на:

AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])

Мне просто кажется, что переменная оболочки не расширяется должным образом прямо перед тем, как autoconfig вызывает automake. Так есть ли решение этой проблемы?

Понравилась статья? Поделить с друзьями:
  • Automake error configure ac is required
  • B0022 0d шевроле каптива ошибка
  • B0021 ошибка opel
  • B0020 ошибка опель
  • B0020 ошибка ниссан