Sei sulla pagina 1di 6

CP pensareprogettareprogrammare n.

135 maggio 2004

Wi-Fax: comunicare dal divano


di Diego Fantoma
` Un PC anche vetusto migliora la qualita della vita potendo divenire uno strumento da relazioni esterne gestibile via web tramite Wi-Fi

Diego Fantoma Lavora presso la Facolta di Psicologia dellUni` versita di Trieste come webmaster e sistemista su server Sun. Operativo nel settore dal ` 1988 si e occupato di molti aspetti dellinformatica applicata tra cui graca, audio e video per dirigersi poi verso reti e sistemi unix. ` E fondatore del Linux User Group di Trieste

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomedia


Infomedia
` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH

For copyright information about the contents of Computer Programming, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2004 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2004 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di Computer Programming sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2004 Infome` dia e rilasciato con Licenza Creative Commons 2.5 BYNC-ND. Il contenuto Turing Club e 2004 Turing Club ` e rilasciato con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

FOCUS

Office Automation

Wi-Fax: comunicare dal divano


Un PC anche vetusto migliora la qualit della vita potendo divenire uno strumento da relazioni esterne gestibile via web tramite Wi-Fi
di Diego Fantoma

o visto cose che voi umani non potete nemmeno immaginare. La pigrizia di un informatico, per esempio. Che senso ha il possesso di un computer portatile se non possiamo accedere alla rete o inviare fax comodamente distesi sul divano, senza fili di troppo che impicciano? Ancora una volta Linux viene in nostro aiuto, su un sistema non recentissimo: Pentium 200 MMX con 64 MB di memoria e 4GB di disco, dotato di schede Wi-Fi NetGear MA311PCI ed una semplice Ethernet e modem fax seriale da 14Kb. Il proposito iniziale di orientarsi al Wi-Fi con il proprio portatile anche per inviare fax diventa il pretesto per mostrare come integrare diverse tecnologie per trovare una soluzione altrimenti costosa su un hardware performante. In questo modo si risolveranno sostanzialmente due diversi problemi: laccesso ad Internet tramite Wi-Fi e linvio dei fax sfruttando la rete senza fili. Sotto questottica il progetto articolato, richiedendo diversi script per eseguire tutte le operazioni, ma rappresenta un punto di partenza per implementare nuovi servizi di comunicazione.

DEVICE=eth1 BOOTPROTO=static IPADDR=192.168.100.100 NETMASK=255.255.255.0 NETWORK=192.168.100.0 BROADCAST=192.168.100.255 ONBOOT=yes MII_NOT_SUPPORTED=no WIRELESS_MODE=Ad-hoc WIRELESS_ESSID=miarete WIRELESS_ENC_KEY=ABCD-EF01-23

RIQUADRO 1 Configurazione della scheda Wi-Fi NetGear


MA311PCI

Descrizione del funzionamento


Il primo passo da risolvere porre in comunicazione la rete Wi-Fi con la Ethernet cui sono collegati gli altri computer. In sostanza il server che andremo ad installare user le IPTables [1] per comportarsi come un router tra le due interfacce di rete. Diverso invece il problema di gestire il server fax, basato sul blasonato HylaFax [2], attraverso il web grazie al solito Apache [3] con PHP [4]. Una cosa che volutamente si evitata in questo progetto la possibilit di invio dei documenti tramite posta elettronica e questo principalmente per due motivi: innanzitutto installare un server di posta richiede lattivazione di campi MX nei DNS dei provider e la gestione di redirect o IP fissi alla connessione ad Internet; secondariamente, visto il problema dello spam dilagante, per configurare a dovere un server di posta sarebbe necessario attuare un gran numero di misure a garanzia della sicurezza. Daltra parte uno dei risultati di questo sistema la creazione di file Acrobat PDF

quali standard per i fax che, ricordiamo, sono immagini in bianco e nero a bassa risoluzione, con un requisito effettivo di byte piuttosto leggero; questo consente di allegarli ai messaggi di posta direttamente dal client portatile. Concretamente parlando, gli script verificheranno loccorrenza di eventi quali la stampa di fax tramite Samba [5], la richiesta di invio e la conversione delle ricezioni in formati adatti al web, che rappresenta il supporto dellinterfaccia di gestione.

Il progetto articolato,
richiedendo diversi script per eseguire tutte le operazioni, ma rappresenta un punto di partenza per implementare nuovi servizi di comunicazione
Installazione

Diego Fantoma

dfantoma@infomedia.it

Lavora presso la Facolt di Psicologia dellUniversit di Trieste come webmaster e sistemista su server Sun. Operativo nel settore dal 1988 si occupato di molti aspetti dellinformatica applicata tra cui grafica, audio e video per dirigersi poi verso reti e sistemi unix. fondatore del Linux User Group di Trieste

Usando Mandake 9.2 tutte le opzioni sono gi predisposte e lhardware viene riconosciuto automaticamente: uninstallazione di base pi che sufficiente, ponendo attenzione che vengano installati Apache con PHP, HylaFax client e server, libTiff, IPTables, Ghostscript, wget e Samba con tutte le dipendenze necessarie, tra cui lmgetty per la gestione del modem, eventualmente scaricabili da RPMFind.net [6] [Riquadro 3]. 45

Computer Programming n. 135 - Maggio 2004

FOCUS
Per prima cosa bisogna procedere a configurare la rete Ethernet in modo che si possa accedere a dei siti per installare eventuali software aggiuntivi e per inviare le email. Come di consueto il modo migliore quello di editare il file /etc/sysconfig/network-scripts/ifcfg-ethx dove x corrisponde alla scheda Ethernet, determinabile lanciando ifconfig a, e modificandolo in modo che abbia i giusti parametri. Si provi quindi a effettuare un ping o un traceroute su un indirizzo conosciuto, ad esempio un sito web, e a vedere se la rete funziona regolarmente. A questo punto si tratta di configurare la scheda Wi-Fi in modalit Ad-Hoc, attribuendo un nome convenzionale come SSID usando nuovamente il file /etc/sysconfig/network-scripts/ifcfg-ethy e inserendo una chiave crittografica composta da 10 cifre esadecimali nella forma WIRELESS_ENC_KEY=XXXX-XXXX-XX assieme agli altri parametri [Riquadro 1]. Convenientemente adotteremo per la rete Wi-Fi una classe di indirizzi diversa dallaltra e possibilmente riservata (es. 192.168.x.y). Allo stesso modo si tratter di configurare la scheda Wi-Fi sul portatile, con stessi SSID e chiavi, dandole un indirizzo IP nella stessa classe del server. Una volta configurata la rete e testata con il solito ping, si pu procedere a configurare HylaFax.
mgetty-1.1.30-4mdk.i586.rpm mgetty-contrib-1.1.30-5mdk.i586.rpm libhylafax4.1.1-4.1.8-2mdk.i586.rpm libhylafax4.1.1-devel-4.1.8-2mdk.i586.rpm hylafax-4.1.8-2mdk.i586.rpm hylafax-server-4.1.8-2mdk.i586.rpm hylafax-client-4.1.8-2mdk.i586.rpm ghostscript-7.07-0.12mdk.i586.rpm

RIQUADRO 3 Software scaricabili da RPMFind.net

Configurazione delle IPTables


Il nostro sistema si trova ora nella condizione di poter comunicare verso la rete esterna o verso quella interna. Il problema riuscire a far dialogare le due reti tra loro. In questo ci aiutano le IPTables, configurate per fare da router sfruttando le loro capacit di network address translation (NAT). Sotto questottica permetteremo al portatile di iniziare connessioni verso lesterno e non viceversa, per ragioni di sicurezza, modificando il suo indirizzo IP in quello del server che stiamo installando. Bisogner naturalmente consentire il corretto dialogo con i DNS. In definitiva nel file /etc/init.d/iptables aggiungeremo, dopo la riga touch /var/lock/subsys/iptables:
echo 1 > /proc/sys/net/ipv4/ip_forward modprobe iptable_nat modprobe ip_conntrack_ftp modprobe ip_nat_ftp

-n: ANTEPOSTO a ciascuna singola destinazione (-d) non genera la cover sheet es: -d xy -n -d wz invia la cover solo al primo -a: indica il tempo di invio ed indicato in questa forma: [HH:MM [AM|PM]|now ] [ +N period | month DD | dayofweek ] dove: period deve indicare il tipo di intervallo: minute, hour, day, week, month. month rappresentato con le prime tre del mese: jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec. dayofweek rappresentato dalle prime tre dei giorni mon, tue, wed, thu, fri, sat, sun. -A: archivia il messaggio inviato -c: passa al generatore di coversheet i commenti da inserire -f: campo from della cover -i: usa il messageid -k: cerca di mandare il fax entro il tempo indicato (es. -k `now + 3 hours) -l: low resolution -m: fine resolution -r: campo regarding della cover sheet -t: tries, numero di tentativi di invio per ciascuna pagina -T: num di tentativi di redial -W: campo fax-number della cover -x: campo destination company della cover -X: campo sender company della cover -y: campo destination location della cover -Y: campo sender location della cover -z: indica il file da cui prendere lelenco delle destinazioni

