lunes, 18 de enero de 2016

Asterisk: Estaba en inglés, ahora en español

En todo el tiempo que llevo con la centralita de Asterisk instalado no le he cambiado los mensajes de sonido del inglés al español de manera definitiva. Lo intenté en una ocasión pero no funcionaba: el sistema dejaba de funcionar. Por lo que volvía otra vez a la configuración inicial.

Voy a volver a probar. Lo primero, es buscar los ficheros de audio. He encontrado varias fuentes:

  • http://www.voipnovatos.es
  • http://www.asterisksounds.org
De hecho, voy a usar la segunda fuente. De esta usaremos los dos ficheros que nos ofrecen: http://www.asterisksounds.org/es-es/download.

Lo primero es saber dónde lo vamos a guardar. Será en una carpeta con el nombre es dentro de /var/lib/asterisk/sounds

mkdir /var/lib/asterisk/sounds/es

Ahí es donde lo vamos a descargar. Como estas descargas son en formato .zip, hay que acordarse de tenerlo instalado. Además, al bajarlo en un Linux, hay que pasarle el parámetro -a que permita al unzip extraerlo acorde al sistema:

unzip -a core.zip
unzip -a extra.zip

Una vez extraído, hay que cambiarle los dueños (tanto el usuario como el grupo) y los permisos de los subdirectorios:

chown -R asterisk.asterisk /var/lib/asterisk/sounds/es
find /var/lib/asterisk/sounds/es -type d -exec chmod 0775 {} \;

En teoría, sólo con esto debería de ser suficiente. Pero como los audios están en formato sln16, y nosotros trabajamos con gsm729ulaw y alaw, hay que reconvertirlos. Según las instrucciones, se puede usar este script, que habrá que guardar en un fichero y asignarle permisos de ejecución:

#!/bin/bash
for a in $(find . -name '*.sln16'); do
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t gsm -r 8k `echo $a|sed "s/.sln16/.gsm/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e a-law `echo $a|sed "s/.sln16/.alaw/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e mu-law `echo $a|sed "s/.sln16/.ulaw/"`;\
done

Ojo, que le costará hacerlo un tiempecillo. Además, os habréis fijado que falta la conversión de uno de los formatos indicados: g729. Al ser un formato propietario, hay que hacerlo de otra forma. Aunque lo he intentado hacer, no lo he conseguido. Y aún así no lo estaba usando. De todas formas, si quieres probar, el comando sería:

asterisk -rx "file convert fichero.wav fichero.g729"

La siguiente acción es indicarle al sistema que utilice estos audios. Si se busca en Internet encontraremos que nos indican que se configura en el menú Settings --> Asterisk Sip Settings. Pero ya no está ahí. Al menos, en la versión 13. Tendremos que utilizar el módulo Sound Languages

Módulo Sound languages en FreePBX - Sección global
Módulo Sound languages en FreePBX - Sección global
Hay dos opciones: indicarle que se descargue distintos paquetes de idiomas. Si os preguntáis por qué descargarlos... No lo sé. Cogí los de español también porque no conseguí que sonasen los descargados antes:

Módulo Sound languages en FreePBX - Language packs
Módulo Sound languages en FreePBX - Language packs
Nos descargaremos los idiomas que nos hagan falta y para os codecs que tengamos configurados. Aún así, en español no tenemos el paquete extras. 

Y, por último, la sección custom languages, que es la que nos permite indicarle los paquetes con los que empezamos este post

Módulo Sound languages en FreePBX - Custom languages
Módulo Sound languages en FreePBX - Custom languages
Como se puede apreciar esta es la última configuración que he utilizado. Como he encontrado en alguna documentación que alguien tuInstavo ejecutar el comando 

amportal restart

Aunque es el que he ejecutado, recordemos que está deprecated. Habría que usar fwconsole

Espero que os sirva y sea de utilidad. Si tenéis alguna otra forma de hacer esta configuración, bienvenida sea.

De todas formas, si tenéis dudas, también podéis ver los enlaces de donde he conseguido los audios y parte de las instrucciones que he intentado seguir:


lunes, 11 de enero de 2016

RasPBX: De Asterisk 11 a Asterisk 13

Hoy voy a escribir un post muy rápido. Como voy a hacer una serie de ajustes a mi centralita a la que la versión de Asterisk podría afectar, he decidido actualizarla. Eso sí, no sin antes hacer los backups que creí necesarios: si sigues estas instrucciones, hazlo bajo tu responsabilidad.

Lo primero de todo: por defecto al instalar RasPBX viene con Asterisk 11. Pero existe la posibilidad de actualizar a Asterisk 13. Lo primero que se hace es buscar en la documentación de FreePBX. Y dicen que se lance el script:

asterisk-version-switch

Pero no hay forma de detectarlo. Según explican, si la distribución instalada fuera 100 % FreePBX debería de existir. Pero, parece ser que al ser un port para ARM éste no se encuentra. Por lo que toca buscar en la documentación, que, por cierto, está algo desactualizada. Indican que hay que ejecutar una serie de comandos, que serían los siguientes:

raspbx-upgrade
apt-get update
amportal stop
apt-get purge asterisk11
apt-get install asterisk13
amportal start
Pero, amportal ya no "existe". Ahora, hay que usar fwconsole, que, fundamentalmente es cambiar el nombre del comando y alguna detalle más.

raspbx-upgrade
apt-get update
fwconsole stop
apt-get purge asterisk11
apt-get install asterisk13
fwconsole start
Y así ya lo tendríamos actualizado. Los siguientes pasos ya son las configuraciones que nos mejoren la nueva versión.


lunes, 4 de enero de 2016

Raspberry pi 2 B en Tele sin HDMI

Recientemente me he comprado una raspberry pi 2 B. En este nuevo caso es un juguetito para mi tele. Sólo hay que tener en cuenta una cosa: si bien no es cabezona (como se las llama a las antiguas) no cuenta con HDMI. 

Hay que tener en cuenta las posibilidades que tengo y que trae este cacharro. Descartando el HDMI, tiene otra opción. Lo llaman de diversas formas: TRRS(EN), 3.5mm Audio/Video Jack,  cable iPod... y visualmente es el típico conector de cascos de 3,5 mm. Estos conectores suelen tener unas franjas negras. Esas franjas negras definen qué se va a enviar a cada cable: 

  • si tiene 1 franja negra (luego, 2 secciones): es audio mono
  • si tiene 2 franjas negras (luego, 3 secciones): es audio estéreo
  • si tiene 3 franjas negras (luego, 4 secciones [importante]): es audio (estéreo) y vídeo. 

Perfecto. Luego, vamos a necesitar un cable como el último: un cable cuyo conector tenga las 4 secciones. Pero: ¿qué son cada una de las secciones? 

  • 2 secciones: audio. Cada una de ellas pertenecerá a cada uno de los lados: izquierdo y derecho.
  • 1 sección vídeo.
  • 1 sección: toma de tierra o ground.

"Perfecto. Me compro un cable que tenga ese conector, con las 4 secciones y ya lo tengo. "

Me temo que no va a ser tan fácil. El problema está en que cada una de ellas tiene que estar en una posición determinada. En caso contrario, no vamos a poder usar ese cable. Me preguntaréis: 

"Entonces,  ¿qué posiciones debe de tener?"

O, a lo mejor os estáis diciendo 

"no puedo ver la tele con la rasp"

porque no tenéis HDMI u os estáis encontrando con problemas a la hora de usar el jack. Veámoslo con la siguiente foto de un cable que no sirve:

Cable 3,5 mm audio/vídeo erroneo
Cable 3,5 mm audio/vídeo erroneo

Lo importante es comprobar que una sección determinada se encuentre donde debe. Sobretodo el vídeo y la toma de tierra (GND). Como se puede ver, este cable se corresponde con la descripción. Pero, internamente está construido de una forma incompatible con el que necesitamos. En el cable mostrado se encuentra en la segunda sección por la derecha y debería de estar en la segunda por la izquierda tal y como indican en la siguiente imagen, obtenida de la página oficial(EN):

