Freeswitch 1.9 (master) en debian 8 (y debian 9) con soporte postgresql

Venga, éste post espero que si sea el definitivo, voy a probar que tal con debian 9 mas tarde y si conviene hago otro post.

ACTUALIZACIÓN
Éste manual también es válido para debian 9! :) mirad al final del artículo las anotaciones

Empezamos con una debian 8 recién instalada.

Vamos a instalar primero de todo todas las dependencias necesarias

root@freeswitch-capa8:~# apt-get install git libpq-dev postgresql postgresql-client build-essential dialog autoconf libtool-bin yasm
root@freeswitch-capa8:~# apt-get install zlib1g-dev libjpeg-dev pkg-config libsqlite3-dev libcurl4-gnutls-dev libpcre3-dev libogg-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libtiff5-dev libopus-dev libsndfile-dev liblua5.2-dev

Las primeras dependencias son las que necesitamos para preparar la instalación de freeswitch, las segundas las librerías que pide al momento de hacer el “./configure –enable-core-pgsql-support”.

Primero de todo crearemos una base de datos en el postgresql sobre la que queremos que freeswitch trabaje.

root@freeswitch19-capa8:~# su - postgres
postgres@freeswitch19-capa8:~$ createuser freeswitch_user
postgres@freeswitch19-capa8:~$ createdb -O freeswitch_user freeswitch_db
postgres@freeswitch19-capa8:~$ psql freeswitch_db
freeswitch_db=# ALTER USER freeswitch_user WITH PASSWORD 'XXX';
freeswitch_db=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO freeswitch_user;
freeswitch_db=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO freeswitch_user;

Ahora descargamos freeswitch del repositorio git en /usr/src/

root@freeswitch19-capa8:/usr/src# git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
Cloning into 'freeswitch'...
remote: Counting objects: 307888, done.
remote: Compressing objects: 100% (67730/67730), done.
remote: Total 307888 (delta 239698), reused 298098 (delta 232095)
Receiving objects: 100% (307888/307888), 148.13 MiB | 9.94 MiB/s, done.
Resolving deltas: 100% (239698/239698), done.
Checking connectivity... done.

Ahora iremos al directorio /usr/src/freeswitch/scripts y ejecutaremos el script FreeSWITCH-debian-raspbian-installer.sh

root@freeswitch19-capa8:/usr/src# cd /usr/src/freeswitch/scripts/
root@freeswitch19-capa8:/usr/src/freeswitch/scripts# ./FreeSWITCH-debian-raspbian-installer.sh

Éste script nos hará algunas preguntas a las que tendremos que responder.

La primera es si queremos instalar freeswitch 1.6 o freeswitch 1.7, que en realidad es freeswitch 1.9 porque se descarga de nuevo el código de la rama master de freeswitch en el directorio /usr/src/freeswitch.git/.

Ahora le indicaremos el FQDN, la IP y el mail del robot que mandará e-mails de notificaciones.

Ahora empezará a trabajar él solo un buen rato.

Al final tiene que salirte algo similar a ésto

Done, without errors.


Execution Time (2018-05-26 01:20:40 UTC+2)
loading tasks     300ms  ▇▇▇ 2%
wiredep:app       174ms  ▇▇ 1%
concurrent:dist    3.4s  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 23%
cssmin:generated  996ms  ▇▇▇▇▇▇▇▇ 7%
ngAnnotate:dist    1.6s  ▇▇▇▇▇▇▇▇▇▇▇▇ 10%
uglify:generated   7.6s  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 51%
Total 15s

Éste script ha instalado todas las dependencias necesarias para hacer funcionar todos los módulos y compilar así freeswitch. El script también instala freeswitch, pero la instalación resultante no tiene el conector con postgresql compilado y tendremos que especificarselo expresamente, luego make y finalmente make install.

root@freeswitch19-capa8:/usr/src/freeswitch/scripts# cd /usr/src/freeswitch.git/
root@freeswitch19-capa8:/usr/src/freeswitch.git# ./configure --enable-core-pgsql-support
root@freeswitch19-capa8:/usr/src/freeswitch.git# make
root@freeswitch19-capa8:/usr/src/freeswitch.git# make install

Si en el proceso dice que le falta alguna dependencia (sobretodo al hacer el make), se resuelve y se vuelve a iniciar todo el proceso desde el “./configure –enable-core-pgsql-support”.

Si todo va bien seguimos! ahora tenemos la última versión de la rama master de freeswitch instalada y con soporte de postgresql.

Copiamos el fichero /freeswitch.sh en /etc/init.d/

