25/08/2008

OpenSUSE + Asterisk + IAXmodem + HylaFAX

Retomando el lado tecnico del blog (mucho tiempo sin postear...) y como complemento a los temas de nuestro curso pongo a disposicion este tutorial para utilizar Asterisk como un fax server en conjunto con HylaFAX sin necesidad de un faxmodem, utilizando en su lugar un "modem virtual" basado en el protocolo IAX2 (IAXmodem).

De alguna manera este post es la actualizacion de otro anterior donde utilizabamos HylaFAX con un faxmodem externo serial, dispositivo que ultimamente es dificil de encontrar a la venta de primera mano. Aun asi dicho post puede ser de utilidad porque se detalla el mecanismo para envio de faxes con clientes Windows, en este documento solo tocamos lo concerniente a la recepcion.

Los faxes podrian recibirse por nuestro Asterisk de varias maneras : como una opcion en el IVR ("para fax marcar 1050"), un usuario (tipicamente la recepcionista) podria transferir la llamada a la extension 1050 que brindaria el tono de fax, o mucho mejor, se podria asignar uno de los numeros telefonicos disponibles ("ala" DID) especificamente a dicha extension.

Se asume para este How-To, el tener un sistema base OpenSUSE 10.3 con instalacion de Asterisk/ZAPtel 1.4 mediante RPM con el repositorio "telephony" (http://download.opensuse.org/repositories/network:/telephony/openSUSE_10.3/) y una correcta configuracion para colocar/recibir llamadas a la PSTN.

1) Instalacion del software (IAXmodem y HylaFax) :

# yast sw_single iaxmodem spandsp asterisk-spandsp hylafax libtiff uucp mgetty ghostscript-library

2) Configuracion de Asterisk :

Crear cuenta IAX "1050" asignada al contexto "telefonos"

# vi /etc/asterisk/iax.conf

[1050]
username=1050
type=friend
secret=a83qdasd
host=dynamic
context=telefonos
callerid="Fax" <1050>
allow=all

En el contexto "telefonos" (se asume que este contexto puede ser alcanzado desde una llamada del exterior), agregar la entrada respectiva para la extension 1050 asignada al fax

# vi /etc/asterisk/extensions.conf

exten => 1050,1,Dial(IAX2/1050)

Actualizar los cambios en la configuracion de Asterisk

# asterisk -rvv

CLI> iax2 reload
CLI> dialplan reload

3) Configuracion de IAXmodem :

Crear archivo de configuracion "/etc/iaxmodem/ttyIAX" para dispositivo serial virtual "/dev/ttyIAX" (notese la correspondencia con los valores de "iax.conf")

# mkdir /etc/iaxmodem
# vi /etc/iaxmodem/ttyIAX

device /dev/ttyIAX
port 45699
refresh 300
server localhost
peername 1050
secret a83qdasd
cidname Fax
cidnumber 1050
codec slinear

Probamos el correcto funcionamiento de IAXmodem de manera manual

# iaxmodem ttyIAX
[2008-08-25 02:34:34] Modem started
[2008-08-25 02:34:34] Setting device = '/dev/ttyIAX'
[2008-08-25 02:34:34] Setting port = 45699
[2008-08-25 02:34:34] Setting refresh = 300
[2008-08-25 02:34:34] Setting server = 'localhost'
[2008-08-25 02:34:34] Setting peername = '1050'
[2008-08-25 02:34:34] Setting secret = '123456'
[2008-08-25 02:34:34] Setting cidname = 'Fax'
[2008-08-25 02:34:34] Setting cidnumber = '1050'
[2008-08-25 02:34:34] Setting codec = slinear
[2008-08-25 02:34:34] Error: group unspecified, using root instead
[2008-08-25 02:34:34] Error: user not found in passwd file, using root instead
[2008-08-25 02:34:34] Error: invalid mode string () ? Leaving default modes on /dev/ttyIAX
[2008-08-25 02:34:34] Opened pty, slave device: /dev/pts/0
[2008-08-25 02:34:34] Created /dev/ttyIAX symbolic link
[2008-08-25 02:34:34] Error: mode is 0, leaving default permissions
[2008-08-25 02:34:34] Registration completed successfully.

Como verificacion final, debe de existir el archivo/dispositivo "/dev/ttyIAX"

# ls -l /dev/ttyIAX
lrwxrwxrwx 1 root root 10 Aug 25 04:01 /dev/ttyIAX -> /dev/pts/1

En el CLI de Asterisk se puede verificar que se registre correctamente la nueva extension 1050

# asterisk -rvv

CLI> iax2 show peers like 1050
Name/Username Host Mask Port Status
1050/1050 127.0.0.1 (D) 255.255.255.255 45699 OK (6 ms)
1 iax2 peers [1 online, 0 offline, 0 unmonitored]

4) Configuracion de HylaFAX :

Ejecutar script de configuracion (para mayor detalle ver post anterior), confirmando valores por defecto

# faxsetup