Secciones conectores 3,5 mm audio/video jack
Secciones conectores 3,5 mm audio/video jack: Fuente oficial

¿Y cómo sé si el cable que acabo de comprar es compatible? Tendrás que usar un polímetro (también conocido como voltimetro). 

Polimetro o voltimetro
Polimetro o voltimetro

Con uno tan básico como el que se muestra te debería de servir. Lo configurarás para comprobar las resistencias (en mi caso, girando la rosca hasta "la una"). Una vez configurado, cogerás uno de los terminales (por ejemplo, el rojo) y lo llevarás uno de los jacks (por poner un ejemplo, también el rojo). El otro terminal (el negro) lo irás situando en cada una de las secciones hasta que la aguja se mueva. En cuanto lo haga, sabrás que esa sección se corresponde con ese jack. Así, podrás ir comprobando una a una todas las secciones hasta que tengas definido a qué jack pertenece cada sección. Sabiendo que cada sección tiene su función, sabrás dónde deberá de ir ese jack. Te podrás encontrar con un jack rojo que en vez de ser audio sea vídeo, siendo el de audio el amarillo. Incluso, que el audio cuyo color suele ser el izquierdo ahora sea el derecho. 

Si queremos resumir esta parte: no tener en cuenta los colores sino qué conector eléctricamente hablando se corresponde con la función esperada para la rasp

Tal y como os dije, el cable de arriba no es correcto, por lo que ha tocado buscar otro que sí que se corresponde con la configuración esperada. 

¡¡Estupendo!! Ahora que ya sabemos que el cable es el adecuado , tenemos que configurar el sistema para que funcione con la salida de televisión con formato PAL, que es el que tenemos aquí en España. Dando por hecho que tenemos la imagen transferida a la tarjeta (tal y como hicimos en este otro sistema) tendremos que hacer, como mínimo, un cambio. 

Abramos el fichero que se llama config.txt. Dentro hay una sección que está comentada: sdtv_mode. Para que funcione en un televisor PAL tiene que estar igualado a 2.

sdtv_mode=2

A partir de aquí, ya deberíamos de poder ver sin ningún problema cómo arranca el sistema y su escritorio (o consola, según corresponda). Aunque existen más configuraciones para indicar qué formato queremos (4:3, 16:9, 14:9) no las tocamos. 

Y ya está. Espero que os sea de utilidad. Y si tenéis algún problema más, avisad. A ver si os podemos ayudar.

miércoles, 30 de diciembre de 2015

Convertir vmdk a dd o raw

Como de costumbre, vamos a ponernos en situación.

Nos entregan unas evidencias que hay que analizar en un disco. Y cuando nos vamos a poner a trabajar sobre ellas, nos encontramos con que nos entregan unas máquinas virtuales de VMWare. Es una faena, porque queremos trabajar con herramientas como FTK o Autopsy. ¿Qué hacemos? Sencillo: instalar otro software de virtualización. 

Es totalmente en serio. Al menos, para la técnica que voy a mostrar aquí hace falta precisamente el producto de Oracle VirtualBox. La razón es que tiene una herramienta que se llama VBoxManage.exe. Con ésta, entre otras cosas, puedes convertir las imágenes al formato dd, también conocido como raw.

Por lo tanto, vamos a la carpeta de instalación de VirtualBox desde el cmd y ejecutamos:

VBoxManage clonehd fichero_vmdk fichero_dd --format raw

Donde el fichero_vmdk es el nombre del mismo y el fichero_dd lo mismo. Esta aclaración es para indicar que es muy recomendable (al menos así lo he hecho yo) usar rutas absolutas. 

Después del tiempo que tarde en convertir los gigas y gigas de datos de los que conste el vmdk, ya tendrás un formato más estándar, con el que trabajar más cómodamente (siempre que no te haga arrancarla, y de lo que ya hablaré en un futuro). Además hay que tener en cuenta otra cosa más: si ese disco de la máquina virtual es dinámico, lo más seguro es que el resultado final te ocupe más. Si en el destino no hay espacio suficiente, tendrás algún mensaje de error (que por desgracia no tengo a  mano). 

