Linux
Which packages are required to build mod_skypopen on Linux
You will need the libraries needed by Skype client and by the fake X server.
REALLY, you need all the packages below!
You can cut and paste the follow:
CentOS 5.x, RHEL5 required packages
yum install -y subversion autoconf automake libtool gcc-c++ \ ncurses-devel make libX11-devel Xvfb alsa-utils libXv libXScrnSaver \ xorg-x11-fonts* alsa-lib libXScrnSaver libtiff-devel libjpeg-devel \ glib2.i386 zlib.i386 alsa-lib.i386 libX11.i386 libXv.i386 \ libXScrnSaver.i386 kernel-devel # then you need to install EPEL from here: http://fedoraproject.org/wiki/EPEL # after installing EPEL yum install git-core
Ubuntu 10.04.x (LTS) required packages
apt-get install ubuntu-standard build-essential linux-headers-$(uname -r) \ libX11-dev subversion automake autoconf wget libtiff4-dev libjpeg62-dev libtool \ libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi \ xfonts-75dpi xfonts-scalable git-core ia32-libs lib32asound2 \ libc6-i386 lib32gcc1 lib32stdc++6 lib32ncurses5 lib32z1 alsa-base \ linux-sound-base libfontenc1 libfs6 libice6 libpixman-1-0 libsm6 \ libx11-6 libx11-data libx11-dev libxau-dev libxau6 libxaw7 libxcb1 \ libxcb1-dev libxcursor1 libxdmcp-dev libxdmcp6 libxext6 libxfixes3 \ libxfont1 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 \ libxrandr2 libxrender1 libxss1 libxt6 libxv1 x11-common x11-xkb-utils \ x11proto-core-dev x11proto-input-dev x11proto-kb-dev xauth \ xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable \ xfonts-utils xfs xkb-data xml-core xserver-common xtrans-dev xvfb \ libgl1-mesa-dri libcurl4-openssl-dev
Debian 6 (Squeeze) and Ubuntu 12.04.x (LTS) required packages
apt-get install ubuntu-standard build-essential linux-headers-$(uname -r) \ libX11-dev subversion automake autoconf wget libtiff4-dev libtool \ libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi \ xfonts-75dpi xfonts-scalable git-core ia32-libs lib32asound2 \ libc6-i386 lib32gcc1 lib32stdc++6 lib32ncurses5 lib32z1 alsa-base \ linux-sound-base libfontenc1 libfs6 libice6 libpixman-1-0 libsm6 \ libx11-6 libx11-data libx11-dev libxau-dev libxau6 libxaw7 libxcb1 \ libxcb1-dev libxcursor1 libxdmcp-dev libxdmcp6 libxext6 libxfixes3 \ libxfont1 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 \ libxrandr2 libxrender1 libxss1 libxt6 libxv1 x11-common x11-xkb-utils \ x11proto-core-dev x11proto-input-dev x11proto-kb-dev xauth \ xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable \ xfonts-utils xfs xkb-data xml-core xserver-common xtrans-dev xvfb \ libgl1-mesa-dri libcurl4-openssl-dev libjpeg-dev
CentOS 6.x, RHEL6, Scientific Linux 6, Amazon Linux AMI required packages
yum -y install autoconf automake gcc-c++ git-core libjpeg-devel libtool \ make ncurses-devel unixODBC-devel openssl-devel gnutls-devel libogg-devel \ libvorbis-devel curl-devel libtiff-devel libjpeg-devel subversion autoconf \ automake libtool gcc-c++ ncurses-devel make libX11-devel Xvfb alsa-utils \ libXv libXScrnSaver xorg-x11-fonts* alsa-lib libXScrnSaver libtiff-devel \ libjpeg-devel kernel kernel-devel git xz xz-devel mesa-dri-drivers \ alsa-lib.i686 fontconfig.i686 freetype.i686 glibc.i686 libgcc.i686 \ libICE.i686 libSM.i686 libstdc++.i686 libX11.i686 libXau.i686 libxcb.i686 \ libXcursor.i686 libXext.i686 libXfixes.i686 libXi.i686 libXinerama.i686 \ libXrandr.i686 libXrender.i686 libXScrnSaver.i686 libXv.i686
On Rackspace Cloud, you need to additionally install:
yum install libSM libXi libXrender libXrandr libXfixes libXcursor libXinerama freetype fontconfig
On Amazon AWS, Amazon Linux AMI you cannot get libXScrnSaver.i686, so download and install it:
wget http://ftp.scientificlinux.org/linux/scientific/6.0/i386/os/Packages/libXScrnSaver-1.2.0-1.el6.i686.rpm rpm -i libXScrnSaver-1.2.0-1.el6.i686.rpm
On Amazon AWS, RHEL6.1 AMI does not give you Xvfb. Do this:
yum install xorg-x11-server-Xorg wget http://ftp.scientificlinux.org/linux/scientific/6.0/x86_64/os/Packages/xorg-x11-server-Xvfb-1.7.7-26.el6.x86_64.rpm rpm -iUvh xorg-x11-server-Xvfb-1.7.7-26.el6.x86_64.rpm
Загрузку mod_skypopen каждый делает по своему… Ну соль в том, что сначала нужно запустить скайпы и лишь потом загружать freeswitch mod_skypopen.
1 вариант загрузки : запустить freeswitch -nc, запустить скайпы и сделать что-то типа «fs_cli ‘load mod_skypopen’»;
2 вариант загрузки : записать строку «<load module=»mod_skypopen»/>» в файл /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
Установка и настройка скайпа:
1 вариант загрузки : запустить freeswitch -nc, запустить скайпы и сделать что-то типа «fs_cli ‘load mod_skypopen’»;
2 вариант загрузки : записать строку «<load module=»mod_skypopen»/>» в файл /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
Установка и настройка скайпа:
1
2
| dpkg -i getskype-linux-deb-32 |
С последней версией часто вылетает, рекомендуется версия 2.0.0.72, скачать можно отсюда: http://www.ad-host.ru/skype-debian_2.0.0.72-1_i386.deb
Разрешаем зависимости:
1
| apt-get install -f |
Добавляем пользователя skype и даем ему права на свой каталог:
1
2
3
| adduser --home /home/skype --ingroup audio --disabled-password skype mkdir -p /home/skype/multi/ chown -R skype.audio /home/skype/multi |
Загрузка модуля ядра:
1
2
3
| modprobe snd_dummy rmmod snd_dummy echo "snd_dummy" >> /etc/modules |
Приступаем к настройке скайпов:
1
| /usr/bin/Xvfb :101 -ac & |
1
2
| su skype -c "/bin/echo 'SkypeUSERName SkypePASSWORD'| DISPLAY=:101 /usr/bin/skype --dbpath=/home/skype/multi/interface01 --pipelogin &" x11vnc -display :101 |
Далее подключимся с другой машины, через vncviewer по локальному ip адресу, дождемся регистрации в skype
Редактируем конфиг по пути /home/skype/multi/interface01/SkypeUSERName/config.xml
Ищем секцию и описываем секцию , дабы skypopen мог управлять скайпом через АРІ: если такой секции нет, ее нужно создать:
1
| nano /home/skype/multi/interface01/SkypeUSERName/config.xml |
1
2
3
4
5
6
| <UI> <API> <Authorizations>skypopen</Authorizations> <BlockedPrograms></BlockedPrograms> </API> </UI> |
Клонируем для нужного количества каналов
1
2
| cd /home/skype/multi for i in $(seq 2 N); do i=$(printf "%02d" $i); cp -a interface01 interface$i; done |
где N — нужное количество Skype-каналов.
Создаем скрипт для запуска скайпа (взято с хабра (с)):
1
| nano /usr/local/bin/sk |
Вставляем свое:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| #!/bin/sh SKYPE_SYSTEM_USER=skype SKYPE_HOME=/home/skype/multi SKYPE_USER=skype_user SKYPE_PASSWORD=skype_secret SKYPE_INSTANCES=N XVFB=/usr/bin/Xvfb module_reload() { rmmod snd-dummy modprobe snd-dummy } skype_start() { for i in $(seq 1 $SKYPE_INSTANCES); do i=`printf "%02d" $i` $XVFB :1$i -ac >> /dev/null 2>&1 & sleep 3 su $SKYPE_SYSTEM_USER -c "/bin/echo '$SKYPE_USER $SKYPE_PASSWORD'| DISPLAY=:1$i /usr/bin/skype \ --dbpath=$SKYPE_HOME/interface$i --pipelogin >> /dev/null 2>&1 &" echo "Skype $i started" done } skype_stop() { kill -TERM `ps -u $SKYPE_SYSTEM_USER -o pid=` >> /dev/null 2>&1 sleep 3 kill -TERM `ps -C Xvfb -o pid=` >> /dev/null 2>&1 } case "$1" in start) module_reload sleep 3 skype_start ;; stop) skype_stop ;; restart) skype_stop sleep 3 skype_start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac |
сделать этот скрипт исполняемым:
1
| chmod +x /usr/local/bin/sk |
Редактируем конфиг mod_skypopen для нужного количества каналов:
1
| nano /usr/local/freeswitch/conf/autoload_configs/skypopen.conf.xml |
Ниже привожу кусочек своего конфига как пример:
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
27
28
| <configuration name="skypopen.conf" description="Skypopen Configuration"> <global_settings> <param name="dialplan" value="XML"/> <param name="context" value="default"/> <param name="destination" value="7777"/> <param name="skype_user" value="skype_user"/> <param name="report_incoming_chatmessages" value="true"/> <param name="silent_mode" value="false"/> <param name="write_silence_when_idle" value="true"/> <param name="setsockopt" value="true"/> </global_settings> <!-- one entry here per each skypopen interface --> <!-- ниже приводится пример на 4 канала --> <per_interface_settings> <interface id="1" name="interface1"> <param name="X11-display" value=":101"/> </interface> <interface id="2" name="interface2"> <param name="X11-display" value=":102"/> </interface> <interface id="3" name="interface3"> <param name="X11-display" value=":103"/> </interface> <interface id="4" name="interface4"> <param name="X11-display" value=":104"/> </interface> </per_interface_settings> </configuration> |
Здесь
7777 — экстеншн, на который будет маршрутизироваться входящий Skype-вызов;
:101 — дисплей X-сервера (для второго канала это будет :102 и так далее)
skype_user — имя Skype-акаунта
скопируем freeswitch в ../bin/ для запуска
7777 — экстеншн, на который будет маршрутизироваться входящий Skype-вызов;
:101 — дисплей X-сервера (для второго канала это будет :102 и так далее)
skype_user — имя Skype-акаунта
скопируем freeswitch в ../bin/ для запуска
1
| cp /usr/local/freeswitch/bin/freeswitch /usr/local/bin/ |
Запускаем скрипт sk, FreeSwitch и пробуем загрузить mod_skypopen:
1
2
3
| sk start freeswitch freeswitch@internal> load mod_skypopen |
Если все хорошо, то выполнив команду sk list, можно увидеть список skypopen-интерфейсов.
Добавляем mod_skypopen в список модулей, загружающихся во время старта FreeSwitch. Для этого в файле /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml нужно раскоментировать строчку
1
| <load module="mod_skypopen"/> |
Важным моментом является то, что skype-клиенты должны запускаться до загрузки модуля mod_skypopen, т.е. перед стартом FreeSwitch. Также, остановка уже задействованных mod_skypopen копий Skype приведет к падению FreeSwitch.
Как Вы, вероятно, помните входящие Skype-вызовы будут маршрутизироваться на экстеншн 7777, который еще надо создать. Для этого в директории /usr/local/freeswitch/conf/dialplan/default создаем файл 02_skype.xml следующего содержания:
1
2
3
4
5
6
7
8
9
10
11
12
| <include> <extension name="skype_incoming"> <condition field="destination_number" expression="^7777$"> <action application="set" data="skype_add_outband_dtmf_also_when_bridged=true"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="effective_caller_id_name=${caller_id_name} (${caller_id_number})"/> <action application="set" data="effective_caller_id_number=${caller_id_number}"/> <action application="bridge" data="sofia/gateway/asterisk/5555"/> <action application="hangup"/> </condition> </extension> </include> |
где
asterisk — название шлюза, на который будет уходить вызов (АТС на базе Asterisk)
5555 — экстеншн на этом шлюзе (для тестирования лучше всего просто поставить там Music On Hold)
asterisk — название шлюза, на который будет уходить вызов (АТС на базе Asterisk)
5555 — экстеншн на этом шлюзе (для тестирования лучше всего просто поставить там Music On Hold)
Осталось настроить…
SIP-транк между FreeSwitch и Asterisk
На сервере c FreeSwitch в директории /usr/local/freeswitch/conf/sip_profiles/external создаем файл asterisk.xml следующего содержания:
1
2
3
4
5
6
7
8
| <include> <gateway name="asterisk"> <param name="username" value="freeswitch"/> <param name="realm" value="asterisk.example.tld"/> <param name="password" value="supersecret"/> <param name="register" value="false"/> </gateway> </include> |
где
asterisk — имя шлюза (должно совпадать с указанным в предыдущем шаге);
asterisk.example.tld — имя хоста с Asterisk;
freeswitch — имя пользователя для доступа к шлюзу;
supersecret — пароль.
asterisk — имя шлюза (должно совпадать с указанным в предыдущем шаге);
asterisk.example.tld — имя хоста с Asterisk;
freeswitch — имя пользователя для доступа к шлюзу;
supersecret — пароль.
На сервере с Asterisk добавляем в sip.conf следующее:
[freeswitch]
dtmfmode=info
type=peer
host=1.1.1.1
username=freeswitch
port=5080
fromdomain=1.1.1.1
secret=supersecret
где
1.1.1.1 — адрес сервера с FreeSwitch
freeswitch, supersecret — см. предыдущий шаг
Не забываем также указать контекст, для корректной маршрутизации вызова.
Осталось перечитать sip.conf:
1.1.1.1 — адрес сервера с FreeSwitch
freeswitch, supersecret — см. предыдущий шаг
Не забываем также указать контекст, для корректной маршрутизации вызова.
Осталось перечитать sip.conf:
rasterisk -x ‘sip reload’
Теперь при поступлении звонка на skype_user FreeSwitch будет соединять его с экстеншеном 5555 на хосте с Asterisk.
Комментарии
Отправить комментарий