En el punto en que se sugiere ejecutar la deteccion de faxmodem, no proseguir

Do you want to run faxaddmodem to configure a modem [yes]? no
Done verifying system setup.

Se debe de personalizar la configuracion de HylaFAX (en el ejemplo, para Lima/Peru)

# vi /var/spool/fax/etc/config

CountryCode: 51
AreaCode: 1
LongDistancePrefix: 0
InternationalPrefix: 00

El formato por defecto que se genera al recibir el fax es TIFF, lo cambiamos a PDF

# vi /var/spool/fax/bin/faxrcvd

FILETYPE=pdf

Utilizar el archivo de ejemplo "config.ttyIAX" (disponible como parte del tarball del codigo fuente de IAXmodem en "http://iaxmodem.sourceforge.net/download.php") para configurar el modem virtual, los demas parametros del archivo se deben de dejar con los valores por defecto

# vi /var/spool/fax/etc/config.ttyIAX

CountryCode: 51
AreaCode: 1
FAXNumber: 2736769
LongDistancePrefix: 0
InternationalPrefix: 00
RecvFileMode: 0664
LogFileMode: 0664
DeviceMode: 0666
RingsBeforeAnswer: 1
SpeakerVolume: off
GettyArgs: "-h %l dx_%s"
LocalIdentifier: "IAXmodem"
TagLineFormat: "Desde %%l|%c|Pag %%P de %%T"
MaxRecvPages: 200

Reiniciar daemon de HylaFax y activar el inicio automatico junto con el sistema

# service hylafax restart
# chkconfig hylafax on

Finalmente, configurar IAXmodem y faxgetty (parte de HylaFAX) para que permanentemente esten a la espera de llamadas entrantes

# vi /etc/inittab

iax:2345:respawn:/usr/sbin/iaxmodem ttyIAX &> /var/log/asterisk/iaxmodem-ttyIAX
fax:2345:respawn:/usr/lib/fax/faxgetty ttyIAX

Se recomienda reiniciar el servidor a fin de verificar que todos los servicios levanten correctamente

# init 6

De no poder hacerlo por estar con un sistema en produccion se puede utilizar "init q" para solo refrezcar los cambios de inittab.

Hasta este punto tendremos nuestro sistema preparado para la recepcion de faxes, para el envio es posible utilizar clientes para Windows (como WHFC o WinPrint HylaFAX) que mediante una impresora virtual "imprimen" los documentos que son enviados mediante HylaFAX al exterior. En este post anterior se brinda el procedimiento junto con mayor detalle en el uso de HylaFAX.

Con pequenas adaptaciones esta configuracion es dable para otras distros o con Asterisk compilado desde codigo fuente, hay que tener en cuenta que dependiendo de la version de HylaFax pueden variar las rutas, asi como tambien de no usar RPM se debe de compilar el soporte para IAXmodem junto con las librerias spandsp y libiax.

Espero sea de utilidad este aporte, en estos dias estoy preparando nuevos posts con la configuracion de tarjetas analogicas y digitales Sangoma, hasta la proxima!

05/01/2007

Configuracion de HYLAFAX

Algunos de los participantes del curso que actualmente estoy dictando me consultaron sobre soluciones de fax-server sobre Linux, dado que por razones de tiempo no voy a poder tocar ese punto en el curso (debo de tocar los temas programados en una cantidad limitada de tiempo), detallo aca el procedimiento de configuracion respectivo.

HylaFAX es un daemon que corre sobre un equipo Linux (en el ejemplo trabajamos con SUSE) conectado a un faxmodem de conexion serial que a su vez, conectado a una linea telefonica dedicada, recibe los faxes provenientes del exterior grabandolos en formato TIFF. Los usuarios (normalmente PCs con Windows) reciben por email una notificacion con un link para acceder a la imagen TIFF mediante HTTP o FTP. Tambien los usuarios (corriendo desktops Linux o Windows) pueden enviar faxes mediante la "impresion" del documento hacia una impresora virtual que no es mas que un software cliente que envia el fax hacia el servidor HylaFAX y de ahi hacia el exterior.

Por supuesto tambien hay soluciones basadas en Asterisk, en este link hay informacion interesante sobre ello.

El procedimiento de configuracion de HylaFAX es el siguiente :

1. Conectar fisicamente el fax-moden externo

2. Instalar paquetes : hylafax, libtiff, a2ps, libjpeg, uucp, setserial, ghostscript-library, ...

NOTA : en el caso de OpenSUSE 10.X el RPM de HylaFAX esta incluido en la media, en el caso de SLES10 se puede utilizar el RPM de OpenSUSE 10.1 y para SLES9 se puede descargar de "http://www.hylafax.org/content/SUSE_Packages"

3. Probar dispositivo :

# setserial -g /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
4. Ejecutar scripts de configuracion :

(Aceptar en la mayoria de casos opciones por defecto, excepto las que se refieren
al codigo de area, telefono, etc.)

# faxsetup

Creating new configuration file /var/spool/fax/etc/config...

