OpenSolaris en mi HP Compaq d220

Bueno realmente no es mía, pero a ultimas fechas como si lo fuera, es un equipo que se encuentra atorado en mi lugar de trabajo debido a un limbo burocrático, así que mientras siga aquí, he decidido ponerle un sabor de UNIX.

Realmente la instalación es muy sencilla si vas a utilizar el disco duro en su totalidad para el sistema, cuestiones de particiones lo veremos después.

El único problema después de la instalación es el siguiente: la tarjeta de red. Todo el hardware fue reconocido salvo la tarjeta de red, así que no nos queda otro camino que buscar si alguien ya se encontró el mismo problema y tiene alguna solución.

La tarjeta de red en cuestión es la siguiente: bcm 4401.

Gracias a este post sabemos que necesitamos instalar un driver especifico para esta tarjeta y que funcione en nuestro sistema.

Lamentablemente el enlace del driver al que hace referencia el post esta roto, pero buscando un poquito encontramos el archivo en cuestión: http://homepage2.nifty.com/mrym3/taiyodo/bfe-2.6.1.tar.gz

Las instrucciones son sencillas, extraemos y accedemos al directorio del driver.

make
make install
./adddrv.sh

Aqui en mi caso reinicie el equipo para que las demás sentencias a continuación se aplicaran correctamente.

modload obj/bfe
modinfo | grep bfe (loaded?)
devfsadm -i bfe
ifconfig bfe0 plumb
ifconfig bfe0 up

Aquí tenemos activada ya la tarjeta sin embargo el asistente de configuración me marcaba conexión y desconexión intermitentemente, un reinicio del equipo y la tarjeta se activo, tomo su IP y ya se mantuvo conectada sin ningún problema.

Después de todo esto, me encuentro con la sorpresita que el equipo no resuelve nombres, por IP todo funciona e incluso puedo navegar en la web mediante IP, pero si pongo cualquier nombre nada de nada.

Preguntándole un poco a Google, encuentro este post (curiosamente de la experiencia que tuvo esta persona con OpenSolaris), que dicho sea de paso es muy entretenido y didáctico. Ahí hace mención del mismo detalle de la resolución de nombres y del hilo donde encontró la solución (al final de la pagina).

Se trata de modificar la siguiente linea:  “host: files” lo cambiamos por “hosts: files dns mdns”, en el archivo nsswitch.conf dentro del directorio “etc”.

Otro detalle es la configuración del teclado para ponerlo en español distribución latinoamericana, con este comando lo solucionamos: $ setxkbmap -model pc105 latam

La solución la tome de la siguiente pagina: http://www.jfexart.com.ve/2009/03/configurar-teclado-en-opensolaris-con.html

Escritorio OpenSolaris
Escritorio OpenSolaris

MySQL y Asterisk CDR

Realizaremos una pequeña descripción de como conectar mediante MySQL diferentes servidores Asterisk para que guarden los registros de las llamadas realizadas. En el ejemplo que se mencionara a continuación se tienen siete equipos Asterisk funcionando cada uno de ellos con tarjetas analógicas y/o digitales. En el diagrama que se muestra a continuación, se puede observar que estos Asterisk están conectados mediante una topología de estrella por así decirlo, cada servidor esta conectado al Asterisk principal mediante un túnel UDP (VTUN), de esta manera puede haber comunicación entre todos ellos pasando por el servidor central mediante trunks SIP e IAX2.

mysqlasterisk

Cada servidor almacenara en una base de datos alojada en el servidor principal todos los registros de llamadas que se realizan, en este caso solo es de mi interés primordial las llamadas que se realizan a la PSTN por cada equipo, ya que las llamadas realizadas entre servidores (de extensión a extensión) son fácilmente registradas en el CDR del servidor principal, por lo cual tendremos una base de datos con ocho tablas.

Asumimos que ya contamos nuestro Asterisk funcionando en cada conmutador, y que en cada uno de ellos hemos instalado el modulo cdr_addon_mysql, presente en los addons de Asterisk, es preciso indicar que se utilizara el campo uniqueid, este de manera predeterminada no viene activo cuando trabajamos con MySQL al guardar el CDR, así que debemos agregar la siguiente linea en el archivo Makefile que se encuentra de la carpeta de asterisk-addons-1.4.7 y despues de esto compilar e instalar.

