miércoles, 21 de octubre de 2009

Enviar y reicibir FAX con GNU/Linux, Asterisk, Iaxmodem y hylafax

Requerimiento para convertir tu computadora en un servidor de FAX o
darle la capacidad a tu asterisk de manipular FAX

Se requiere:

Hylafax, puede ser descargado para RedHat o Centos Aqui:

ftp://ftp.hylafax.org/binary/linux/redhat/RPMS/i386/

IaxModem

http://iaxmodem.sourceforge.net/

Ademas de:

ghostscript y sharutils

En algunas instalaciones esta incluido, en otras las tendran que
incluir. si se tratara de CentOS, con yum install ghostscript sharutils
se puede descargar de internet e instalarlo en el servidor de FAX.

GNU/Linux siempre ha tenido la capacidad de enviar y recibir FAX, antes
del Boom el Vozip y de Asterisk, esto para GNU/Linux es cosa simple y
tenemos 2 opciones para realizarlo.

Conseguir un FAX/MODEM antiguo, algunos ni los han de conocer, son esas
cajas viejas con luces que hacían ruidos en la linea telefónica, algunos
nos conectamos con eso a Internet a una súper velocidad de 14,400 kbps,
hasta un celular sin 3G en puro EDGE es 10 veces mas rápido que eso, en
fin.

Como sera difícil conseguir un FAX/Modem de hardware, usaremos el
IAXMODEM, que es básicamente un programa que se comportara como módem y
usara el protocolo IAX para conectarse al asterisk todo en software

El Iaxmodem.tar.gz debe descomprimirse y compilarse, ya que viene en
código fuente, finalmente hay que copiar el programa de iaxmodem de
forma manual a la carpeta /usr/bin, cp iaxmodem /usr/bin

Se una vez con el ejecutable de iaxmodem, habra que configurarlo para
que sepa a que servidor IAX se conectara, en este caso nuestro asterisk.

Se crea el directorio /etc/iaxmodem y luego se crea el archivo
/etc/iaxmodem/ttyIAX donde se pondran las configuraciones

device /dev/ttyIAX

port 45699
refresh 300
server localhost
peername xxx
secret yyy
cidname Fax
cidnumber xxx
codec alaw

El asterisk se prepara para recibir la conexión de un nuevo dispositivo
IAX, que en este caso sera el software que la hara de MODEM

[xxx]
username=xxx
type=friend
secret=yyy
qualify=yes
notransfer=yes
host=dynamic
context=Tu-contexto
callerid=”Virtual Fax”
allow=all

Donde xxx es el usuario y extensión, donde yyy es la clave para esa
extensión.

Se puede automatizar el recibir FAX, pero esto es opcional, por ejemplo
cuando una maquina FAX llamada a nuestro Asterisk, ASterisk detectara
que es un FAX y lo reenviara inmediatamente a la extension de FAX sin
que la recepcionista tenga que mover un dedo

Dependiendo si usas Dahdi o Zapata, sabrás en que archivo debes colocar
esta linea

faxdetect=incoming

En tu extension.conf debes agregar la siguiente

exten => fax,1,Dial(IAX2/xxx)

Como explico, esto es opcional, si no lo agregas, simplemente la
recepcionista tendrá que transferir manualmente al a extensión de FAX
que de hecho es la forma común en prácticamente el 99% de las empresas.

Con esto Asterisk sabe que tiene un nuevo telefono IAX conectado.

Con lo anterior terminamos con Asterisk y su manejo de un FaxModem en
Software.

Lo siguiente, los que alguna vez ya enviaron y recibieron FAX lo deben
saber, por que esto ya no es nuevo.

Preparar Linux para manejar FAX y decirle cual es su FAX modem, solo que
en lugar de usar el FAX hardware físico, usara el IAXMODEM

Configurando el Hylafax

faxsetup

La mayoria de las preguntas que este programa hara se dejan en su
contenido default, salvo se quiera modificar alguna cosa.

Afinando la configuración en el archivo
/var/spool/hylafax/etc/FaxDispatch se le dice a HylaFAX a que correo
electrónico debe enviar los faxes recibidos

SENDTO=FaxMaster;

FILETYPE=pdf;

case “$DEVICE” in

ttyIAX) SENDTO=david@lastdragon.net;; # all faxes received on ttyS1

esac

Se puede afinar mas, pero con el FAxMaster y un solo correo electrónico
debería ser suficiente para la mayoria.

Finalmente hay que ligar la parte del sistema operativo que “piensa” que
tiene un FAX/MODEM de verdad con el Fax Virtual IAXMODEM.