root@freeswitch19-capa8:/usr/src/freeswitch.git# cp scripts/freeswitch.sh /etc/init.d/

Una vez instalado, tendremos que indicarle los datos de acceso a la base de datos a freeswitch. Para ello nos posicionaremos en el directorio /usr/local/freeswitch/conf/ y editaremos los siguientes ficheros:

Grupo 1

root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/switch.conf.xml

Grupo 2

root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/directory.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/voicemail.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/cidlookup.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/db.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/lcr.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/callcenter.conf.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi jingle_profiles/server.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi sip_profiles/internal.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi sip_profiles/internal-ipv6.xml
root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi skinny_profiles/internal.xml

Grupo 3

root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi autoload_configs/easyroute.conf.xml

En cada uno de ellos deberemos buscar alguna referencia a la configuración de la db (buscas odbc-dsn y en la línea siguiente pegas el código que ahora mostraré). Cada grupo de los que he indicado arriba, el formato de la línea de configuración cambia un poco, así que por cada grupo de ficheros indicaré la línea que se tiene que añadir. Al grupo 3 se tienen que añadir/modificar varias líneas.
Revisad que no haya dos líneas haciendo referencia a la misma configuración, usad para comentar (mejor que borrar) la línea ante las dudas.

- Grupo 1: 
<*param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch_db user=freeswitch_user password='XXX' options='-c client_min_messages=NOTICE'" />

- Grupo 2: 
<*param name="odbc-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch_db user=freeswitch_user password='XXX' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />

- Grupo 3:
<*param name="db-username" value="freeswitch_user"/>
<*param name="db-password" value="XXX"/>
<*param name="db-dsn" value="freeswitch"/>
<*param name="db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch_db user=freeswitch_user password='XXX' options='-c client_min_messages=NOTICE' application_name='freeswitch'" />
/!\ borrar el * /!\

Ahora lo siguiente serà comprobar que freeswitch está parado y que no hay tablas en la base de datos que hemos creado de postgresql. Para verificar que el usuario que hemos configurado a freeswitch en lugar del usuario “root” de postgresql, el usuario postgres, vamos a usar el que hemos creado al principio del artículo al crear la base de datos.

root@freeswitch19-capa8:~# ps aux |grep freeswitch
root@freeswitch19-capa8:~# su - postgres
postgres@freeswitch19-capa8:~$ psql -U freeswitch_user -d freeswitch_db --password
Password for user freeswitch_user: 
psql (9.4.15)
Type "help" for help.

freeswitch_db=> \dt
No relations found.

