Появилась необходимость иметь второй номер, но телефон у меня на одну сим-карту. И тут на глаза попался старый usb модем, который валялся без дела и в котором, о совпадение, был разъём под симку))
Дано:
Сервер на FreeBSD 10.1
Asterisk 11
GSM-modem Huawei 303s-2
Задача:
Настроить звонки с симки на рабочий номер и обратно
Решение:
Как на странно информации об этом деле не много - по сути есть только один модуль и его форк. Ну да ладно - asterisk у меня уже стоит и работает - надо поставить по сути драйвер для модема.
Создаём директорию в которой будем работать и переходим туда
Код: Выделить всё
# mkdir /usr/local/install
# cd /usr/local/install
Код: Выделить всё
# git clone https://github.com/jstasiak/asterisk-chan-dongle.git
Cloning into 'asterisk-chan-dongle'...
remote: Counting objects: 279, done.
remote: Total 279 (delta 0), reused 0 (delta 0), pack-reused 279
Receiving objects: 100% (279/279), 202.97 KiB | 131.00 KiB/s, done.
Resolving deltas: 100% (156/156), done.
Checking connectivity... done.
Код: Выделить всё
# cd asterisk-chan-dongle
Код: Выделить всё
voip*CLI> module load chan_dongle.so
Unable to load module chan_dongle.so
Command 'module load chan_dongle.so' failed.
Код: Выделить всё
preload => chan_dongle.so
Код: Выделить всё
voip# asterisk -v
... вырезано ...
Error loading module 'chan_dongle.so': /usr/local/lib/asterisk/modules/chan_dongle.so: Undefined symbol "libiconv"
Module 'chan_dongle.so' could not be loaded.
Код: Выделить всё
voip# cd /usr/ports/converters/libiconv
voip# make deinstall
Код: Выделить всё
voip# aclocal
aclocal-1.15: warning: autoconf input should be named 'configure.ac', not 'configure.in'
voip# autoconf
voip# automake -a
automake-1.15: warning: autoconf input should be named 'configure.ac', not 'configure.in'
configure.in:50: installing './compile'
configure.in:6: installing './config.guess'
configure.in:6: installing './config.sub'
configure.in:7: installing './install-sh'
configure.in:7: installing './missing'
automake-1.15: error: no 'Makefile.am' found for any configure output
voip# ./configure CC=gcc47
... Пропущено ...
voip# gmake
... Пропущено ...
voip# cp chan_dongle.so /usr/local/lib/asterisk/modules
voip# cp etc/dongle.conf /usr/local/etc/asterisk/
Тут следует сделать некое лирическое отступление - дело в том, что просто так модуль не соберётся - ему нужен компилятор gcc, который не идёт в FreeBSD 10 по умолчанию, а для того, что бы asterisk не вылетал - его тоже необходимо собрать этим же компилятором. Для всего этого необходимо установить компилятор
Код: Выделить всё
# cd /usr/ports/lang/gcc47
# make install clean
Код: Выделить всё
libgcc_s.so.1 gcc47/libgcc_s.so.1
libgomp.so.1 gcc47/libgomp.so.1
libobjc.so.3 gcc47/libobjc.so.4
libssp.so.0 gcc47/libssp.so.0
libstdc++.so.6 gcc47/libstdc++.so.6
Код: Выделить всё
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc47)
CC=gcc47
CXX=g++47
CPP=cpp47
.endif
[/color][/i]
После чего перезапускаю asterisk и убеждаюсь что модуль подгрузился
Код: Выделить всё
voip# asterisk -v
... Пропущено ...
chan_dongle.so => (Huawei 3G Dongle Channel Driver)
Код: Выделить всё
voip*CLI> dongle show version
chan_dongle: Huawei 3G Dongle Channel Driver, Version 1.1, Revision 34
Project Home: http://code.google.com/p/asterisk-chan-dongle
Bug Reporting: http://code.google.com/p/asterisk-chan-dongle/issues/list
Код: Выделить всё
voip*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Not connec 0 0 0 NONE Unknown
Но сначала надо поправить исходники ядра, ибо моего 303 в конфигах нет
правим /sys/dev/usb/serial/u3g.c - находим там хуавеи и втискиваем туда рядом с похожим 173
Код: Выделить всё
U3G_DEV(HUAWEI, E303, 0),
U3G_DEV(HUAWEI, E303_INIT, U3GINIT_HUAWEISCSI),
Код: Выделить всё
product HUAWEI E303_INIT 0x14fe 3G modem initial
product HUAWEI E303 0x1506 3G modem
Глянем как у нас определился модем при загрузке системы - ищем следующий вывод
Код: Выделить всё
voip# dmesg -a
Mar 9 17:58:51 voip kernel: ugen1.2: <HUAWEI> at usbus1
Код: Выделить всё
voip# kldload u3g
Mar 9 18:02:56 voip kernel: u3g0: <HUAWEI HUAWEI Mobile, class 0/0, rev 2.00/1.02, addr 2> on usbus1
Mar 9 18:02:56 voip kernel: u3g0: Found 2 ports.
Код: Выделить всё
voip# ls -lah /dev/cuaU*
crw-rw---- 1 uucp dialer 0x77 Mar 9 18:02 /dev/cuaU0.0
crw-rw---- 1 uucp dialer 0x78 Mar 9 18:02 /dev/cuaU0.0.init
crw-rw---- 1 uucp dialer 0x79 Mar 9 18:02 /dev/cuaU0.0.lock
crw-rw---- 1 uucp dialer 0x7d Mar 9 18:02 /dev/cuaU0.1
crw-rw---- 1 uucp dialer 0x7e Mar 9 18:02 /dev/cuaU0.1.init
crw-rw---- 1 uucp dialer 0x7f Mar 9 18:02 /dev/cuaU0.1.lock
Код: Выделить всё
voip# pw groupmod uucp -m asterisk
voip# pw groupmod dialer -m asterisk
voip# pw groupshow dialer
dialer:*:68:asterisk
Код: Выделить всё
[dongle0]
audio=/dev/cuaU0.0
data=/dev/cuaU0.1
Код: Выделить всё
voip*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 13 5 4 Beeline E303 21.158.13.00.864 805014016241082 250961911801313 Unknown
Литература:
http://lists.freebsd.org/pipermail/free ... 52792.html
https://www.mail-archive.com/freebsd@ua ... 08108.html
http://unix.stackexchange.com/questions ... on-freebsd
http://oioki.ru/2012/11/nastroyka-huawe ... -asterisk/
https://github.com/superles/chan-dongle-asterisk12
http://www.ra1aie.ru/?p=1215
https://communities.vmware.com/message/2318102