Agregamos las siguientes 2 lineas en /etc/inittab

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

Reiniciamos todos los programas HylaFax, recargamos asterisk y el init.

telinit q

service hylafax restart

asterisk -rx reload

O tal vez simplemente sea mas cómodo un simple shutdown -r now y esperar
a que se reinicie todo el equipo.

Si todo salio como se espera, al marcar la extensión asignada al
iaxmodem, este debe dar todo de FAX y si recibe un FAX, lo codificara a
PDF y adjuntara al correo proveeido /var/spool/hylafax/etc/FaxDispatch

Enviar FAX

Enviar FAX es de hecho ya un proceso muy simple a partir de este punto.

El hecho lo anterior, ya también se esta en posibilidad de enviar faxes,
con el programa sendfax

por ejemplo:

sendfax -n -d 5511236741 miarchivo.pdf

Ese comando va a mandar el contenido del archivo “miarchivo.pdf” al
numero 5511236741.

El comando resuelve de hecho el problema, pero no se le puede pedir a un
usuario común que entre a una sesión de shell a un entorno tipo Unix a
enviar un FAX, por lo que hay que hacer un frontend

Hay varios metodos.

Crear un buzón de correo electrónico donde el numero telefónico sea el
correo por ejemplo 5511236741@miservidordefax.com
y que el pdf adjunto sea lo que
hay que enviar. El programa de esa forma construiría el comando sendfax
y lo enviaría.

Se lee fácil, todos sabemos enviar un correo electrónico y adjuntarle
archivos.

Otro método que es el que preferí, para mi gusto mas fácil de programar
ya que lo hice en exactamente 2:30 segundos.

Escribir una pagina WEB con 2 campos, un campo para el numero a marcar y
el otro para subir el archivo PDF, al darle submit o enviar, un script
en php se encargaría de construir y ejecutar el sendfax

Yo lo resolví con este segundo método y dejare el código de no mas de 10
lineas que resolvió el asunto de enviar un FAX. Esto sigue siendo fácil
para el usuario, una pagina WEB llenar campos y listo se envía el fax

Codigo para el Front End WEB

Archivo Enviar.html

Enviar FAX



method=”post”>


Numero telefonico
Enviar Archivo PDF:





Nota: Tu archivo no debe pasar de 2MB

David Rivero: david@lastdragon.net



Archivo enviar.php


// $cmd = “sendfax ân âd “.$nfax.” “.$pdff;

$fdestino = $_FILES[’archivo’][’name’];
$forigen = $_FILES[’archivo’][’tmp_name’];
$nfax = $_POST[’nfax’];

$copiar = “cp “.$forigen.” “.$fdestino;

$enviarfax = “sendfax -n -d “.$nfax.” “.$fdestino;

system ($copiar);
system ($enviarfax);

echo “
Enviando….”;

?>

Fuente: http://www.lastdragon.net/?p=396

Probar conexion desde python con postgresql

## Inicio Codigo Python
from psycopg import connect
global resultado
global conexion
global cursor
global nombre
conexion = connect("user=sigem password=1234 dbname=sigem")
cursor = conexion.cursor()
sql = "select * from barrio as nombre"
cursor.execute(sql)
resultado=cursor.fetchall()
print resultado
##Fin codigo

Recuerdad que tienes que tener instaldo la librería de conexión psycopg

Crear una base de datos y roles postgresql en ubuntu 9.04

Lo primero que tenemos que hacer es crear un usuario para la base de datos en el mismo sistema operativo:

wily@wily:~$ adduser sigem (en mi caso voy a crear el usuario sigem)
luego le ponemos el password..

Ahora tenemos que crear el usuario dentro de posgres para poder crear un rol y asignar una base de datos posteriormente.

wily@wily:~$ su postgres
postgres@wily:~$ createdb sigem
CREATE DATABASE
postgres@wily:~$ exit (para salir)

Luego debemos de ingresar con nuestro usuario creado para asignar el ROL.

wily@wily:~$ su sigem

Seguidamente, arrancamos postgres:

sigem@wily:~$ psql sigem

Dicho comando nos mostrará una salida como ésta:

Bienvenido a psql 8.3.8, la terminal interactiva de PostgreSQL.
Teclee: \copyright para ver los términos de distribución
\h para ayuda sobre órdenes SQL
\? para ayuda sobre órdenes psql
\g o punto y coma («;») para ejecutar la consulta
\q para salir

sigem=#

