Freeswitch 1.9 (continuación): mod fs_curl, usuarios almacenados en BBDD

Pues ya volvemos a estar aquí un mes después… hehe, si, tuve freeswitch aparcado unos días, pero han sido días muy provechosos! ya iré contando :)

Pues éste post sería la continuación de éste otro que publiqué hace un mes.

En el anterior manual instalábamos freeswitch con soporte de postgresql y veíamos como con la base de datos creada pero vacía, al arrancar creaba las tablas necesarias para trabajar. Pero las tablas que estaban no te permitían gestionar los usuarios de la centralita directamente desde la base de datos y estabas obligado a usar los ficheros de configuración y recargar la configuración. Pues en éste manual llegaremos a éste objetivo, para poder atacar desde otro programa a la base de datos y realizar cambios en caliente!

Vamos a ello pues… lo primero será parar freeswitch y borrar la base de datos y volver a crearla para que quede vacía.

root@freeswitch-capa8:~# /etc/init.d/freeswitch.sh stop
root@freeswitch-capa8:~# su - postgres
postgres@freeswitch-capa8:~$ dropdb freeswitch_db
postgres@freeswitch-capa8:~$ createdb -O freeswitch_user freeswitch_db
postgres@freeswitch-capa8:~$ psql 
psql (9.6.7)
Type "help" for help.

postgres=# \dt
No relations found.

Ahora partimos de un entorno limpio. Seguimos pues con fs_curl.

fs_curl es un módulo desarrollado por un usuario externo a freeswitch, es de los módulos llamados contrib, pero éste está en el repositorio de git de donde clonamos la rama que estamos usando.

Crearemos pues en el directorio donde nos descargaremos todos los proyectos contrib que es interesante mantener por si de cara al futuro necesitamos algún proyecto mas (que ya he visto que si, uno mismo de fs_cli que el modo batch parece funcionar). Iremos pues al directorio de sources.

root@freeswitch-capa8:/usr/src/freeswitch# mkdir contrib
root@freeswitch-capa8:/usr/src/freeswitch# cd contrib
root@freeswitch-capa8:/usr/src/freeswitch# git clone https://freeswitch.org/stash/scm/fs/freeswitch-contrib.git
root@freeswitch-capa8:/usr/src/freeswitch/contrib# cd freeswitch-contrib/intralanman/PHP/

Ahora compiamos el directorio fs_curl a /var/www/html/

# cp -R fs_curl /var/www/html/

Ahora instalamos algunas dependencias que vamos a necesitar

root@freeswitch-capa8:~# apt-get install curl php-xml libapache2-mod-php php-pear php7.0-pgsql

Y a configurar freeswitch para habilitar el modulo xml_curl que necesitamos para haya comunicación con el módulo y freeswitch por HTTP. Descomentamos la línea y la definimos así:

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

Y ahora empezamos con las montañas rusas, para resumir tendremos que hacer varias cosas ahora:
– generar el fichero mod_xml_curl.so
– descargar la librería libssl.so.1.0.0 (no sirven otras)
– arreglar la base de datos
– arreglar 3 líneas del programa php del módulo fs_curl

# Generar el fichero mod_xml_curl.so

Moveremos/Copiaremos el directorio freeswitch-contrib en el directorio que nos ha creado la instalación de freeswitch y generaremos la librería mod_xml_curl.so

root@freeswitch-capa8:/usr/src/freeswitch# cd ../freeswitch.git/
root@freeswitch-capa8:/usr/src/freeswitch.git# cp -R ../freeswitch/contrib/freeswitch-contrib .
root@freeswitch-capa8:/usr/src/freeswitch.git# make mod_xml_curl-install

Ahora la copiamos en el directorio de módulos de nuestra instalación de freeswitch.

root@freeswitch-capa8:/usr/src/freeswitch.git# cp rc/mod/xml_int/mod_xml_curl/.libs/mod_xml_curl.so /usr/local/freeswitch/mod/

Si no se crea el fichero mod_xml_curl.so, podemos usar el del paquete de freeswitch, que aunque no podamos usar los paquetes por incompatibilidad con las signaturas, si podemos abrir los .deb en local con el gestor de archivos, extraer el fichero que nos interesa y subirlo al servidor.

root@freeswitch-capa8:~# wget -c http://files.freeswitch.org/repo/deb/debian-unstable/pool/main/f/freeswitch/freeswitch-mod-xml-curl_1.9.0~1832~25e9376-1~jessie+1_amd64.deb

Ahora descargaremos la librería libssl.so.1.0.0 de los paquetes de debian, extraemos el fichero libssl.so.1.0.0 y lo guardamos en /usr/lib/x86_64-linux-gnu/

