Instalación de FreeSWITCH 1.10.8 en Rocky Linux 8

A ver si se animan a inscribirse al curso de FreeSWITCH:

FreeSWITCH es un programa Open Source, distribuido bajo licencia MPL1.1, utilizado para implementar una central telefónica o, en general, un servidor B2BUA (Back To Back User Agent). Para una lista completa de las funcionalidades brindadas, pueden visitar la Wiki de los desarrolladores. Entre ellas:

• Registro (Log) de las llamadas

• Grabación de llamadas

• Desvío de llamadas

• Trasferencia de llamadas

• Conferencias audio y Videoconferencias

• Música en espera

• Soporte IPv6

• Creación de contestadoras automáticas: IVR

• Servidor y Gateway WebRTC con señalización SIP y Verto

• Multi Dominio y Multi usuario

• Least Cost Routing (LCR) para llamadas salientes

Este articulo abarca la instalación de FreeSWITCH 1.10 en un VPS (Servidor Virtual Privado) remoto y es valida para cualquier Servidor Rocky Linux/Almalinux 8. Con el VPS remoto la ventaja es tener el SWITCH siempre activo, independiente de la banda ancha disponible en la casa/oficina y evita tener una computadora dedicada y siempre encendida.

Utilidades, librerías, dependencias

La instalación de FreeSWITCH se realizará a partir de las fuentes para que puedan ver el proceso de instalación de dependencias y librerías que, en algunos casos, se instalarán también desde las fuentes. Claramente es posible instalar FreeSWITCH desde los repositorios disponibles pero es bueno que aprendan a manejar directamente las fuentes. Antes de la compilación de FreeSWITCH, se instalarán toda una serie de librerías y dependencias que permitirán obtener una instalación de casi todos los módulos más importantes de FS. Primero se activan los repositorios Power-Tools que permiten la instalación de algunos paquetes no presentes en los repositorios estándar de Rocky Linux:

dnf config-manager --set-enabled powertools

Se empieza con Vorbis que es una librería para la compresión/descompresión audio indispensable para la correcta compilación del modulo mod_shout:

dnf install libvorbis libvorbis-devel vorbis-tools libogg libogg-devel -y

junto a mpg123 y libshout:

dnf install mpg123-devel mpg123-libs libshout-devel -y

Para el formato audio GSM se instalan los relativos paquetes:

dnf install gsm gsm-devel -y

FFMPEG es una dependencia del modulo mod_av que permite utilizar el codec Video H264 en Verto, la señalización utilizada para WebRTC en FreeSWITCH, otra opción además de la señalización SIP:

dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm -y

dnf install ffmpeg ffmpeg-devel -y

se sigue con CURL que es un cliente que permite recibir y/o enviar archivos utilizando los protocolos HTTP, HTTPS, FTP, GOPHER, DICT, TELNET; utilizado por el modulo mod_xml_curl:

dnf install curl curl-devel libidn-devel -y

se instalan todas las librerías y dependencias que se necesitan para la compilación de las fuentes:

dnf install gcc ncurses-devel make gcc-c++ zlib-devel libtool bison-devel bison \

openssl-devel bzip2-devel wget newt-devel subversion flex gtk2-devel bzip2 patch \

libjpeg-devel yasm libsndfile-devel net-tools git perl-ExtUtils-Embed -y

En Rocky Linux 8, para la gestión de la base de datos, de manera predefinida ya no está presente MySQL sino MariaDB que se instala:

dnf install mariadb mariadb-server mariadb-devel -y

UNIXODBC que es la implementación Linux de las API ODBC que permiten conectarse a muchos sistemas de gestión de base de datos (ej: MySQL/MariaDB):

dnf install unixODBC unixODBC-devel mariadb-connector-odbc libtool-ltdl-devel -y

Como la base de datos interna de FreeSWITCH de manera predefinida se basa en SQLite, se instala el paquete del programa y el paquete de desarrollo:

dnf install sqlite sqlite-devel -y

PostgreSQL:

dnf install postgresql-devel postgresql-server -y

