Instalación de FreeSWITCH 1.6 en CentOS 7.4 desde las fuentes

Como el próximo mes de Junio voy a organizar el primer curso a distancia dedicado a FreeSWITCH, he pensado publicar esta guía para que lo puedan instalar y ir probándolo. No voy a comentar mucho los pasos pero les garantizo que la instalación funciona correctamente.

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

yum install gsm gsm-devel gsm-tools -y

yum install speex speex-devel wavpack wavpack-devel -y

Algunos paquetes y librerías utilizadas para la compilación de las fuentes:

yum install gcc ncurses-devel make gcc-c++ zlib-devel libtool bison-devel bison libpqxx-devel -y

yum install openssl-devel bzip2-devel wget newt-devel subversion flex gtk2-devel bzip2 patch -y

yum install libjpeg-devel yasm-devel libsndfile-devel -y

MariaDB:

yum install mariadb mariadb-server mariadb-devel -y

ODBC:

yum install unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl-devel -y

SQLite:

yum install sqlite sqlite-devel -y

LibUUID:

yum install libuuid libuuid-devel uuid uuid-devel -y

LAME, LibMAD y Opus se instalan desde las fuentes:

cd /usr/src
wget https://www.voztovoice.org/campus/FreeSWITCH/lame-3.100.tar.gz
tar -xf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix=/usr --libdir=/usr/lib64
make
make install

cd /usr/src
wget https://www.voztovoice.org/campus/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 modificamos 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

guardamos los cambios y continuamos con la compilación e instalación:

make
make install

wget https://archive.mozilla.org/pub/opus/opus-1.1.1.tar.gz
tar -xf opus-1.1.1.tar.gz
cd opus-1.1.1
./configure --prefix=/usr --libdir=/usr/lib64
make
make install

Terminamos con la instalación de SoX:

cd /usr/src
wget https://www.voztovoice.org/campus/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
make
make install

Otros paquetes para implementar FAX y protocolo XMPP:

yum install libtiff libtiff-devel libxml2 libxml2-devel -y

yum install spandsp spandsp-apidoc spandsp-devel -y

yum install gnutls gnutls-devel gnutls-utils -y

yum install iksemel iksemel-devel iksemel-utils -y

OpenLDAP es la versión open source del protocolo Lightweight Directory Access.

yum install compat-openldap 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.

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

Continuamos la preparación del servidor con la instalación del lenguaje de programación LUA que permite integrar el dialplan con aplicaciones escritas con este lenguaje:

yum install lua lua-devel -y

La librería LIBSRTP para el cifrado del flujo media:

yum install libsrtp libsrtp-devel -y

y la liberia Jansson para el soporte de las RESTful API:

yum install jansson jansson-devel -y

Unas ultimas dependencias:

yum install portaudio portaudio-devel python-devel perl-devel erlang ldns-devel libedit-devel -y

Instalación de FreeSWITCH

Terminada la preparación del servidor, iniciamos con la instalación de FreeSWITCH. Para la descarga de las fuentes se utilizará GIT que hay que instalar:

yum install git perl-ExtUtils-Embed -y

Descargamos la ultima versión de la rama 1.6 de FreeSWITCH:

cd /usr/src

git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch

Entramos en la carpeta creada:

cd freeswitch

y preparamos las fuentes para la compilación:

./bootstrap.sh -j

./configure -C --enable-portable-binary \
            --prefix=/usr --localstatedir=/var --sysconfdir=/etc \
            --with-gnu-ld --with-python --with-erlang --with-openssl \
            --enable-core-odbc-support --enable-zrtp \
            --enable-core-pgsql-support \
            --enable-static-v8 --disable-parallel-build-v8

Si queremos instalar más módulos, además de los predefinidos, abrimos el siguiente archivo:

nano modules.conf

y descomentamos las lineas de los módulos que queremos incluir en la compilación e instalación. Por ahora se dejan solamente los que vienen por defecto. Continuamos con:

make

Si no aparecen errores, continuamos con:

make install

Instalamos las locuciones en inglés (disponibles también en francés y ruso) y los audio para la música de espera:

make cd-sounds-install
make cd-moh-install

Para que FreeSWITCH arranque en automático modificamos el siguiente archivo:

nano build/freeswitch.service

Cambiando esta linea:

WorkingDirectory=/run/freeswitch

para que quede:

WorkingDirectory=/var/run/freeswitch