Ésto daba el siguiente error

2018-07-02 21:35:09.064446 [CRIT] switch_loadable_module.c:1522 Error Loading module /usr/local/freeswitch/mod/mod_xml_curl.so
**libcrypto.so.1.0.0: cannot open shared object file: No such file or directory**

Para solucionarlo:

root@freeswitch-capa8:~# wget -c https://packages.debian.org/wheezy/amd64/libssl1.0.0/download
[...]
root@freeswitch-capa8:~# mv libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu

Ahora modificamos los dos ficheros de PHP

root@freeswitch-capa8:~# cd /var/www/html/fs_curl/
root@freeswitch-capa8:/var/www/html/fs_curl# vi index.php +13
//define('START_TIME', preg_replace('^0\.([0-9]+) ([0-9]+)$', '\2.\1', microtime()));
define('START_TIME', preg_replace('/^0\.(\d+) (\d+)$/', '\2.\1', microtime()));

root@freeswitch-capa8:/var/www/html/fs_curl# vi index.php +225
$this->comment( sprintf( "Estimated Execution Time Is: %s"
                                , ( preg_replace(
                                            '/^0\.(\d+) (\d+)$/', '\2.\1', microtime() ) - START_TIME )
                                        ) );

En éste último fichero tenemos que cambiar el ereg_replace por preg_replace, ya que en PHP7 ereg_replace está deprecated. También tendremos que dejar la línea siguiente tal cual aparece aquí

Ahora lo siguiente será cargar los esquemas de la base de datos y para ello, en el módulo fs_curl viene un esquema que nos va de perlas para crear las tablas, vistas y todo. Recuerdo y recomiendo que éste paso es bueno hacerlo con la base de datos vacía!

root@freeswitch-capa8:~# su - postgres
postgres@freeswitch-capa8:~$ psql freeswitch_db < /var/www/html/fs_curl/sql/postgres.sql 

Ahora veremos que nos ha creado 73 tablas, pero los permisos con incorrectos, los ha asignado al usuario postgres. Esto tenemos que arreglarlo, ya que puede causar el error de no poder escribir en la base de datos y no nos sacará ningún error.

Os lo dejo fácil... copia-pega.

freeswitch_db=# \dt
ALTER TABLE accounts                     OWNER TO freeswitch_user;
ALTER TABLE acl_lists                    OWNER TO freeswitch_user;
ALTER TABLE acl_nodes                    OWNER TO freeswitch_user;
ALTER TABLE carrier_gateway              OWNER TO freeswitch_user;
ALTER TABLE carriers                     OWNER TO freeswitch_user;
ALTER TABLE cdr                          OWNER TO freeswitch_user;
ALTER TABLE conference_advertise         OWNER TO freeswitch_user;
ALTER TABLE conference_controls          OWNER TO freeswitch_user;
ALTER TABLE conference_profiles          OWNER TO freeswitch_user;
ALTER TABLE dialplan                     OWNER TO freeswitch_user;
ALTER TABLE dialplan_actions             OWNER TO freeswitch_user;
ALTER TABLE dialplan_condition           OWNER TO freeswitch_user;
ALTER TABLE dialplan_context             OWNER TO freeswitch_user;
ALTER TABLE dialplan_extension           OWNER TO freeswitch_user;
ALTER TABLE dialplan_special             OWNER TO freeswitch_user;
ALTER TABLE dingaling_profile_params     OWNER TO freeswitch_user;
ALTER TABLE dingaling_profiles           OWNER TO freeswitch_user;
ALTER TABLE dingaling_settings           OWNER TO freeswitch_user;
ALTER TABLE directory                    OWNER TO freeswitch_user;
ALTER TABLE directory_domains            OWNER TO freeswitch_user;
ALTER TABLE directory_gateway_params     OWNER TO freeswitch_user;
ALTER TABLE directory_gateways           OWNER TO freeswitch_user;
ALTER TABLE directory_global_params      OWNER TO freeswitch_user;
ALTER TABLE directory_global_vars        OWNER TO freeswitch_user;
ALTER TABLE directory_group_user_map     OWNER TO freeswitch_user;
ALTER TABLE directory_groups             OWNER TO freeswitch_user;
ALTER TABLE directory_params             OWNER TO freeswitch_user;
ALTER TABLE directory_vars               OWNER TO freeswitch_user;
ALTER TABLE easyroute_conf               OWNER TO freeswitch_user;
ALTER TABLE easyroute_data               OWNER TO freeswitch_user;
ALTER TABLE iax_conf                     OWNER TO freeswitch_user;
ALTER TABLE iax_settings                 OWNER TO freeswitch_user;
ALTER TABLE ivr_conf                     OWNER TO freeswitch_user;
ALTER TABLE ivr_entries                  OWNER TO freeswitch_user;
ALTER TABLE lcr                          OWNER TO freeswitch_user;
ALTER TABLE lcr_conf                     OWNER TO freeswitch_user;
ALTER TABLE lcr_profiles                 OWNER TO freeswitch_user;
ALTER TABLE lcr_settings                 OWNER TO freeswitch_user;
ALTER TABLE limit_conf                   OWNER TO freeswitch_user;
ALTER TABLE limit_data                   OWNER TO freeswitch_user;
ALTER TABLE local_stream_conf            OWNER TO freeswitch_user;
ALTER TABLE modless_conf                 OWNER TO freeswitch_user;
ALTER TABLE npa_nxx_company_ocn          OWNER TO freeswitch_user;
ALTER TABLE post_load_modules_conf       OWNER TO freeswitch_user;
ALTER TABLE rss_conf                     OWNER TO freeswitch_user;
ALTER TABLE sip_authentication           OWNER TO freeswitch_user;
ALTER TABLE sip_dialogs                  OWNER TO freeswitch_user;
ALTER TABLE sip_presence                 OWNER TO freeswitch_user;
ALTER TABLE sip_registrations            OWNER TO freeswitch_user;
ALTER TABLE sip_shared_appearance_dialogs   OWNER TO freeswitch_user;
ALTER TABLE sip_shared_appearance_subscriptions OWNER TO freeswitch_user;
ALTER TABLE sip_subscriptions            OWNER TO freeswitch_user;
ALTER TABLE sofia_aliases                OWNER TO freeswitch_user;
ALTER TABLE sofia_conf                   OWNER TO freeswitch_user;
ALTER TABLE sofia_domains                OWNER TO freeswitch_user;
ALTER TABLE sofia_gateways               OWNER TO freeswitch_user;
ALTER TABLE sofia_settings               OWNER TO freeswitch_user;
ALTER TABLE voicemail_conf               OWNER TO freeswitch_user;
ALTER TABLE voicemail_email              OWNER TO freeswitch_user;
ALTER TABLE voicemail_msgs               OWNER TO freeswitch_user;
ALTER TABLE voicemail_prefs              OWNER TO freeswitch_user;
ALTER TABLE voicemail_settings           OWNER TO freeswitch_user;