iptables -t nat -A POSTROUTING -o ethx -s ip.rete.wifi.0/24 -d 0/0 -j MASQUERADE iptables -A FORWARD -t filter -i ethy -m state state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -t filter -i ethx -m state state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p udp -o ethx dport 53 sport 1024:65535 -j ACCEPT iptables -A INPUT -p udp -i ethx sport 53 dport 1024:65535 -j ACCEPT

in cui le prime quattro righe consentono di abilitare il routing e di attivare il NAT, seguite dalla riga che effettua il NAT vero e proprio (si noti che lIP della rete WiFi deve essere indicato sostituendo uno zero allultimo byte) e quindi con due righe che limitano linizio delle connessioni TCP nella sola direzione uscente. Le ultime due righe permettono il transito delle richieste dei DNS. Quindi riavvieremo le IPTables: /etc/init.d/iptables restart e verificheremo che il portatile riesca regolarmente a collegarsi ad esempio ad una pagina web.

Configurazione di HylaFax
Assicurandosi che il modem sia regolarmente acceso e collegato, si tratter di configurare il server Fax. La procedura abbastanza semplice: bisogna lanciare faxsetup e rispondere alle varie a volte imbarazzanti domande. Tralasciandone la maggior parte, che va bene come default, si ponga attenzione a inserire come dial prefix gli zeri per comporre le interurbane e le internazionali e a porre come mask nella creazione dei file il valore 644 (viene proposto 600) in modo da avere accesso alla lettura. Una volta terminata la configurazione del server vero e proprio, viene richiesto lavvio della configurazione specifica dei modem: la procedura simile, ricordando che la porta seriale 1 viene vista come ttyS0 e la porta 2 come
Computer Programming n. 135 - Maggio 2004