Restarting HylaFAX server processes.
Should I restart the HylaFAX server processes [yes]?

/etc/init.d/hylafax start
Starting service HylaFAX done

# faxaddmodem

You do not appear to have any modems configured for use. Modems are
configured for use with HylaFAX with the faxaddmodem(8C) command.
Do you want to run faxaddmodem to configure a modem [yes]?
Serial port that modem is connected to []? ttyS0

Creating new configuration file /var/spool/fax/etc/config.ttyS0...
Creating fifo /var/spool/fax/FIFO.ttyS0 for faxgetty... done.
Done setting up the modem configuration.

Checking /var/spool/fax/etc/config for consistency...
...everything looks ok; leaving existing file unchanged.

Don't forget to run faxmodem(8C) (if you have a send-only environment)
or configure init to run faxgetty on ttyS0.
Do you want to run faxaddmodem to configure another modem [yes]? no

Should I run faxmodem for each configured modem [yes]?
/usr/sbin/faxmodem ttyS0

Done verifying system setup.
5. Habilitar carga de "faxgetty" en el inicio del sistema, editar "/etc/inittab" :

# vi /etc/inittab

mo:35:respawn:/usr/lib/fax/faxgetty /dev/ttyS0

# init q

# rchylafax restart

# tail -f /var/log/messages

Apr 28 11:16:52 callao init: Re-reading inittab
Apr 28 11:16:52 callao FaxGetty[5291]: OPEN /dev/ttyS0 HylaFAX (tm) Version 4.1.8
Apr 28 11:17:02 callao FaxQueuer[3692]: QUIT
Apr 28 11:17:02 callao FaxQueuer[5319]: HylaFAX (tm) Version 4.1.8
Apr 28 11:17:02 callao FaxQueuer[5319]: Copyright (c) 1990-1996 Sam Leffler
Apr 28 11:17:02 callao FaxQueuer[5319]: Copyright (c) 1991-1996 Silicon Graphics, Inc.
Apr 28 11:17:02 callao HylaFAX[5322]: HylaFAX INET Protocol Server: restarted.
Apr 28 11:17:02 callao HylaFAX[5322]: HylaFAX Old Protocol Server: restarted.
Apr 28 11:17:02 callao HylaFAX[5322]: HylaFAX SNPP Protocol Server: restarted.
Apr 28 11:17:03 callao FaxGetty[5291]: MODEM CL-MD56XX 57600/
Apr 28 11:17:03 callao FaxGetty[5291]: HELLO
6. Modificar "/var/cache/fax/etc/config.ttyS0" :

CountryCode: 1
AreaCode: 51
FAXNumber: 6666666
RecvFileMode: 0777
LogFileMode: 0777
DeviceMode: 0777
#GettyArgs: "-h %l dx_%s"
GettyArgs: "-r -b -s %s %l"
LocalIdentifier: "FAX SERVER"
MaxRecvPages: 100
#Class1SwitchingCmd: AT+FRS=7 # silence between HDLC recv and trans
Class1SwitchingCmd: ""
7. Modificar "/var/cache/fax/bin/faxrcvd" :

(Se debe reemplazar cualquiere referencia a $HOSTNAME por URL del servidor fax) :

HOSTNAME=`fax.prueba.com` # XXX no good way to find FQDN

echo "$FILE (http://fax.prueba.com/$FILE):"; $INFO -n $FILE

echo " CommID: c$COMMID (http://fax.prueba.com/log/c$COMMID)"
8. Crear usuarios :

# vi /etc/cache/fax/etc/hosts.hfaxd

localhost
127.0.0.1
192.168.254.1
192.168.254.2
192.168.254.3
user1:01:clave123
user2:02:clave321
9. Configurar Apache para que document root sea "/var/spool/fax/recvq"... :)

10. Para verificar status de fax :

# cat /var/spool/fax/status/ttyS0
Running and idle
11. Bajar cliente windows "WHFC" de "http://www.hylafax.org/content/Desktop_Client_Software" e
instalar de la siguiente manera :

- Ejecutar instalador "whfc-x.x.x_setup.exe"
- Agregar impresora local (se debe seleccionar puerto WHFCFAX y asignarle driver "Applewriter 16/1600PS")
- Ingresar a WHFC y configurar la autenticacion (server name "fax.prueba.com" o el ip del servidor, port number "4559", name "marcus", etc)
- Para probar se debe imprimir cualquier documento en la impresora creada, se abrira ventana de WHFC con status del envio.

10/06/2006

Old school

Grata noticia enterarme de que un grupo de mis ex-compañeros de colegio han formado un espacio virtual donde reencontrarnos :

http://groups.msn.com/CAFAE-PROMO93

Como el espacio para postear fotos en ese grupo es limitado aprovecho las facilidades de Bubbleshare para hacerlo a continuacion :


This album is powered by
BubbleShare

PD.- un dia que dejaste este mundo y ya te extraño shirleyfe, Dios te bendiga.