Ahora actualizamos algunos campos de la base de datos de ejemplo que nos ha cargado. Muestro las tablas que tenemos que tener en cuenta para hacer funcionar el registro de usuarios:

freeswitch_db=# select * from lcr_conf;
 id | param_name |                                          param_value                                           
----+------------+------------------------------------------------------------------------------------------------
  1 | odbc-dsn   | pgsql://hostaddr=127.0.0.1 dbname=freeswitch_db user=freeswitch_user password=XXX
(1 row)


freeswitch_db=# select * from directory;
 id | username | domain_id | cache  
----+----------+-----------+--------
  1 | 1010     |         1 | 300000
  2 | 1011     |         1 | 300000
  3 | 20000    |         4 |      0
  4 | 20001    |         4 |      0
(4 rows)

freeswitch_db=# select * from directory_domains;
 id |    domain_name     
----+--------------------
  4 | 10.XXX
  1 | crustaci.capa8.cat
(2 rows)

freeswitch_db=# select * from directory_params;
 id | directory_id | param_name | param_value 
----+--------------+------------+-------------
  1 |            3 | password   | XXX
  2 |            4 | password   | XXX
(2 rows)

Y ahora ya estamos listos para arrancar freeswitch con soporte de base de datos!

root@freeswitch-capa8:/usr/local/freeswitch/bin# ./fs_cli
freeswitch@freeswitch-capa8> list_users 
userid|context|domain|group|contact|callgroup|effective_caller_id_name|effective_caller_id_number
20000||10.XXX|default|error/user_not_registered|||
20001||10.XXX|default|error/user_not_registered|||
1010||crustaci.capa8.cat|default|error/user_not_registered|||
1011||crustaci.capa8.cat|default|error/user_not_registered|||

+OK

Para llegar aquí he usado éste manual que cuenta como hacerlo sobre mysql.

Probé ésta mañana de configurar el freeswitch sobre odbc, pude llegar a hacer funcionar el conector odbc sobre mariadb usando la libreria de la versión 2.0.17 y sacarle la línea de setup, poder sólo la de driver en /etc/odbcinst.ini.

Deixa un comentari

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

Aquest lloc utilitza Akismet per reduir el correu brossa. Aprendre com la informació del vostre comentari és processada