RIQUADRO 2 Opzioni del programma di invio


sendfax

46

Office Automation

LISTATO 1

Script /etc/init.d/hylafax-addenda

mkdir /fax chmod 755 /fax mkdir /fax/web chmod 777 /fax/web ln -s /fax/web /var/www/html/fax

#! /bin/sh start() { /usr/sbin/faxmodem ttySx FAXGETTY=`ps -A|grep faxgetty|wc -l` if [ $FAXGETTY -eq 0 ] then /usr/sbin/faxgetty ttySx & fi } stop() { FAXGETTY=`ps -A|grep faxgetty|wc -l` if [ $FAXGETTY -gt 0 ] then killall faxgetty fi return 1 } restart() { stop start } case $1 in start) start ;; stop) stop ;; restart|reload) restart ;; *) gprintf Usage: %s { start | stop | restart }\n $0 exit 1 ;; esac exit 0

Script di gestione
Il sistema cos descritto non molto pratico da usarsi come server fax, per cui conviene adottare una serie di misure che consentano trasparenza nelluso delle risorse. Si ricorre quindi alla creazione di una stampante virtuale, che passi le proprie code a uno script in grado di fornire uninterfaccia utente decorosa per la richiesta dei destinatari dei fax e che provveda a inviare i fax. Si utilizzeranno per questo Samba per la gestione della stampante, degli shell script per leffettuazione del lavoro di invio, e pagine web php per la gestione dellinterfaccia. Per questioni di praticit gli script potranno stare nella directory /fax prima creata. Si badi a dar loro sufficienti permessi di esecuzione in modo che Samba possa scrivere con lutenza con la quale ci si collegher dal computer portatile. Il primo script smbfax serve proprio a ricevere le code di stampa da Samba e a invocarne la conversione convert in un formato pi comodo per gli usi futuri. Il file crea un log (smb.log) in cui indica le operazioni effettuate. Un discorso diverso riguarda invece la ricezione dei fax: senza andare a toccare HylaFax, pi conveniente utilizzare uno script schedulato ad esempio ad ogni minuto schedule che verifichi leventuale presenza di nuovi fax nella directory della coda del server e ne produca la necessaria conversione incoming.