Se instala, desde las fuentes, FLITE, Festival Lite, que es un sistema de text to speech (texto a voz) utilizado por el modulo mod_flite de FS:

cd /usr/src

git clone https://github.com/festvox/flite.git

cd flite/

./configure --enable-shared --with-audio=none --prefix=/usr

make

make get_voices

make install

Libuuid y uiid utilizados para la identificación univoca de canales y hilos de procesos del SoftSWITCH:

dnf install libuuid libuuid-devel uuid uuid-devel -y

Se continua con la instalación de otros formatos audio: SPEEX WAW y LAME; este ultimo es también una dependencia para el modulo mod_shout:

dnf install speex speex-devel speexdsp-devel wavpack wavpack-devel lame-devel -y

Se continua con LIBMAD que es un MPEG audio decodificador de alta calidad:

cd /usr/src

wget https://campus.voztovoice.org/FreeSWITCH/libmad-0.15.1b.tar.gz

tar -xf libmad-0.15.1b.tar.gz

cd libmad-0.15.1b

./configure --prefix=/usr --libdir=/usr/lib64

Para que la compilación tenga éxito hay que modificar una linea del archivo Makefile:

nano +129 Makefile

CFLAGS = -Wall -g -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2

para que quede:

CFLAGS = -Wall -g -O -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2

se continua con su compilación e instalación:

make

make install

Para la instalación del modulo mod_opus relacionado con el Codec Audio Opus, hay que instalar el codec desde las fuentes siguiendo estos pasos:

wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz

tar -xf opus-1.3.1.tar.gz

cd opus-1.3.1

./configure --prefix=/usr --libdir=/usr/lib64

make

make install

Se termina esta primera parte con SoX que es un programa que permite la manipulación de archivos audio y la posibilidad de pasarlos de un formato a otro:

cd /usr/src

wget https://campus.voztovoice.org/FreeSWITCH/sox-14.4.2.tar.gz

tar -xf sox-14.4.2.tar.gz

cd sox-14.4.2

./configure --prefix=/usr --libdir=/usr/lib64

Al finalizar el configure aparecerá esta tabla donde se encontrarán todos los formatos audio que se podrán manipular con SoX:


Se termina con la compilación e instalación:

make && make install

Se continua con las librerías libtiff y SpanDSP, un procesador de señales digitales que en FreeSWITCH permite la instalación del modulo mod_spandsp para la recepción y envío de faxes:

dnf install libtiff libtiff-devel libxml2 libxml2-devel -y

dnf --enablerepo=okay install spandsp spandsp-apidoc spandsp-devel libks-devel -y

OpenLDAP es la versión open source del protocolo Lightweight Directory Access. Normalmente se utiliza para crear un directorio de usuarios que puede ser consultado y/o modificado desde remoto. Muchos programas implementan la posibilidad de conectarse a un servidor OpenLDAP y FreeSWITCH presenta esta posibilidad a través del modulo mod_ldap, aunque sea considerado un modulo obsoleto:

dnf install openldap openldap-clients openldap-devel openldap-servers -y

SNMP es el Protocolo Simple de Administración de Red y sirve para controlar y monitorear el desempeño del servidor Linux y de determinadas aplicaciones:

dnf install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils -y

Se continua la preparación del servidor con la instalación del lenguaje de programación LUA que es el más utilizado para escribir script y código para interactuar con FS:

dnf install lua lua-devel -y

Se instalan los paquetes para compilar el modulo mod_memcache utilizado como memoria de cache en algunos tipo de consultas a base de datos:

dnf install memcached memcached-devel libmemcached libmemcached-devel -y --skip-broken

Por ultimo la librería LIBSRTP que permite implementar el cifrado del flujo media en FreeSWITCH a través del protocolo SRTP (RFC3711) y la pila SIP utilizada por FS (SIP SOFIA):

dnf --enablerepo=okay install libsrtp libsrtp-devel sofia-sip* -y

y la librería Jansson para el soporte del modulo mod_verto utilizado como sistema de señalización para WebRTC:

dnf install jansson jansson-devel -y

Para terminar hay que instalar unas cuantas librerías que permitirán instalar unos módulos más y de esta forma obtener una instalación casi completa de FreeSWITCH y sus módulos:

dnf install portaudio portaudio-devel python2-devel perl-devel erlang ldns-devel libedit-devel -y

 

Instalación de FreeSWITCH

Terminada la preparación del servidor, se inicia con la instalación de FreeSWITCH; se descarga la ultima versión disponible de la rama 1.10:

cd /usr/src

git clone -b v1.10 https://github.com/signalwire/freeswitch.git

Se entra a la carpeta creada:

cd freeswitch

y se preparan las fuentes para la compilación:

./bootstrap.sh -j

Luego para que se compilen algunos módulos que por defecto no están activados, se abre el siguiente archivo:

nano modules.conf

se descomentan las lineas de los módulos que se quieren incluir en la compilación e instalación y se comenta la linea del modulo mod_signalwire ya que este modulo se utiliza solamente si se contratan servicios con la empresa SignalWire, creada por los desarrolladores FreeSWITCH. Se modifican las siguientes lineas:

#applications/mod_curl

#applications/mod_directory

#applications/mod_distributor

#applications/mod_easyroute

#applications/mod_lcr

#applications/mod_memcache

#applications/mod_nibblebill

applications/mod_signalwire

#applications/mod_translate

#applications/mod_vmd

#asr_tts/mod_flite

#codecs/mod_mp4v

#databases/mod_mariadb

#event_handlers/mod_odbc_cdr

#event_handlers/mod_snmp

#formats/mod_shout

#say/mod_say_es

#say/mod_say_es_ar

#xml_int/mod_xml_curl

para que queden:

applications/mod_curl

applications/mod_directory

applications/mod_distributor

applications/mod_easyroute

applications/mod_lcr

applications/mod_memcache

applications/mod_nibblebill

#applications/mod_signalwire

applications/mod_translate

applications/mod_vmd

asr_tts/mod_flite

codecs/mod_mp4v

databases/mod_mariadb

event_handlers/mod_odbc_cdr

event_handlers/mod_snmp

formats/mod_shout

say/mod_say_es

say/mod_say_es_ar

xml_int/mod_xml_curl

Se guardan los cambios y se continua con:

./configure -C --enable-portable-binary \

--prefix=/usr --localstatedir=/var --sysconfdir=/etc \

--with-gnu-ld --with-python=/usr/bin/python2 --with-erlang --with-openssl \

--enable-core-odbc-support --enable-zrtp \

--enable-core-pgsql-support \

--enable-static-v8 --disable-parallel-build-v8

con el comando anterior se indican las carpetas donde se instalarán respectivamente los archivos binarios, los LOG y los archivos de configuración; además se definen que módulos se van a soportar y como. Se continua con:

make

Si no aparecen errores, se continua con:

make install

Se instalan las locuciones en inglés y los audio para la música de espera (calidad CD):

make cd-sounds-install

make cd-moh-install

Las únicas locuciones en español disponibles son con acento mexicano. Son las que utilizaremos para el curso aunque no son completas. Para instalarlas tendremos que utilizar una pequeña artimaña. Primero se descargan los paquetes RPM desde los repositorios OKAY:

cd /

wget http://repo.okay.com.mx/centos/7/x86_64/release/freeswitch-sounds-es-mx-...

wget http://repo.okay.com.mx/centos/7/x86_64/release/freeswitch-sounds-es-mx-...

wget http://repo.okay.com.mx/centos/7/x86_64/release/freeswitch-sounds-es-mx-...

wget http://repo.okay.com.mx/centos/7/x86_64/release/freeswitch-sounds-es-mx-...

y se descomprimen con una utilidad pensada para los paquetes RPM:

rpm2cpio freeswitch-sounds-es-mx-maria-48000-1.0.16-1.el7.centos.noarch.rpm | cpio -ivd

rpm2cpio freeswitch-sounds-es-mx-maria-32000-1.0.16-1.el7.centos.noarch.rpm | cpio -ivd

rpm2cpio freeswitch-sounds-es-mx-maria-16000-1.0.16-1.el7.centos.noarch.rpm | cpio -ivd