ASTCFLAGS+=-DMYSQL_LOGUNIQUEID

Mas información al respecto la podemos encontrar en el siguiente enlace: http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql

Instalamos MySQL mediante aptitude y establecemos una contraseña para el usuario root de nuestro sistema de base de datos.

asteriskpbx:~# aptitude install mysql-server-5.0 libmysqlclient-dev

Continue reading “MySQL y Asterisk CDR”

Dividiendo la consola con Screen.

screen2

En Linux existen múltiples herramientas para todo tipo de escenarios, una de ellas es “Screen”, la cual nos permite dividir la consola por decirlo de alguna manera.

Monitoreo unos cuantos servidores Asterisk, no es que me la pase todo el día viéndolos, pero cuando necesito ver algún comportamiento en especifico que involucre a mas de dos servidores, es bastante útil ver su operación en la misma pantalla y en la misma consola, de esta manera no tengo terminales regadas por mis cuatro escritorios.

Instalar Screen es muy fácil, en Debian lo hacemos de la siguiente manera: # aptitude install screen

Para iniciarlo basta con que abramos una terminal, y ejecutemos el comando screen, al parecer no hay un cambio sustancial, tal vez un parpadeo o algún mensaje de bienvenida, pero una vez echo esto las opciones cambian bastante.

Aclaración pertinente las teclas encerradas en corchetes funcionan como la primera parte de una combinación de teclas, es decir primero aprieto Ctrl luego a, y al final la tecla especifica de la función deseada.

De manera rápida, para dividir horizontalmente tenemos que usar la siguiente combinación de teclas:
[Ctrl-a]+S
Para dividir verticalmente es la siguiente en donde el carácter final es el conocido “pipe”.
[Ctrl-a]+|
Esta nos serviría para movernos a través de las secciones.
[Ctrl-a]+TAB
Para activar la sección de la consola.
[Ctrl-a]+c
Para cerrar una sección.
[Ctrl-a]+X

Por lo que de manera rápida, un procedimiento general seria de la siguiente manera:

  1. Ejecuto screen
  2. Divido la pantalla horizontalmente [Ctrl-a]+S
  3. Me muevo a la sección creada [Ctrl-a]+TAB
  4. Activo la sección [Ctrl-a]+c
  5. Divido verticalmente esta sección [Ctrl-a]+|
  6. Me muevo a la sección creada [Ctrl-a]+TAB
  7. Activo la sección [Ctrl-a]+c
  8. Regreso a la primera sección [Ctrl-a]+TAB

De esta manera obtendremos tres secciones, similar a una T.

Para mas información consulta el siguiente enlace: http://www.ivlabs.org/home/?p=902

Instalar desde una USB (Netbooks)

Hoy en día las cosas han cambiado mucho, yo soy una persona de los tiempos del disco de 3.5 para adelante. Recuerdo los famosos disquetes de rescate, o para formatear algún disco duro con un DOS para realizar estas cosas, la famosa unidad A era la primera en leerse al iniciar nuestra PC.

Con el advenimiento del CD, y la baja de costos entre los lectores y grabadores de estos mismos (aun recuerdo un quemador de CD que me encontré el cual grababa a 1x y era de la marca Kodak), la cosa empezó a cambiar bastante. Empezaron a salir los famosos lives CD, los cuales principalmente te ofrecían probar otros sistemas operativos sin tocar tu disco duro, con lo cual posteriormente se agregaron múltiples herramientas para recuperación y rescate de la información de una PC. Tal vez los mas famosos lives CD fueron Knoppix y Ubuntu.

Sin duda alguna lo que vino a dar un salto en la capacidad de información que uno podía llevar consigo mismo, sin la clara limitación (para estos tiempos claro esta) de un disquete, o la no siempre disponibilidad de un grabador de CD, fue la aparición de las memorias USB. Estos dispositivos que en un principio tenían poca capacidad que sin embargo era mayor a la de un disquete, han ido creciendo en tamaño y popularidad. La ultima memoria que vi de reojo ya andaba en 32 GB, y supongo que hay de mucho mas tamaño.

