Elastix 2.4.0+Huawei 1550/153 в качестве транка в GSM сеть

   Написать сие чтиво меня побудило собственные мытарства по обтачиванию напильником АТС на основе Asteriska для собственных нужд предприятия  .  На сегодня проблема стоит уже не протягиванию дополнительных пар в соседние кабинеты для телефонов , а более глобально - например оперативная телефонная связь с  отделом в другом городе . 

  Для связи с внешним миром и удешевления исходящих вызовов будем использовать GSM модемы типа Huawei 1550 и Huawei 153 . Хочется сказать , что заработали обе модели модемов , хотя информации по 153 хайвею о совместимости я признаться честно не нашел - наверное плохо искал .  Качество голоса такого решения для транков в GSM сети получается не очень , но если учитывать стоимость одного GSM модема в размере до 30 у.е и стоимость аналогичных специализированных решений например от ATCOM c ценником , который начинается от 300 у.е , то выбор будет однозначен для многих в пользу дешевых модемов с активированной функцией передачи голоса .

     При установке будем использовать дистрибутив Elastix 2.4.0 .   В основе дистрибутива лежит CentOS 5 ветки  с ядром 2.6.18 , которое не корректно работает с устройствами USB , что приводит к отсутствию звука в направлении Sip -> GSM или сильным искажениям звука до неразборчивости .  На модемах предварительно  следует отключить все устройства (CD и кардридер ) поскольку они будут мешать нормально определиться USB устройствам в системе под операционной системой Linux .

   Мне лично было намного удобней отключить ненужные функции из под форточек , поскольку разлочить и активировать голосовые фунции все равно пришлось под управлением Windows .    Предполагается , что у вас разлоченный модем с активированной функцией голоса .  Отключим не нужные нам виртуальный CD-ROM и Card Reader модема . Для подключения используем Huper Terminal OS Windows .

 

     Обновим ядро системы до 2.6.39 , проблемы с модемами исчезают по разным источникам от версии ядра выше 2.6.32 . Установим необходимые пакеты для обновления ядра

yum install -y ncurses-devel gcc make rpm-build redhat-rpm-config

Перейдем   в каталог с исходниками

cd /usr/src

Загрузим исходники ядра 2.6.39

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2

Разархивируем его

tar -xf linux-2.6.39.tar.bz2

Создадим симлинк на  исходники ядра

ln -sf /usr/src/linux-2.6.39 /usr/src/linux

Скопируем конфиг от активного ядра

cd linux

cp /boot/config-`uname -r` .config

Запустим конфигуратор ядра
 

make menuconfig

И вносим небольшую корректировочку без которой новое ядро не взлетит:
- в разделе

"General setup --->" активируем  опцию "enable deprecated sysfs features which may confuse old userspace tools"и

"enable deprecated sysfs features by default"
Выходим из кофигуратора
Создаем папки для  rpm файла:

    mkdir -p /usr/src/redhat/SRPMS
    mkdir -p /usr/src/redhat/RPMS/{i386,x86_64}

Редактируем файл

    nano scripts/package/mkspec

добавляя в его конец следующее:

    echo "%post"
    echo "/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install "$KERNELRELEASE" || exit \$?"
    echo ""

    echo "%preun"
    echo "/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove "$KERNELRELEASE" || exit \$?"
    echo ""

Сохраняемся {CLTR} X Подтверждаем Y и наконец {ENTER}

Собираем ядро (заодно контролируем время сборки):

    time make rpm

На довольно слабой машинке типа селерона 2.6 это заняло около 2 часов :) .

По окончании устанавливаем новое свежее красивое ядро.

    rpm -ihv /usr/src/redhat/RPMS/i386/kernel-2.6.39-1.i386.rpm

Проверяем правильно ли оно прописалась в настройк grub'а

    [root@voip ~]# cat /boot/grub/menu.lst
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/hdc
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.39)
            root (hd0,0)
            kernel /vmlinuz-2.6.39 ro root=/dev/VolGroup00/LogVol00
            initrd /initrd-2.6.39.img
    title Elastix (2.6.18-194.3.1.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-194.3.1.el5 ro root=/dev/VolGroup00/LogVol00
            initrd /initrd-2.6.18-194.3.1.el5.img
     
Перезагружаемся , надеюсь все собралось удачно и паники ядра нет , хотя всегда можно загрузиться со старым ядром
    reboot

После перезагрузки проверяем версию текущего ядра

    [root@voip ~]# uname -a

На момент написания статьи проэкт chan_datacard  http://code.google.com/p/datacard/  гласил , что он закрыт и переехал на chan_dongle  . Загрузим chan_dongle

wget http://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz

Разархивируем

 

Конфигурим

./configure

Установим

make install

Надеюсь у вас все собралось без ошибок

Копируем файл dongle.conf  в папку /etc/asterisk/

 Внесем секцию [incoming-datacard]  в файл /etc/asterisk/extensions_custom.conf , которая описывает поведение наших модемов при входящих СМС и звонках  , подробней об этом на форуме  http://asteriskforum.ru/viewtopic.php?p=61558 .

[incoming-datacard]

exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

exten => s,1,Goto(from-pstn,${IMEI},1)

Обратите внимание на последнюю строку секции [incoming-datacard]  , использование ее в таком виде обеспечит возможность обрабатывать звонки в очередях и прочих возможностях астериска с веб морды еластикса . В просторах инета валяется масса вариантов описания диалпланов , но к сожалению они не такие элегантные и как правило выглядят топорно .

В CentOS есть небольшая неприятность , связанная с правами на устройства USB , в результате чего пользователь asterisk не имеет прав на чтение файлов устройств

/dev/ttyUSB....

Для решения этой неприятности подправим напильником файл  50-udev.rules

nano /etc/udev/rules.d/50-udev.rules

Внесите в файл содержимое этих строк , не забыв удалить или закаментить соответствующий старый кусок в файле . Вопросы с правами  на устройства USB будут решены

KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.0", SYMLINK+="hw-modem-0", MODE="0666", OWNER="asterisk", GROUP="uucp"
KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.1", SYMLINK+="hw-audio-0", MODE="0666", OWNER="asterisk", GROUP="uucp"
KERNEL=="ttyUSB*", SUBSYSTEMS=="usb", KERNELS=="1-2:1.2", SYMLINK+="hw-data-0", MODE="0666", OWNER="asterisk", GROUP="uucp"

Не  забудьте отключить пин код с карточек :).

Перезагрузим систему

[root@asterisk ~]#reboot

Войдем в консоль астериска

[root@asterisk ~]#asterisk -r

 

asterisk*CLI> datacard show devices

 

 

  

 

 

Your rating: None Average: 5 (4 votes)
pixelclever