rpm2cpio freeswitch-sounds-es-mx-maria-8000-1.0.16-1.el7.centos.noarch.rpm | cpio -ivd

Quedarán instaladas en la carpeta que contiene las demás locuciones audio.

Si en cualquier momento se quiere añadir un modulo a la instalación realizada, no hace falta volver a realizar la compilación e instalación desde cero sino seguir estos pasos:

cd /usr/src/freeswitch

nano modules.conf

descomentar el modulo que se quieres instalar. En este ejemplo veremos como instalar el modulo mod_callcenter utilizado para configurar las colas de espera en FS; se modifica esta linea:

#applications/mod_callcenter

para que quede:

applications/mod_callcenter

Se guardan los cambios y se ejecuta el siguiente comando:

make mod_callcenter-install

si el modulo requiere algunas dependencias, será el mismo FreeSWITCH que las instalará. Para tener la certeza que el modulo se haya instalado correctamente:

ls /usr/lib64/freeswitch/mod/mod_call*

/usr/lib/freeswitch/mod/mod_callcenter.la /usr/lib/freeswitch/mod/mod_callcenter.so

Para que se inicie con FS:

nano +144 /etc/freeswitch/autoload_configs/modules.conf.xml

se modifica esta linea (Linea 141):

<!--<load module="mod_callcenter"/>-->

para que quede:

<load module="mod_callcenter"/>

Se guardan los cambios. Ahora para que FreeSWITCH se ejecute en automático cada vez que se reinicie el servidor:

Se modifica el siguiente archivo:

nano /usr/src/freeswitch/build/freeswitch.service

Cambiando esta linea:

WorkingDirectory=/run/freeswitch

para que quede:

WorkingDirectory=/var/run/freeswitch

Se guardan lo cambios y se copia en la carpeta de los scripts de inicio:

cp /usr/src/freeswitch/build/freeswitch.service /usr/lib/systemd/system/

se copia el archivo donde se pueden añadir parámetros personalizados en la respectiva carpeta:

cp /usr/src/freeswitch/build/freeswitch.sysconfig /etc/sysconfig/freeswitch

Como el script de inicio de FreeSWITCH utiliza el usuario freeswitch, hay que crearlo:

useradd -r -d /etc/freeswitch/ freeswitch

Como la carpeta /var/run/freeswitch, indicada en el script de inicio, se borra cada vez que se reinicia el sistema, para que cada vez se cree correctamente, se crea el siguiente archivo:

nano /etc/tmpfiles.d/freeswitch.conf

y se copia la siguiente linea:

d /var/run/freeswitch 0755 freeswitch freeswitch - -

con este comando se creará la carpeta /var/run/freeswitch con los permisos 0755, usuario y grupo propietario freeswitch. Ya se puede activar el script de inicio:

systemctl enable freeswitch

Created symlink from /etc/systemd/system/multi-user.target.wants/freeswitch.service to /etc/systemd/system/freeswitch.service.

Antes de iniciar el servicio con el script de inicio, se ejecuta en primer plano para averiguar si hay errores de configuración/instalación y para que se creen todos los archivos que FreeSWITCH necesita:

freeswitch -nonat -nf

las dos opciones significan respectivamente: no utilizar la detección de NAT y trabajar en primer plano. Muy probablemente aparecerán algunas lineas de error relacionadas con SQLite:

[ERR] switch_core_sqldb.c:587 NATIVE SQL ERR [no such table: channels]

esto es porque las tablas que utiliza FreeSWITCH se crean en SQLite la primera vez que se inicia el programa. Una vez que termine el flujo de LOG, para averiguar que el modulo más importante, mod_sofia, esté funcionando correctamente:

freeswitch@sip10.voztovoice.net> sofia status


Para parar/terminar FreeSWITCH:

freeswitch@sip10.voztovoice.net> shutdown

Ahora que se ha averiguado que todo está funcionando correctamente, se cambian los permisos de las carpetas y archivos relacionados con FreeSWITCH; este paso se realiza también porque las base de datos SQLite3 creadas al iniciar FreeSWITCH con usuario root, sean accesibles al usuario freeswitch que es él con que se inicia el programa.