Sin embargo, ahora que de tan de moda andan las Netbooks, esas mini laptops que debido a su miniaturista diseño no traen una unidad de CD, nos vemos en la necesidad de tener a la mano una USB en caso de querer instalar de nuevo todo el sistema operativo sea cual sea este (Windows o alguna distribución GNU/Linux).

Bueno después de tanto rollo, buscando en la red, se encuentran dos buenas herramientas:

Unetbootin

Principalmente orientada a poner un buen numero de distribuciones Linux en tu memoria, desde Arch Linux hasta Zenwalk. O cualquier imagen ISO que tengas a la mano.

Muy útil si queremos probar alguna distribución Linux, y queremos guardar los cambios que realicemos.

unetbootin1

Seleccionamos el ISO deseado y la unidad que tiene asignada la memoria USB.

unetbootin2

Copiando los archivos.

unetbootin3

Copiado finalizado y nos pregunta si queremos reiniciar para probar el sistema puesto en el dispositivo USB.

WinToFlash

El nombre lo dice todo, es poner el disco de instalación de Windows en la unidad USB, y desde ahí formatear y volver a instalar el sistema Windows.

El programa tiene un asistente que hace el trabajo muy sencillo, solo nos pregunta el origen de los datos (unidad de CD) y el destino (nuestra memoria USB).

Con esta aplicación, una vez que iniciamos desde la USB, se nos presentara un menú, en el cual debemos elegir la opción uno, la cual es la primera parte de una instalación de Windows, crear, formatear la partición y copiar los archivos del sistema, una vez que reiniciamos y volver a iniciar desde la memoria debemos escoger la segunda opción del menú donde estará la instalación gráfica de Windows que consiste básicamente en escoger la configuración regional del equipo, el nombre del mismo así como el ingreso del número de serie del sistema operativo, después de esto el primer inicio del sistema es desde la propia memoria, una vez que reinicies entrara directamente desde el disco duro principal.

Probando QueueMetrics

Vamos a probar el monitoreo en tiempo real para ver que sucede al “loguear” un par de agentes y recibir una llamada. En esta imagen nos aparece una pagina de datos donde se nos muestras diversos parámetros, y aun no muestra ningún agente ni alguna llamada entrante.

quemetricsmon1

Como vimos en el post de Agentes y Colas, “logueamos” un par de agentes, con lo cual en la siguiente actualización de la pagina se nos muestran listos para recibir llamadas. Entre otros datos que se nos muestran como el número de agentes que están disponibles o en pausa y la fecha del ultimo registro del agente.

quemetricsmon2

Realizamos la simulación de una llamada entrante que se asignara a la cola de Telecontacto, esperando a que algún agente tome la llamada. Se nos muestra la hora de ingreso de la llamada así como el tiempo que lleva esperando la persona.

quemetricsmon3

En este caso la llamada la ha tomado el agente dos, se nos muestran mas datos, como el tiempo de la llamada entrante así como el agente que ha contestado, en el panel se nos muestra de un color distinto al agente dos para indicarnos que se encuentra en llamada en la cola que le ha sido asignada.

quemetricsmon4

Instalando QueueMetrics – 2

Al entrar a la aplicación ejecutaremos el wizard para cargar los datos que con antelación hemos creando en nuestro Asterisk con base en el post anterior.

quemetricswizard1

En esta parte especificamos la forma en que la aplicación importara los parámetros de nuestra configuración existente a partir de los archivos.

quemetricswizard2

Si no existe problema en la importación avanzamos.

quemetricswizard3

Nos muestra los datos importados, el código del agente, su contraseña  y el nombre asociado.

quemetricswizard4

Nos muestra la única cola que tenemos configurada en nuestro Asterisk y a la que están asociados todos nuestros agentes.

quemetricswizard5

Un listado con toda la configuración antes de finalizar la importación.

quemetricswizard6

Hemos finalizado la importación tenemos agregada ahora una cola y nuestros cuatro agentes.

quemetricswizard7

De esta manera tenemos ya la posibilidad de realizar reportes y tener monitoreo en tiempo real a nuestros agentes.

quemetricswizard8

Agentes y Colas en Asterisk, un sencillo ejemplo

Bueno después de la instalación vamos a probar un poquito la situación. Crearemos una cola, cuatro agentes, y unos diez usuarios con sus extensiones para experimentar.