ttyS1. Infine bisogner copiare il file /etc/init.d/hylafax-server nelle cartelle /etc/rc2.d, /etc/rc3.d, /etc/rc5.d in modo che il server parta automaticamente allavvio. Una nota curiosa che queste versioni di HylaFax richiedono, affinch le code vengano smaltite, che vengano impartiti due comandi specifici per cui, al fine di farli avviare alla partenza del computer, conviene creare il file /etc/init.d/hylafax-addenda, copiandolo nelle solite directory di avvio, contenente lo script di inizializzazione (Listato 1) dove faxmodem ttySx il comando che attiva la trasmissione delle code al modem connesso alla porta ttySx e faxgetty abilita la ricezione automatica nello stesso modo. Simpaticamente si possono in questo modo configurare due modem distinti per ricevere o trasmettere o non abilitare una delle direzioni. Si pu a questo punto testare linvio creando un file di testo di qualche riga e passandolo al comando:
sendfax -n -d numerofax filedaspedire

Si utilizzi il driver della


Apple LaserWriter 16/600 PS, che un perfetto generatore di postscript standard
Una piccola annotazione su questo script: poich si suppone che la schedulazione sia ad intervalli di tempo in generale inferiori al tempo di ricezione completa di un fax con molte pagine, indispensabile che il programma rilevi non solo i nuovi file creati ma che ne monitorizzi le dimensioni, in modo da accorgersi se in realt non si stiano ricevendo altre pagine. La schedulazione ad ogni minuto si effettua inserendo la riga:
* * * * * /fax/schedule >/dev/null 2>&1

dove lopzione -n impedisce linvio della cover page. Molte altre opzioni possono essere utilizzate per configurare a proprio modo le cover o altre funzionalit (Riquadro 2).

Apache
In linea di massima non servono particolari configurazioni al server web che funziona regolarmente dopo una normale installazione. Per verificarlo sufficiente collegarsi con un browser allindirizzo del server (Figura 1). Per gestire le interfacce utente per linvio e la ricezione dei fax creeremo una directory che sia sfruttabile da Apache:
Computer Programming n. 135 - Maggio 2004

nella tabella cron usando il comando crontab e che invoca leditor VI per aggiornarla. Lo script di conversione chiama Ghostscript e le utilities libTiff per creare, nella directory indicata come terzo parametro, i file pdf e jpg utili allinterfaccia web. importante notare che il parametro -r passato a Ghostscript indica la risoluzione da adottare: per i fax in risoluzione normale deve essere pari a 98 dpi, mentre per la risoluzione fine deve essere 196. Poich a volte il postscript non perfettamente convertito direttamente in PDF a causa di possibili 47

FOCUS
FIGURA 1
Pagina web iniziale del server preinstallato con Mandrake 9.2

Office Automation