viernes, 25 de diciembre de 2015

Felices fiestas - 2015

Siento no haber podido felicitaros las navidades. Por lo tanto...

¡¡FELIZ NAVIDAD!!

Espero que os lo paséis muy bien en estos días tan especiales. Disfrutadlos (sobretodo si estáis de vacaciones).

martes, 3 de noviembre de 2015

RootedCon 2016: Call For Papers

Si bien lo han avisado hace unos pocos días, no he tenido tiempo para comunicarlo.

Ya han abierto los Call For Papers para la RootedCon 2016. Esta próxima no se hará en el hotel Auditorum, como las dos anteriores entregas, sino en la sala 25 de los cines Kinépolis de Madrid. Las fechas serán 3, 4 y 5 de Marzo.

El plazo para enviarlos es el 10 de diciembre del presente año (2015).

Como de costumbre, cuando doy estos avisos, mirad las fuentes oficiales, dado que yo no lo soy.

http://rootedcon.com/noticias/abierto-el-cfp-para-rooted2016.php


viernes, 30 de octubre de 2015

Comando System en Asterisk: Systemstatus devuelve APPERROR

Llevaba tiempo sin publicar. Además, como donde estoy ahora no tengo disponible mi centralita, voy a intentar contarlo lo mejor posible. estaba no tenía disponible la centralita. Después de terminar de escribirlo, he llegado a ella y todo lo que tenía aquí expuesto estaba bien, excepto alguna sintáxis. Sobretodo el poner (o no) comillas, como si de cadenas se trataran, en las llamadas a las funciones de Asterisk

Ahora, tenemos en nuestro home: /home/myUser/ un script, dateFile.sh que hace:

date >> fileDate.log

Con unos permisos:

-rwxr--r-- myUser asterisk

A la hora de trabajar en los contextos en Asterisk, además de usar sus propios comandos, se pueden hacer llamadas al sistema o a scripts que tengamos en él. Por lo que, podríamos tener algo similar a lo siguiente:

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Después, resulta, que miras en los logs y te dice que se ha ejecutado (o, a veces, ni eso), pero mirando en la misma carpeta donde se encuentra el script te encuentras con que no se ha obtenido ningún resultado. Por lo tanto, buscando, te encuentras que el resultado de la operación se guarda en la variable SYSTEMSTATUS.

Por lo tanto, volviendo al contexto (siempre me sale el nombre de ámbito [scope]):

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,NoOp("Systemstatus is: " ${SYSTEMSTATUS})
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Y volvemos a pasar el mismo. Ahora, después de lanzarlo, nos devuelve que el resultado es: APPERROR. No es SUCCESS. No es FAILURE.

Resulta, que al buscar qué significa ese error, todos terminan diciendo, más o menos que está indocumentado y que devuelve un resultado distinto de 0 (cero).

¿Y qué hago? No he visto resultados cuando Asterisk ha llamado al script. ¿Y si lo lanzo desde consola? Es importante saber que va a funcionar. Y en efecto, así es. Desde la misma consola funciona.

Bien: para resumir dónde puede estar el problema, volvamos a los permisos asignados. Porque ahí es donde radica el quid de la cuestión.

Nuestro usuario tiene permisos para ejecutar ese script. Asterisk no puede hacerlo. No sólo es cuestión de mirar a qué usuario pertenece dicho fichero, o el grupo al que quieres asignarlo, sino también los permisos de lectura, ejecución, ¿escritura? que quieras asignarle.

Si en vez de tener los permisos de arriba, tuviese:

-rwxr-xr-- myUser asterisk

Y volviésemos a ejecutarlo, ahora ya no nos devolvería ese error tan raro que no da ninguna información. La única pega que alguien podría poner es que lo asigne al grupo de asterisk, en vez de permitir que sean otros. A parte de eso, creo que esto es algo seguro, y, lo más importante de todo: ya hemos obtenido la respuesta de una de las posibles causas de este error.