Si no podemos conectar con éste usuario, deberemos revisar la configuración del fichero pg_hba.conf (comentamos las líneas con # y añadimos la última debajo de la primera línia que comento) y reiniciamos postgresql.

root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi /etc/postgresql/9.4/main/pg_hba.conf
#local   all             postgres                                peer
#local   all             all                                     peer
local    all             all                                     trust
root@freeswitch19-capa8:/usr/local/freeswitch/conf# /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
root@freeswitch19-capa8:/usr/local/freeswitch/conf# su - postgres
postgres@freeswitch19-capa8:~$ psql -U freeswitch_user -d freeswitch_db --password
Password for user freeswitch_user: 
psql (9.4.15)
Type "help" for help.

freeswitch_db=> \dt
No relations found.

Ahora vamos a arrancar freeswitch y para comprobar que la conexión es correcta, mostraremos de nuevo las tablas de la base de datos y veremos que habrá creado todas las tablas!

root@freeswitch19-capa8:~# /etc/init.d/freeswitch.sh start
22613 Backgrounding.
freeswitch_db=> \dt

                           List of relations
 Schema |                Name                 | Type  |      Owner      
--------+-------------------------------------+-------+-----------------
 public | aliases                             | table | freeswitch_user
 public | calls                               | table | freeswitch_user
 public | channels                            | table | freeswitch_user
 public | complete                            | table | freeswitch_user
 public | db_data                             | table | freeswitch_user
 public | group_data                          | table | freeswitch_user
 public | interfaces                          | table | freeswitch_user
 public | limit_data                          | table | freeswitch_user
 public | nat                                 | table | freeswitch_user
 public | recovery                            | table | freeswitch_user
 public | registrations                       | table | freeswitch_user
 public | sip_authentication                  | table | freeswitch_user
 public | sip_dialogs                         | table | freeswitch_user
 public | sip_presence                        | table | freeswitch_user
 public | sip_registrations                   | table | freeswitch_user
 public | sip_shared_appearance_dialogs       | table | freeswitch_user
 public | sip_shared_appearance_subscriptions | table | freeswitch_user
 public | sip_subscriptions                   | table | freeswitch_user
 public | tasks                               | table | freeswitch_user
 public | voicemail_msgs                      | table | freeswitch_user
 public | voicemail_prefs                     | table | freeswitch_user
(21 rows)

(END)

Y si queremos ver los logs vamos a /usr/local/freeswitch/log/freeswitch.log

root@freeswitch19-capa8:~# less /usr/local/freeswitch/log/freeswitch.log 

Si en cualquier momento tenemos algun problema, podemos subir el nivel de debug del fichero de log en el fichero vars.xml del directorio de configuración de freeswitch.

root@freeswitch19-capa8:/usr/local/freeswitch/conf# vi vars.xml
<*X-PRE-PROCESS cmd="set" data="console_loglevel=debug"/>
/!\ borrar el * /!\

cambiamos el info por debug. Paramos freeswitch y lo volvemos a arrancar

root@freeswitch19-capa8:/usr/local/freeswitch/conf# /etc/init.d/freeswitch.sh stop
Killing: 22613
root@freeswitch19-capa8:/usr/local/freeswitch/conf# /etc/init.d/freeswitch.sh start
22719 Backgrounding.

Finalmente nos tendrá que haber creado las siguientes tablas

freeswitch_db=# \dt

                           List of relations
 Schema |                Name                 | Type  |      Owner      
--------+-------------------------------------+-------+-----------------
 public | aliases                             | table | freeswitch_user
 public | calls                               | table | freeswitch_user
 public | channels                            | table | freeswitch_user
 public | complete                            | table | freeswitch_user
 public | db_data                             | table | freeswitch_user
 public | group_data                          | table | freeswitch_user
 public | interfaces                          | table | freeswitch_user
 public | limit_data                          | table | freeswitch_user
 public | nat                                 | table | freeswitch_user
 public | recovery                            | table | freeswitch_user
 public | registrations                       | table | freeswitch_user
 public | sip_authentication                  | table | freeswitch_user
 public | sip_dialogs                         | table | freeswitch_user
 public | sip_presence                        | table | freeswitch_user
 public | sip_registrations                   | table | freeswitch_user
 public | sip_shared_appearance_dialogs       | table | freeswitch_user
 public | sip_shared_appearance_subscriptions | table | freeswitch_user
 public | sip_subscriptions                   | table | freeswitch_user
 public | tasks                               | table | freeswitch_user
 public | voicemail_msgs                      | table | freeswitch_user
 public | voicemail_prefs                     | table | freeswitch_user
(21 rows)

(END)

Recomiendo realizar éste proceso de arrancar y parar el freeswitch 2 veces.

Ahora podremos entrar ya a la consola fs_cli

root@freeswitch19-capa8:/usr/local/freeswitch/log# cd /usr/local/freeswitch/bin/
root@freeswitch19-capa8:/usr/local/freeswitch/bin# ./fs_cli

Podemos añadir /usr/local/freeswitch/bin/ a las variables de entorno y no tendremos que ir cada vez al directorio para ejecutar el cli

root@freeswitch19-capa8:/usr/local/freeswitch/bin# export PATH=$PATH:/usr/local/freeswitch/bin
root@freeswitch19-capa8:/usr/local/freeswitch/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/freeswitch/bin
root@freeswitch19-capa8:~# fs_cli 
.=======================================================.
|            _____ ____     ____ _     ___              |
|           |  ___/ ___|   / ___| |   |_ _|             |
|           | |_  \___ \  | |   | |    | |              |
|           |  _|  ___) | | |___| |___ | |              |
|           |_|   |____/   \____|_____|___|             |
|                                                       |
.=======================================================.
| Anthony Minessale II, Ken Rice,                       |
| Michael Jerris, Travis Cross                          |
| FreeSWITCH (http://www.freeswitch.org)                |
| Paypal Donations Appreciated: paypal@freeswitch.org   |
| Brought to you by ClueCon http://www.cluecon.com/     |
.=======================================================.

.=======================================================================================================.
|    ____ _             ____                                                                            |
|   / ___| |_   _  ___ / ___|___  _ __                                                                  |
|  | |   | | | | |/ _ \ |   / _ \| '_ \                                                                 |
|  | |___| | |_| |  __/ |__| (_) | | | |                                                                |
|   \____|_|\__,_|\___|\____\___/|_| |_|                                                                |
|                                                                                                       |
|   _____    _            _                          ____             __                                |
|  |_   _|__| | ___ _ __ | |__   ___  _ __  _   _   / ___|___  _ __  / _| ___ _ __ ___ _ __   ___ ___   |
|    | |/ _ \ |/ _ \ '_ \| '_ \ / _ \| '_ \| | | | | |   / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \  |
|    | |  __/ |  __/ |_) | | | | (_) | | | | |_| | | |__| (_) | | | |  _|  __/ | |  __/ | | | (_|  __/  |
|    |_|\___|_|\___| .__/|_| |_|\___/|_| |_|\__, |  \____\___/|_| |_|_|  \___|_|  \___|_| |_|\___\___|  |
|                  |_|                      |___/                                                       |
|   _____                           _                         _                                         |
|  | ____|_   _____ _ __ _   _     / \  _   _  __ _ _   _ ___| |_                                       |
|  |  _| \ \ / / _ \ '__| | | |   / _ \| | | |/ _` | | | / __| __|                                      |
|  | |___ \ V /  __/ |  | |_| |  / ___ \ |_| | (_| | |_| \__ \ |_                                       |
|  |_____| \_/ \___|_|   \__, | /_/   \_\__,_|\__, |\__,_|___/\__|                                      |
|                        |___/                |___/                                                     |
|                                       ____ _             ____                                         |
|  __      ____      ____      __      / ___| |_   _  ___ / ___|___  _ __         ___ ___  _ __ ___     |
|  \ \ /\ / /\ \ /\ / /\ \ /\ / /     | |   | | | | |/ _ \ |   / _ \| '_ \       / __/ _ \| '_ ` _ \    |
|   \ V  V /  \ V  V /  \ V  V /   _  | |___| | |_| |  __/ |__| (_) | | | |  _  | (_| (_) | | | | | |   |
|    \_/\_/    \_/\_/    \_/\_/   (_)  \____|_|\__,_|\___|\____\___/|_| |_| (_)  \___\___/|_| |_| |_|   |
|                                                                                                       |
.=======================================================================================================.

Type /help  to see a list of commands




[This app Best viewed at 160x60 or more..]
+OK log level  [7]
freeswitch@freeswitch19-capa8>

ACTUALIZACIONES: PARA INSTALAR EN DEBIAN 9
Al instalar las dependencias cambia de nombre libsndfile-dev a libsndfile1-dev

libsndfile-dev -> libsndfile1-dev

Al ejecutar el script no encuentra el paquete npm que no está en debian 9, pero en debian sid si. Nos descargamos el fichero de los repositorios sid de debian y lo instalamos

root@freeswitch-capa8:/usr/src# wget -c http://ftp.us.debian.org/debian/pool/main/n/npm/npm_1.4.21+ds-2_all.deb
root@freeswitch-capa8:/usr/src# dpkg -i npm_1.4.21+ds-2_all.deb
root@freeswitch-capa8:/usr/src# apt-get -f install

Una vez arreglada la dependencia volvemos a ejecutar el script FreeSWITCH-debian-raspbian-installer.sh

ya cuando hacemos el configure activando el postgresql, nos pide una dependencia, así que antes de ejecutar el configure, instalamos ésta dependencia

root@freeswitch-capa8:/usr/src/freeswitch.git# apt-get install libldns-dev
root@freeswitch-capa8:/usr/src/freeswitch.git# ./configure --enable-core-pgsql-support
root@freeswitch-capa8:/usr/src/freeswitch.git# make
root@freeswitch-capa8:/usr/src/freeswitch.git# make install

Mas adelante cambia la ubicación del fichero hba.conf

root@freeswitch-capa8:/usr/local/freeswitch/conf# vi /etc/postgresql/9.6/main/pg_hba.conf

Han quedado algunas bases de datos creadas sobre sqlite3, así supongo que tendremos que añadir la línea de configuración en los ficheros correspondientes en confs

root@freeswitch-capa8:/usr/local/freeswitch/db# ls
fifo.db  json.db  sofia_reg_external.db  sofia_reg_external-ipv6.db
root@freeswitch-capa8:/usr/local/freeswitch/conf# vi autoload_configs/fifo.conf.xml
root@freeswitch-capa8:/usr/local/freeswitch/conf# vi autoload_configs/sofia.conf.xml

Recomiendo instalar también net-tools, para poder ver las conexiones y sockets y sngrep no es tampoco una mala herramienta ;)
[FIN ACTUALIZACIÓN]

Y aquí termina éste manual! :) Doy las gracias a los chicos de freeswitch-users que han tenido una gran paciencia conmigo y me han ayudado a identificar los problemas que tenía y a crear éste completo manual de instalación! mi pequeña aportación al proyecto! :D

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

This site uses Akismet to reduce spam. Learn how your comment data is processed.