Установка Asterisk 13 + chan_dongle (E1550, E1750) на Debian 8

Установка Asterisk 13 + chan_dongle (E1550, E1750) на Debian 8 #

В предыдущей статье шла речь об установке системы 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, так как это вызывает ошибки в некоторых случаях. Пожалуйста, не игнорируйте это замечание. Вы можете использовать команду:

su -

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

PermitRootLogin yes

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

service sshd restart

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

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, оставив модем только в режиме модема. Для этого необходимо подключиться к модему консолью и дать следующую АТ-команду:

AT^U2DIAG=0

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

AT+CCWA=0,0,1

Установите необходимые для сборки 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:

service udev restart

Теперь при подключении устройства типа 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, нужно определить адреса этих портов. Извлеките все модемы из сервера, затем запустите:

udevadm monitor

Вставляйте по одному модему и записывайте адреса портов контроллера, которые относятся к каждому из них. Затем в файл /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.

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

comments powered by Disqus