Guardamos los cambios y copiamos el archivo en la carpeta de los scripts de arranque:

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

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

cp build/freeswitch.sysconfig /etc/sysconfig/freeswitch

Como el script de arranque inicia FreeSWITCH con usuario freeswitch lo creamos:

useradd -r -d /etc/freeswitch/ freeswitch

Como la carpeta /var/run/freeswitch, indicada en el script de arranque, se borra a cada reboot del sistema, para que cada vez se cree correctamente:

nano /etc/tmpfiles.d/freeswitch.conf

copiamos la siguiente linea:

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

se creará la carpeta /var/run/freeswitch con los permisos 0755 y usuario y grupo propietario freeswitch. Ya podemos activar el script de arranque:

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 arranque, lo iniciamos 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

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 por defecto en SQLite la primera vez que se inicia el programa. Una vez que termine el flujo de LOG de FreeSWITCH, para averiguar que el modulo más importante, mod_sofia, esté funcionando correctamente:

freeswitch@sip10.voztovoice.co> sofia status

aparecerá la configuración predefinida del modulo. Para parar FreeSWITCH:

freeswitch@sip10.voztovoice.co> shutdown

Cambiamos los permisos de las carpetas y archivos relacionados:

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

Ahora podemos iniciar el programa utilizando el script de arranque:

systemctl start freeswitch

y averiguar que esté funcionando correctamente:

ps aux | grep freeswitch
freeswi+ 24421 92.2  4.6 786856 23144 ?        Ssl  14:57   4:17 /usr/bin/freeswitch -nc -nf

Y acceder a la consola:

fs_cli

Salir de la consola:

freeswitch@sip10.voztovoice.co> ...

Eso es todo.

Me comentan

Comentarios

El procedimiento se realizó sin ningún problema, pero cuando voy a acceder a la consola y hago ''fs_cli'' me sale el siguiente error:

[ERROR] fs_cli.c:1659 main() Error Connecting [Socket Connection Error]

¿A qué se debe esto?, ¿Y cómo podría solucionarlo? 

Gracias por la ayuda.

Hola,

que te devuelve el comando:

ps aux | grep freeswitch

Saludos

Gracias por responder. Esto es lo que me devuelve:

[root@localhost ~]# ps aux | grep freeswitch
freeswi+   957  0.9  0.8 1275876 34780 ?       Ssl  10:35   0:16 /usr/bin/freeswitch -nc -nf
root      3350  0.0  0.0 112724   964 pts/0    S+   11:03   0:00 grep --color=auto freeswitch
 

Puede ser que tengas Selinux activado:

nano /etc/selinux/config

Tiene que ser:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Luego reinicias el servidor.

Me comentas

Saludos

Hola.

Sí, ya la tenia desactivada, como estas alli: 

[root@localhost ~]# vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

y pasa que tambien cuando miro el status del freeswitch, me encuentro que no tiene conexión.

[root@localhost ~]# service freeswitch status
Redirecting to /bin/systemctl status freeswitch.service
● freeswitch.service - FreeSWITCH
   Loaded: loaded (/usr/lib/systemd/system/freeswitch.service; enabled; vendor pre                                                                                      set: disabled)
   Active: active (running) since jue 2018-08-23 12:02:26 -05; 14min ago
 Main PID: 981 (freeswitch)
    Tasks: 30
   CGroup: /system.slice/freeswitch.service
           └─981 /usr/bin/freeswitch -nc -nf

ago 23 12:02:26 localhost.localdomain systemd[1]: Started FreeSWITCH.
ago 23 12:02:26 localhost.localdomain systemd[1]: Starting FreeSWITCH...
ago 23 12:02:26 localhost.localdomain freeswitch[981]: ERROR: Failed to set SCH...
ago 23 12:02:26 localhost.localdomain freeswitch[981]: ERROR: Could not set nic...
Hint: Some lines were ellipsized, use -l to show in full.
 

¿Alguna idea más de que podría ser?

gracias, saludos.

Hola,

hay que ver que dicen las dos lineas donde sale el ERROR:

ago 23 12:02:26 localhost.localdomain freeswitch[981]: ERROR: Failed to set SCH...
ago 23 12:02:26 localhost.localdomain freeswitch[981]: ERROR: Could not set nic...

Saludos

Ya me funciono, fue debido a que el centos tenia desabilitado IPv6, solo fue activalor y me dejor entrar.

Gracias. saludos.