Creamos una cola bastante sencilla con estrategia aleatoria (que mas justicia que la propia suerte), y a los agentes miembros de esta.

gabriel@trantor:~$ sudo vim /etc/asterisk/queues.conf

[Telecontacto]
musicclass = default
strategy = random
timeout = 15
retry = 5
wrapuptime = 0
maxlen = 0
announce-frequency = 0
announce-holdtime = no
member => Agent/1001
member => Agent/1002
member => Agent/1003
member => Agent/1004

Respectivamente ponemos a los agentes.

gabriel@trantor:~$ sudo vim /etc/asterisk/agents.conf

agent => 1001,4321,Telecontacto Uno
agent => 1002,4321,Telecontacto Dos
agent => 1003,4321,Telecontacto Tres
agent => 1004,4321,Telecontacto Cuatro

Creamos diez usuarios SIP, a partir de una sencilla plantilla.

gabriel@trantor:~$ sudo vim /etc/asterisk/sip.conf

[telecontacto](!)
type=friend
host=dynamic
disallow=all
allow=alaw
secret=tele00
qualify=yes
language=es
callgroup=1
pickupgroup=1

[8000](telecontacto)
[8011](telecontacto)
[8022](telecontacto)
[8033](telecontacto)
[8044](telecontacto)
[8055](telecontacto)
[8066](telecontacto)
[8077](telecontacto)
[8088](telecontacto)
[8099](telecontacto)

Bueno y ahora algo de dialplan, de manera sencilla tenemos una extensión que al marcarla entrara a la cola, simulando una serie de llamadas entrantes. Marcaremos desde nuestro teléfono o softphone #70 para llamar la aplicación AgentCallbackLogin, la cual nos pide el numero de agente, la contraseña y la extensión a la cual va a estar asociada el agente. Para “desloguear” al agente podemos volver a marcar #70 solo que omitimos poner la extensión. De igual manera un modo mas automático es marcar #71 seguido del numero del agente.

gabriel@trantor:~$ sudo vim /etc/asterisk/extensions.conf

exten => 7000,1,Goto(telecontacto,s,1)

;Agent Login
exten=> #70,1,AgentCallbackLogin()
exten=> #60,1,AgentLogin(|s)

;Agent Logout
exten => _#71XXXX,1,Answer()
exten => _#71XXXX,n,System(asterisk -rx "agent logoff Agent/${EXTEN:3}")

;Extensiones principales
exten => _80XX,1,Dial(SIP/${EXTEN})

[telecontacto]
exten => s,1,Answer
exten => s,n,Ringing
exten => s,n,SetMusicOnHold(default)
exten => s,n,Queue(Telecontacto)
exten => s,n,Hangup

Registramos a tres agentes, mas un cuarto usuario que llamara y entrara a la cola de llamadas. Vemos aquí la ejecución al registrar un usuario y “loguearse” con su agente.