Anche in questo caso bisogner copiare il file /etc/init.d/smb nelle cartelle /etc/rc2.d, /etc/rc3.d, /etc/rc5.d in modo che il server parta automaticamente allavvio. Esplorando dal portatile le risorse di rete dopo aver avviato Samba si dovrebbe riuscire a configurare la stampante condivisa chiamata fax. Per farlo si utilizzi il driver della Apple LaserWriter 16/600 PS, che un perfetto generatore di postscript standard. Conformemente alla configurazione della propria rete, potr essere necessario intervenire sulle impostazioni di password criptata o meno di Samba. Installata la stampante virtuale si pu provare a inviarle una pagina di prova e verificare che i nostri script funzionino a dovere, osservando in /fax la presenza del file .ps creato e in /fax/web il file nomeutente.out.lst e la directory contenente le sue componenti pdf e jpg.

incompatibilit con i font, si preferito effettuare una doppia trasformazione prima in immagine e poi in formato Acrobat. Le pagine inoltre vengono esplose in singoli file in modo da produrre i preview e le thumbnail per il web. Poich il file originale in formato postscript e viene mantenuto nella directory /fax, non raggiungibile via web, non viene modificata la sua risoluzione. Un ultimo script, schedulato assieme al precedente sending verifica se vi sono richieste di invio fax dal web. Molto semplicemente la pagina PHP crea il file pending.user.nomedelfilePS che viene letto e riconosciuto e quindi passato a sendfax con le opportune opzioni.

Il codice per linterfaccia web


Dal momento che tutto il lavoro di conversione affidato agli script, il lavoro che il web server ha da compiere abbastanza semplice: presentare i fax in uscita o ricevuti in un formato leggero e standard e richiedere i destinatari per linvio dei fax. Una volta richieste opportune credenziali di autorizzazione, il primo script, index.php, elenca sia gli uscenti che gli entranti. Due altre pagine PHP consentono di visualizzare i preview in JPG preview.php e di richiedere i destinatari per linvio dei fax send.php che avverr grazie allo script visto prima. Questo script elenca i numeri dei destinatari nelloggetto <textarea> grazie ad un minimo di javascript che facilita le operazioni di compilazione. Tutti questi script devono avere la possibilit di accedere alla directory /fax/web con lutente sotto cui gira Apache, in modo da poter leggere e scrivere file.

Configurazione di Samba
Samba un server di protocollo NBT (NetBIOS over TCP) che consente la condivisione dischi e stampanti in ambiente Microsoft, supponendo che di questa famiglia sia il sistema operativo del portatile. Il file di configurazione /etc/samba/smb.conf dovr essere opportunamente modificato in modo che sia funzionale alle nostre esigenze. In particolare andremo a modificare le voci: workgroup = nome_del_gruppo_di_lavoro netbios name = nome_di_rete_del_computer load printers = yes hosts allow = ip.rete.ethernet. ip.rete.wifi. map to guest = vostro_account security = user domain logons=no

Conclusioni
A dispetto di molti prodotti pi onerosi, il progetto, se da un lato manca di molte raffinatezze dellinterfaccia utente, dallaltro raggiunge lo scopo prefissato; la nostra macchina diventa un abstraction layer incentrato sul servizio erogato pi che sullinfrastruttura adottata. Il fatto poi che siano utilizzati protocolli Samba e web per linterazione, ossia protocolli standard, rende il prodotto finale indipendente dal sistema operativo del client, tenuto conto che possibile anche configurare la stampante virtuale in modo che sia vista sotto rete Apple o Unix in modo analogo a quanto fatto con Samba. Volendo proseguire nel cammino iniziato, sar possibile integrare il sistema con una gestione di caselle vocali o con una rubrica condivisa in SQL, sempre sfruttando il web come interfaccia.

e aggiungeremo la configurazione della stampante virtuale per inviare i fax:


[fax] comment postscript printable writable public = Fax = yes = yes = no = yes

RIFERIMENTI
[1] [2] [3] [4] [5] [6] http://www.netfilter.org http://www.hylafax.org http://www.apache.org http://www.php.net http://www.samba.org http://rpmfind.net

print command = ( /fax/smbfax %I %s %U %m; rm %s ) &

Dopodich bisogner aggiungere un utente Linux (voi) e configurarlo sotto Samba: 48 useradd nomeutente passwd nomeutente smbpasswd -a nomeutente smbpasswd -e nomeutente

CODICE ALLEGATO
ftp.infomedia.it
WiFax

Computer Programming n. 135 - Maggio 2004