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.