Lo cual nos indica que hemos entrado a la Base de Datos. En éste punto, podremos ejecutar todos los comandos en SQL que necesitemos.

Como último paso, por cuestiones de seguridad, podremos cambiar la contraseña de nuestro usuario de la Base de Datos.

sigem=# alter sigem luix with password '1234';
ALTER ROLE
Para salir de la Base de Datos hacemos:

sigem=# \q

Finalmente, para conectarnos desde la consola a la Base de Datos que acabamos de crear, cada vez que así lo necesitemos, bastará con ejecutar el comando:

sigem@wily:$ psql -h localhost sigem
Contraseña: password

Configuración Postgresql en Ubuntu 9,04

Permitir conexiones remotas
Por motivos de seguridad, la configuración por defecto no admite conexiones externas. Para habilitarlas tenemos que editar el fichero /etc/postgresql/8.2/main/postgresql.conf.

wily@wily:~$ sudo gedit /etc/postgresql/8.2/main/postgresql.conf

Ahora buscamos las siguientes líneas que se encuentran comentadas:
#listen_addresses = 'localhost'

Y la substituimos por la siguiente línea:
listen_addresses = '*'

Posteriormente buscamos la siguiente línea y le quitamos la marca de comentario:
#password_encryption = on

Y nos debe quedar lo siguiente:
password_encryption = on

Guardamos los cambios y reiniciamos el demonio para que los cambios surjan efecto:

wily@wily:~$ sudo /etc/init.d/postgresql-8.2 restart

Configurar la lista de acceso

La configuración de la lista de acceso permite decirle a PostgreSQL qué método de autentificación usar y establecer relaciones de confianza para ciertas máquinas y redes. Hay que editar el fichero /etc/postgresql/8.2/main/pg_hba.conf:

wily@wily:~$ sudo vi /etc/postgresql/8.2/main/pg_hba.conf

Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dependiendo de su necesidad puedes hacer lo siguiente:

Si necesita que cualquier usuario se conecte por medio de una dirección IP en especifico, agregue al final la siguiente línea:

host all all 192.168.1.4 255.255.255.0 md5

Si necesita que cualquier usuario (usuario de base de datos autentificándose, claro) se conecte por medio de cualquier dirección IP, agregue al final la siguiente línea:

host all all 0.0.0.0 0.0.0.0 md5

Si necesita que un usuario determinado se conecte a una base de datos determinada por medio de una dirección IP en especifico, agregue al final la siguiente línea:

host MyDataBase MyUser 192.168.1.4 255.255.255.0 md5

Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto:

wily@wily:~$ sudo /etc/init.d/postgresql-8.2 restart

Permitir el acceso a posgres de nuestro usuario:
editamos el archivo;

gedit /etc/postgresql/8.3/main/pg_hba.conf

y ponemos las siguientes lineas

# Database administrative login by UNIX sockets
#local all postgres trust (comentar esta linea)
local all all trust (agregar esta linea)

# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0 0.0.0.0 md5 (agregar esta linea)

Instalar Postgresql en Ubuntu 9,04

Lo primero que necesitamos hacer es descargar los paquete que vamos a utilizar para la instalación de los paquetes:

wily@wily:~$ sudo aptitude install postgresql-8.3 postgresql-client-8.3 pgadmin3

Por razones de seguridad estableceremos la nueva contraseña al usuario del sistema creado por PostgreSQL:

wily@wily:~$ sudo passwd postgres

Cambiar los privilegios de acceso al shell del usuario postgres con el siguiente comando:

wily@wily:~$ sudo vipw

Y cambiamos el shell del usuario postgres de "/bin/false" a "/bin/bash". Luego salimos grabando con escape ":wq". Para verificar si la instalación fue

satisfactoria accedemos a la shell del servidor de bases de datos:

wily@wily:~$ sudo su postgres -c "psql template1"

Si pudimos acceder a la base de datos no saldra un mensaje como esto:

wily@wily:~$ sudo su postgres -c "psql template1"

Bienvenido a psql 8.3.8, la terminal interactiva de PostgreSQL.
Teclee: \copyright para ver los términos de distribución
\h para ayuda sobre órdenes SQL
\? para ayuda sobre órdenes psql
\g o punto y coma («;») para ejecutar la consulta
\q para salir

template1=#

Si el acceso ha sido satisfactorio cambiamos la contraseña al usuario predeterminado del servidor de bases de datos:

template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Te saldrá el siguiente mensaje confirmando la operación:

ALTER ROLE

Sal de la shell del servidor de bases de datos con el comando \q :
template1=# \q