*CLI>     -- Registered SIP '8011' at 192.9.200.161 port 5065
[Oct  9 22:37:56] NOTICE[22151]: chan_sip.c:13107 handle_response_peerpoke: Peer '8011' is now Reachable. (3ms / 2000ms)
    -- Executing [#70@default:1] AgentCallbackLogin("SIP/8011-b6701a90", "") in new stack
    --  Playing 'agent-user' (language 'es')
    --  Playing 'agent-pass' (language 'es')
    --  Playing 'agent-newlocation' (language 'es')
  == Setting global variable 'AGENTBYCALLERID_8011' to '1001'
    --  Playing 'agent-loginok' (language 'es')
  == Callback Agent '1001' logged in on 8011
    --  Playing 'vm-goodbye' (language 'es')
  == Spawn extension (default, #70, 1) exited non-zero on 'SIP/8011-b6701a90'

Después de registrar a los agentes, podemos observar ahora los agentes en linea asociados a su respectiva extensión.

*CLI> agent show online
1001         (Telecontacto Uno) available at '8011' (musiconhold is 'default')
1002         (Telecontacto Dos) available at '8022' (musiconhold is 'default')
1003         (Telecontacto Tres) available at '8033' (musiconhold is 'default')
3 agents online

El cuarto usuario marca para entrar a la cola y esta es la ejecución que sigue. La llamada es asignada al agente 1001, asignado en la extensión 8011.

*CLI>     -- Executing [7000@default:1] Goto("SIP/8000-b6706260", "telecontacto|s|1") in new stack
    -- Goto (telecontacto,s,1)
    -- Executing [s@telecontacto:1] Answer("SIP/8000-b6706260", "") in new stack
    -- Executing [s@telecontacto:2] Ringing("SIP/8000-b6706260", "") in new stack
    -- Executing [s@telecontacto:3] SetMusicOnHold("SIP/8000-b6706260", "default") in new stack
    -- Executing [s@telecontacto:4] Queue("SIP/8000-b6706260", "Telecontacto") in new stack
    -- Started music on hold, class 'default', on SIP/8000-b6706260
    -- outgoing agentcall, to agent '1001', on 'Local/8011@default-b805,1'
    -- Executing [8011@default:1] Dial("Local/8011@default-b805,2", "SIP/8011") in new stack
    -- Called 8011
    -- SIP/8011-09bc1e48 is ringing
    -- Agent/1001 is ringing
    -- SIP/8011-09bc1e48 answered Local/8011@default-b805,2
    -- Agent/1001 answered SIP/8000-b6706260
    -- Stopped music on hold on SIP/8000-b6706260
  == Spawn extension (default, 8011, 1) exited non-zero on 'Local/8011@default-b805,2'
  == Spawn extension (telecontacto, s, 4) exited non-zero on 'SIP/8000-b6706260'

Vemos a los agentes cuando uno de ellos esta trabajando.

*CLI> agent show online
1001         (Telecontacto Uno) available at '8011' (musiconhold is 'default')
1002         (Telecontacto Dos) logged in on SIP/8022-09bc1e48 talking to SIP/8000-b6706260 (musiconhold is 'default')
1003         (Telecontacto Tres) available at '8033' (musiconhold is 'default')
3 agents online

Ya que tenemos la base vamos a ver como nos va con las estadísticas en la aplicación Queuemetrics, por el momento es todo.

Instalando QueueMetrics – 1

Vamos a instalar una famosa aplicación para manejar las estadísticas de un call center trabajando con Asterisk.
Necesitamos un contenedor de servlets (Tomcat), y todo lo que conlleva. Necesitamos el kit de desarrollo y el entorno de ejecución de Java.

Nos dirigimos a la zona de descargas de SUN, para descargar tanto el JDK como el JRE. Descargamos los archivos mencionados.
http://java.sun.com/javase/downloads/index.jsp

Java SE Development Kit (JDK)
JDK 6 Update 16

jdk-6u16-linux-i586.bin

Java SE Runtime Environment (JRE)
JRE 6 Update 16

jre-6u16-linux-i586.bin

Creamos un directorio llamado java dentro de usr, y copiamos los archivos descargados a esta ubicación.

trantor:/home/gabriel/Descargas# mkdir /usr/java
gabriel@trantor:~/Descargas$ ls *.bin
jdk-6u16-linux-i586.bin jre-6u16-linux-i586.bin
gabriel@trantor:~/Descargas$ sudo cp *.bin /usr/java/

Entramos al directorio y damos permisos de ejecución a los archivos para instalarlos.

gabriel@trantor:~$ cd /usr/java/
gabriel@trantor:/usr/java$ sudo chmod +x jdk-6u16-linux-i586.bin jre-6u16-linux-i586.bin
gabriel@trantor:/usr/java$ sudo ./jdk-6u16-linux-i586.bin
gabriel@trantor:/usr/java$ sudo ./jre-6u16-linux-i586.bin

Con la instalación obtenemos los directorios correspondientes a cada entorno de ejecución.
gabriel@trantor:/usr/java$ ls
jdk1.6.0_16 jdk-6u16-linux-i586.bin jre1.6.0_16 jre-6u16-linux-i586.bin

Descargamos la ultima versión de Tomcat desde la siguiente dirección.

http://mirror.candidhosting.com/pub/apache/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz

Ingresamos al directorio donde instalaremos a Tomcat, y lo descomprimimos en este caso hago referencia a la carpeta donde realizo las descargas de archivos.

gabriel@trantor:~$ cd /usr/local/
gabriel@trantor:/usr/local$ sudo tar xvfz /home/gabriel/Descargas/apache-tomcat-6.0.20.tar.gz

Creamos un enlace simbólico hacia el directorio recién descomprimido, de tal manera que nos quede la referencia como /usr/local/tomcat.

gabriel@trantor:/usr/local$ sudo ln -s apache-tomcat-6.0.20 tomcat
gabriel@trantor:/usr/local$ ls -l
lrwxrwxrwx 1 root staff 20 oct 7 14:17 tomcat -> apache-tomcat-6.0.20

Necesitamos declarar las siguientes tres variables de entorno para el propósito de la instalación.

export CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME=/usr/java/jdk1.6.0_16/
export JRE_HOME=/usr/java/jre1.6.0_16/

Colocamos las anteriores lineas al final de los siguientes dos archivos.

trantor:~# vim /etc/bash.bashrc
trantor:~# vim /etc/profile

Creamos otro enlace simbólico para el ejecutable de tomcat.
trantor:~# ln -s /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat

Iniciamos tomcat.
trantor:/home/gabriel# /etc/init.d/tomcat start

Verificamos en nuestro navegador y debemos ver al simpático felino símbolo de tomcat.

http://localhost:8080/

tomcat1

Detenemos de momento el servicio.
trantor:/home/gabriel# /etc/init.d/tomcat stop

Descargamos la ultima versión de QueueMetrics.

http://queuemetrics.com/download/QueueMetrics-1.5.4-trial.tar.gz

Ingresamos al directorio de las aplicaciones y descomprimimos desde el directorio donde descargamos QueueMetrics, y cambiamos el nombre del directorio.

$ cd /usr/local/tomcat/webapps/
$ sudo tar xvfz /home/gabriel/Descargas/QueueMetrics-1.5.4-trial.tar.gz
$ sudo mv queuemetrics-1.5.4 queuemetrics

En este momento podemos probar si la aplicación se refleja en nuestro navegador web, obteniendo una imagen como la siguiente, ya que aun no creamos ni la base de datos ni el conector propio para esta.

http://localhost:8080/queuemetrics/

tomcatqueuemetrics1

Ingresamos a nuestro motor de base de datos para crear la base misma así como el usuario asociado a esta.

$ mysql -u root -p
mysql> CREATE DATABASE queuemetrics;
mysql> GRANT ALL PRIVILEGES ON queuemetrics.* TO ‘queuemetrics’@’localhost’ IDENTIFIED BY ‘javadude’;
mysql> quit

Instalamos las tablas correspondientes a nuestra base de datos a partir del script de ejemplo.

$ cd /usr/local/tomcat/webapps/queuemetrics/WEB-INF/README/
$ mysql –user=queuemetrics –password=javadude queuemetrics < queuemetrics_sample.sql

Necesitamos la aplicación que haga posible la conexión entre MySQL y Java, por lo cual descargamos el conector para nuestra aplicación de la siguiente manera.

$ cd /usr/local/tomcat/webapps/queuemetrics/WEB-INF/lib/
$ sudo wget http://mirrors.uol.com.br/pub/mysql/Downloads/Connector-J/mysql-connector-java-5.0.5.tar.gz
$ sudo tar -xvzf mysql-connector-java-5.0.0.tar.gz
$ sudo cp mysql-connector-java-5.0.5/mysql-connector-java-5.0.5-bin.jar .
$ sudo rm mysql-connector-java-5.0.5.tar.gz

Iniciamos tomcat de nuevo.
trantor:/home/gabriel# /etc/init.d/tomcat start

Ingresamos a la pagina para iniciar la instalación final.

http://localhost:8080/queuemetrics/

tomcatqueuemetrics2

tomcatqueuemetrics3

El usuario por defecto es demoadmin con la contraseña demo.

tomcatqueuemetrics4

Aquí tenemos el panel de control de la aplicación.

tomcatqueuemetrics5

Por el momento es todo.

FreeSWITCH, a ver que tal sabe

Los paquetes necesarios para compilar e instalar, ya deberíamos tenerlos si en alguna ocasión hemos instalado el asterisco.
Descargamos, compilamos e instalamos.

wget http://files.freeswitch.org/freeswitch-1.0.4.tar.gz
tar xvfz freeswitch-1.0.4.tar.gz
cd freeswitch-1.0.4
./configure
make
make install
make uhd-sounds-install
make uhd-moh-install
make hd-sounds-install
make hd-moh-install
make samples

Y echo esto, lo ejecutamos.

trantor:~# /usr/local/freeswitch/bin/freeswitch
FreeSWITCH Version 1.0.4 (exportado) Started.
Crash Protection [Disabled]
Max Sessions[1000]
Session Rate[30]
SQL [Enabled]
freeswitch@trantor.demerzel.org>

De manera predeterminada ya contamos con cierto número de usuarios creados así como de un dialplan ya configurado.

gabriel@trantor:~$ ls /usr/local/freeswitch/conf/directory/default
1000.xml  1002.xml  1004.xml  1006.xml  1008.xml  1010.xml  1012.xml  1014.xml  1016.xml  1018.xml  brian.xml    example.com.xml
1001.xml  1003.xml  1005.xml  1007.xml  1009.xml  1011.xml  1013.xml  1015.xml  1017.xml  1019.xml  default.xml

Configuramos de manera rápida un softphone con el usuario 1000, clave 1234 y marcamos 9000 para escuchar algo de música en espera.

freeswitch@trantor.demerzel.org> 2009-10-06 12:54:25.958754 [NOTICE] switch_channel.c:602 New Channel sofia/internal/1000@192.9.215.24 [9c9fbe5a-60da-454e-9990-41d3319a6a0d]
2009-10-06 12:54:25.966756 [INFO] mod_dialplan_xml.c:315 Processing Gabriel->9000 in context default
2009-10-06 12:54:26.50745 [INFO] switch_core_session.c:1392 Sending early media
2009-10-06 12:54:26.58751 [INFO] mod_sofia.c:1506 Ring SDP:
v=0
o=FreeSWITCH 1254825366 1254825367 IN IP4 192.9.215.24
s=FreeSWITCH
c=IN IP4 192.9.215.24
t=0 0
m=audio 26300 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv

2009-10-06 12:54:26.58751 [NOTICE] mod_sofia.c:1509 Pre-Answer sofia/internal/1000@192.9.215.24!

Seguiremos investigando más acerca de este prometedor software.

Miniconexión entre Kamailio y Asterisk

Tomando como base el post anterior vamos a realizar un pequeño enlace para que nuestros usuarios en Kamailio puedan marcar a una extensión de nuestro Asterisk, ya sea un usuario en especifico o tomar el numero de una troncal.

Antes que nada debemos cambiar el puerto por el que escucha Asterisk (archivo sip.conf), ya que Kamailio ya se encuentra usándolo.

bindport=5070 ; UDP Port to bind to (SIP standard port is 5060)

También ponemos en no, las llamadas invitadas.

allowguest=no ; Allow or reject guest calls (default is yes)

Tenemos creados mediante una plantilla los siguientes usuarios en nuestro Asterisk, del 5001 al 5005.

[linphone](!)
type=friend
host=dynamic
disallow=all
allow=alaw
allow=gsm
secret=a1234
qualify=yes
language=es
callgroup=1
pickupgroup=1

[5001](linphone)
[5002](linphone)
[5003](linphone)
[5004](linphone)
[5005](linphone)

Y por ultimo creamos lo siguiente para permitir llamadas sin autenticación de la IP indicada en el host.

[kamailio]
type=friend
context=default
insecure=port,invite
host=192.9.215.24

En nuestro dialplan colocamos una linea sencilla como esta:

exten => _500X,1,Dial(SIP/${EXTEN})

Ahora lo que necesitamos es agregar unas cuantas lineas a nuestro archivo de configuración kamailio.cfg.
La siguiente condición la colocamos después de la sentencia consume_credentials(); en route[3].

if(uri=~”^sip:[5][0-9]{3}@.*”) {
route(4);
}

Y al final del archivo colocamos una nueva ruta, la cual redirigirá las peticiones a la IP y puerto donde esta escuchando Asterisk.

route[4]
{
rewritehostport(“192.9.215.24:5070”);
t_relay();
exit;
}

De esta manera al marcar un cinco seguido de tres números Kamailio lo desviara hacia Asterisk, y ya el se encargara de llevarla a su destino de acuerdo a su dialplan establecido.