chown -Rf freeswitch:freeswitch /etc/freeswitch/ /usr/lib/freeswitch/ /var/log/freeswitch/ /var/run/freeswitch/ /var/lib/freeswitch/ /usr/share/freeswitch

Ahora podemos iniciar el programa utilizando el script inicio:

systemctl start freeswitch

y averiguar que esté corriendo:

ps aux | grep freeswitch

freeswi+ 126946 0.7 1.7 269156 17200 ? Ssl 11:21 0:00 /usr/bin/freeswitch -nc -nf

Acceder a la consola con el alias de comando que se ha creado en la primera parte del este módulo semanal:

fscli


Salir de la consola:

freeswitch@sip10.voztovoice.net> ...

IMPORTANTE: son tres puntos seguidos

Aunque la base de datos interna predefinida se basa en SQLite3, es posible utilizar el conector ODBC con otras base de datos para los datos internos de FS y algunos módulos. Es por eso que realizaremos una configuración inicial de MariaDB. Iniciamos el programa:

systemctl start mariadb

lo configuramos para que se ejecute en automático:

systemctl enable mariadb

Created symlink /etc/systemd/system/mysql.service â /usr/lib/systemd/system/mariadb.service.

Created symlink /etc/systemd/system/mysqld.service â /usr/lib/systemd/system/mariadb.service.

Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service â /usr/lib/systemd/system/mariadb.service.

Creamos la contraseña para el usuario root:

mysqladmin -u root password GuV3sP289nudWuAV

y lo ponemos en seguridad:

mysql_secure_installation

Se contestan las preguntas somo sigue:

Enter current password for root (enter for none): GuV3sP289nudWuAV

OK, successfully used password, moving on...

Change the root password? [Y/n] n

... skipping.

Remove anonymous users? [Y/n] y

... Success!

Disallow root login remotely? [Y/n] y

... Success!

Remove test database and access to it? [Y/n] y

- Dropping test database...

Reload privilege tables now? [Y/n] y

... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

Configuramos la zona horaria de MariaDB:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -pGuV3sP289nudWuAV mysql

Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.

Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.

nano /etc/my.cnf.d/mariadb-server.cnf

Bajo la etiqueta [mysqld] añadimos (PERSONALIZAR según su País):

default-time-zone = America/Bogota

Para asegurarnos que todo esté funcionando correctamente, reiniciamos el servidor:

reboot

después de unos segundos volvemos a acceder y miramos si podemos conectarnos a la consola de FreeSWITCH:

fscli

Si todo está bien, miramos el estado del programa y la versión instalada:

freeswitch@sip10.voztovoice.net> status


luego salimos de la consola:

freeswitch@sip10.voztovoice.net> /quit

/quit es otro comando que se puede utilizar para salir de la consola de FS. Para averiguar que esté escuchando en los puertos 5060 y 5080 que corresponden a los dos perfiles SIP predefinidos, de los que hablaremos más adelante:

netstat -naep | grep 5060

tcp 0 0 216.128.130.80:5060 0.0.0.0:* LISTEN 985 24410 1522/freeswitch

tcp6 0 0 2001:19f0:6401:21f:5060 :::* LISTEN 985 24406 1522/freeswitch

udp 0 0 216.128.130.80:5060 0.0.0.0:* 985 24409 1522/freeswitch

udp6 0 0 2001:19f0:6401:21f:5060 :::* 985 24405 1522/freeswitch

y:

netstat -naep | grep 5080

tcp 0 0 216.128.130.80:5080 0.0.0.0:* LISTEN 985 24416 1522/freeswitch

tcp6 0 0 2001:19f0:6401:21f:5080 :::* LISTEN 985 24402 1522/freeswitch

udp 0 0 216.128.130.80:5080 0.0.0.0:* 985 24415 1522/freeswitch

udp6 0 0 2001:19f0:6401:21f:5080 :::* 985 24401 1522/freeswitch

Fin

Vota el Articulo: 

Promedio: 5 (1 voto)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Instalación de FreeSWITCH 1.10.8 en Rocky Linux 8" Suscribirse a VozToVoice - Todos los comentarios