Aquellos que han participados en mis cursos, sobre todo de OpenSIPs, ya conocen SEMS; SEMS es un Media Server muy liviano, modular, que permite la configuración de todas una serie de servicios entres los cuales:
-
conferencias audio
-
buzón de voz
-
test de echo
Además de eso puede actuar como Session Border Controller (SBC) brindando los siguientes servicios:
-
cambio de identidad
-
manipulación de cabeceras
-
Manejo de flujos RTP
-
Detección de NAT
-
Transcodificación
-
SIP Autenticación
-
Session Timer
-
Call Timer
-
Llamadas prepagadas
La ultima versión que hasta hace poco estaba disponible, la 1.6.0, no compilaba correctamente en Rocky Linux 9, pero parece que hace un par de meses salió la 1.7.0 que si compila correctamente en esta distribución de Linux. A seguir los pasos para compilar e instalar SEMS 1.7.0. Como pre-requisitos necesitamos todos los paquetes utilizados para compilar desde las fuentes y además Cmake y Git:
dnf group install "Development Tools"
dnf install spandsp* flac* speex* opus* gsm* hiredis git cmake -y
Seguimos bajando las fuentes:
cd /usr/src
git clone https://github.com/sems-server/sems.git
Entramos en la carpeta creada:
cd sems/
mkdir -p builds
cd builds/
compilamos:
cmake ..
make
e instalamos:
make install
Terminada la compilación e instalación se crearán un serie de carpetas relacionadas con SEMS:
-
/usr/local/sbin contendrá el programa ejecutable de SEMS y unas utilidades
-
/etc/sems contendrá el archivo de configuración de sems y una carpeta /etc donde se encontrarán todos los archivos de configuración predefinidos de los distintos módulos disponibles
-
/usr/local/lib/sems contendrá a su vez tres carpetas; las que normalmente interesan:
-
audio: con todos los archivos de audio de todos los módulos (solamente en inglés)
-
plug-in: con todos los módulos compilados
-
Podemos continuar con la instalación del script de arranque de SEMS. Como este script inicia el programa con usuario y grupo sems, hay que crearlos:
useradd -M -U sems
cd ../pkg/rpm/
Abrimos este archivo:
nano sems.systemd.service
y modificamos esta linea:
ExecStart=/usr/sbin/sems -E -u sems -g sems -P /var/run/sems/sems.pid $OPTIONS
para que quede:
ExecStart=/usr/local/sbin/sems -E -u sems -g sems -P /var/run/sems/sems.pid $OPTIONS
Esto porque el programa se encuentra en la carpeta /usr/local/sbin y no /usr/sbin. Guardamos los cambios y creamos la carpeta para el archivo sems.pid como indicado en el archivo de configuración del script:
mkdir -p /var/run/sems
copiamos el archivo de arranque:
cp sems.systemd.service /usr/lib/systemd/system/sems.service
activamos para que arranque en automático:
systemctl enable sems
Created symlink from /etc/systemd/system/multi-user.target.wants/sems.service to /usr/lib/systemd/system/sems.service
Copiamos dos archivos necesarios para que todo funcione correctamente:
cp sems.sysconfig /etc/sysconfig/sems
cp sems.systemd.tmpfiles.d.conf /etc/tmpfiles.d/sems.conf
creamos la carpeta /var/spool/voicebox donde se guardarán los archivos audio de los mensajes vocales de los buzones de voz y cambiamos los permisos para usuario y grupo sems:
mkdir -p /var/spool/voicebox
chown sems:sems /var/spool/voicebox
El paso a seguir, antes de iniciar el programa, es crear/modificar el archivo de configuración de SEMS. Renombramos el archivo predefinido:
mv /etc/sems/sems.conf /etc/sems/sems.conf.old
creamos uno nuevo:
nano /etc/sems/sems.conf
donde copiamos las siguientes lineas (Modificar IP con la IP de escucha que quieren utilizar y sip_port con el puerto donde quieren ponerse a la escucha). Leer atentamente todos los comentarios presentes):
# IP de escucha. Modificar IP con la IP de escucha de su servidor
sip_ip=IP
# Puerto de escucha
sip_port=5060
# Carpeta donde se encuentran todos los modulos de SEMS compilados
plugin_path=/usr/local/lib/sems/plug-in/
# Se cargaran solamente los modulo declarados en la linea load_plugins
load_plugins=wav;speex;gsm;conference;echo.so;voicemail;voicebox;msg_storage
# En este campo se configura que aplicacion se ejecutara para las llamadas entrantes:
# $(ruri.user) se utilizara la parte usuario de la Request-URI. Ej. sip:voicemail@dominio.org
# $(ruri.param) se utilizara el parametro app si presente en la Request-URI
# $(apphdr) se utilizara el valor contenido en la cabecera P-App-Name
# $(mapping) las aplicaciones se configuraran en el archivo
# app_mapping.conf utilizando expresiones regulares
application = $(apphdr)
# Carpeta donde estan presentes los archivo de configuracion de los modulos
plugin_config_path=/etc/sems/etc/
# SEMS se ejecutara en segundo plano
fork=yes
# No se enviaran los errores a la salida estandar de Linux
stderr=no
# Nivel de LOG
# 2 INFO
# 3 DEBUG
loglevel=3
# Salida de LOG que luego se configurara en Rsyslog
syslog_facility=LOCAL2
# Configuracion para guardar en los registros de LOG cada actividad del servidor
log_sessions=yes
log_events=yes
# Este parametro fija un limite de solicitudes que se aceptan por segundo
# Se ese limite se supera, el servidor contestara con un 503 Server overload
cps_limit="10;503;Server overload"
# Que nombre aparecera en la cabecera User-Agent de los mensajes SIP enviados por SEMS
signature="SEMS Media Server 1.7"
Guardamos los cambios y configuramos Rsyslog para que los registros de LOG de SEMS se guarden en un archivo dedicado:
nano /etc/rsyslog.conf
después de esta linea:
local1.* -/var/log/rtpengine.log
añadimos (como configurado en sems.conf):
local2.* -/var/log/sems.log
Guardamos los cambios y creamos el archivo de LOG de SEMS:
touch /var/log/sems.log
Reiniciamos rsyslog:
systemctl restart rsyslog
Ahora configuran los servicios que quieren utilizar y al final inician sems:
systemctl start sems
revisan que esté corriendo:
systemctl status sems
Cualquier problema o modulo que quieran configurar, me comentan.