Table of Contents
HylaFAX server
Comandi utili
Quando c'è un server HylaFAX funzionante si possono usare i seguenti comandi per testare il funzionamento:
faxstat -v
Mostra lo stato del sistema fax. Alcune informazioni sono generate dai file in /var/spool/hylafax/status/
, se ci sono informazioni sballate fermare HylaFAX, cancellare i file e riavviare HylaFAX.
faxstat -v -s
Mostra lo stato della send queue.
faxrm -a -v JobID
Rimuove un job dalla send queue. Richiede la password di amministratore (-a), nel caso nostro una password qualunque.
faxalter -A -v -a now JobID
Riscehdula per adesso il fax in coda. Richiede la password di amministratore (-A), nel caso nostro una password qualunque.
sendfax -D -f info@rigacci.fax -n -m -d 0555123456 /etc/passwd
Invia il file /etc/passwd
al numero indicato (-d) senza la cover page (-n) in alta risoluzione (-m), invia una mail di notifica in ogni caso (-D) all'indirizzo specificato (-f).
faxanswer
Risponde ad una chiamata fax (utile se non e' attivo l'auto answer).
Funzionamento
I processi che interessano HylaFAX sono:
faxq | Gestisce la coda dei fax in uscita |
---|---|
hfaxd | Accetta i fax da spedire dai client |
faxgetty | Riceve i fax in arrivo |
A partire da Debian Etch vengono avviati o fermati tutti tramite /etc/init.d/hylafax {start|stop}
, in precedenza invece faxgetty
andava abilitato tramite /etc/inittab
. Il demone hfaxd
si mette in ascolto sulla porta 4559 TCP e si può
provare un telnet sopra.
Installazione Debian Squeeze
Le notifiche generate dal server HylaFax vengono inviate per posta elettronica, l'indirizzo predefinito sia per il destinatario che per il mittente (vedi variabili TOADDR
e FROMADDR
più avanti) è FaxMaster
.
Un indirizzo non qualificato (come FaxMaster
) viene eventualmente qualificato dal sottosistema di posta elettronica. Con Exim4 ad esempio si utilizza il contenuto di /etc/mailname
.
Fare attenzione che l'alias non qualificato FaxMaster
eventualmente contenuto in /etc/aliases
non viene preso in considerazione come destinatario: il sottosistema di posta qualifica il destinatario prima di
prendere in considerazione gli alias.
Se si desidera che una copia di tutti i fax ricevuti venga inviata come allegato di posta elettronica (in aggiunta ai normali messaggi di notifica), è sufficiente definire la variabile SENDTO
nel file di configurazione /etc/hylafax/FaxDispatch
.
Ecco alcune variabili che è possibile definire nel file per controllare mittente, destinatario, indirizzo di inoltro e formato dell'allegato:
TOADDR=FaxMaster FROMADDR=FaxMaster SENDTO="fax@rigacci.org" FILETYPE=pdf
Problemi con i font GhostScript
Con Debian Woody per una configurazione iniziale del sistema era necessario eseguire:
faxsetup -with-PATH_GSRIP=/usr/bin/gs
A causa di un bug nella routine che cerca i font ghostscript, al termine di faxsetup si deve cambiare manualmente /etc/hylafax/hyla.conf
impostando:
FontMap: /var/lib/defoma/gs.d/dirs/fonts FontPath: /usr/share/fonts/type1/gsfonts
La correzione di cui sopra è fondamentale anche per usare sendfax(1)
altrimenti si incorre facilmente nel messaggio di errore:
textfmt: No font metric information found for "Courier-Bold".
Configurazione di un nuovo modem: faxaddmodem
Per aggiungere un modem fax al pool di dispossitivi usati da HylaFAX si esegue faxaddmodem
. Questi sono i parametri non di
default specificati (vedi NOTA sotto):
Serial port: ttyS1 CountryCode: 39 AreaCode: "" FAXNumber: +39.0574.695038 LongDistancePrefix: "" InternationalPrefix: 00 DialStringRules: etc/dialrules.europe ServerTracing: 0x08501 SessionTracing: 0x08501 RecvFileMode: 0660 LogFileMode: 0640 DeviceMode: 0660 RingsBeforeAnswer: 5 SpeakerVolume: medium GettyArgs: "-h %l dx_%s" LocalIdentifier: "LINUX.FAX" TagLineFont: etc/lutRS18.pcf TagLineFormat: "%d/%m/%Y %H:%M:%S|%%l %%n|Pagina %%P di %%T" PercentGoodLines: 80 MaxConsecutiveBadLines: 15 MaxRecvPages: 25
I parametri specifici relativi all'hardware del modem dovrebbero essere rilevati automaticamente e quindi si lascia tutti i parametri di default. Il risultato è la creazione dei file di configurazione /etc/hylafax/config.ttyS1
e /etc/hylafax/config
.
Al restart HylaFAX cerca tutti i file /etc/config.<device>
e lancia un'istanza di faxgetty
su di esso.
NOTA: pare impossibile specificare la stringa vuota per alcuni parametri come invece il manuale lascerebbe intendere: viene in tal caso usato il default proposto. Attenzione anche a modificare manualmente il file config.ttyS1
, se poi viene eseguito nuovamente faxaddmodem
alcune stringhe non vengono preservate correttamente. Ad esempio si sono impostate manualmente le due righe seguenti per avere una tagline all'inizio di ogni pagina fax trasmessa:
TagLineFont: etc/lutRS18.pcf TagLineFormat: "Da: %%l|%d/%m/%Y %H:%M:%S|Pagina %%P di %%T"
alla successiva esecuzione di faxaddmodem
la seconda riga è stata troncata al primo spazio.
Formato pagina (papersize)
In generale la dimensione della pagina fax viene determinata dal client HylaFax. Ecco ad esempio come viene determinata da un client che utilizza OpenOffice ed il comando sendfax
.
- OpenOffice ha una stampante di sistema HylaFax configurata tramite
/usr/lib/openoffice/program/spadmin
, nel file di configurazione/etc/openoffice/psprint.conf
è memorizzato il comandoCommand=sendfax -h fax.rigacci.net -n -m -D -f "${USER}@rigacci.org" -d (PHONE) (TMP)
- Il comando
sendfax
sceglie il formato cartadefault
indicato nel file/etc/hylafax/pagesizes
. - Si potrebbe ignorare il default di sistema dei client HylaFax aggiungendo l'opzione
-s a4
al comandosendfax
. - Attenzione ad altri programmi di impaginazione (non OpenOffice) che potrebbero scegliere il formato carta predefinito da
/etc/papersize
, configurabile conpaperconfig(8)
.
Se una pagina termina con solo spazio bianco, HylaFax la invia troncata, per far risparmiare carta al destinatario. Se si vuole modificare questo comportamento si può impostare in /etc/hylafax/config
(impostazione utilizzata da faxq
):
PageChop: none
Debug e file di configurazione
ServerTracing
Tracing dei processi quando non sono in conversazione con qualche device (fax, paging service provider, …). Comprende quindi l'inizializzazione dei modem, schedulazione delle operazioni, operazioni di manutenzione generale. Una volta fatto il setup iniziale si dovrebbe poter abbassare il ServerTracing al minimo.
SessionTracing
Questo parametro controlla il logging dei processi quando comunicano attivamente con un device remoto, ad esempio la comunicazione per inviare o ricevere un fax. In un ambiente di produzione questo tracing consente di diagnosticare errori di invio/ricezione.
Attivare il debug
Un livello di debug alto si ottiene con i seguenti parametri:
ServerTracing | 0x1AF0FF |
---|---|
SessionTracing | 0x1AF0FF |
che abilita il tracing di tutte queste operazioni:
1 (0x00001) Server Operation queue management and general operation 4 (0x00004) Modem Operations modem hardware manipulation 8 (0x00008) Modem Communications comands passed between host and modem 16 (0x00010) Timeouts timer operations 256 (0x00100) Server State Transitionsserver program state transitions 512 (0x00200) Queue Management job queue management 2048 (0x00800) Job Management low-level job management 16384 (0x04000) FIFO Messages inter-application messages 32768 (0x08000) Modem State Transitions modem state changes (down, busy, ready) 65536 (0x10000) Dial Rules dialstring rules parsing and execution 131072 (0x20000) Docq Changes document reference handling
I parametri possono essere messi in uno dei file di configurazione (SessionTracing
comunque non ha senso in /etc/hylafax/config
). Vedere più avanti quale è il più opportuno.
Tracciare un fax in uscita
A volte accade che un fax non esca dalla coda per lungo tempo. Con faxstat si vedono i JobID in coda:
faxstat -s HylaFAX scheduler on fax.rigacci.org: Running Modem ttyS0 (): Running and idle JID Pri S Owner Number Pages Dials TTS Status 5502 127 T Niccolo 0055232425 0:0 0:12 5503 127 T Niccolo 0055232425 0:0 0:12 5504 127 T Niccolo 00553232425 0:0 0:12
La terza colonna indica lo status del job, dalla manpage di faxstat(1)
:
T | Suspended job (not being scheduled). |
---|---|
P | Pending job (waiting for its time to send to arrive). |
S | Sleeping job (waiting for a scheduled timeout such as a delay between attempts to send). |
B | Blocked by concurrent activity to the same destination. |
W | Job waiting for resources such as a free modem. |
R | Job that is actively running. |
D | Job that is done and was a success. |
F | Job that failed to complete. |
Se non si vuole indagare troppo provare:
- Riavviare il servisio HylaFAX (
/etc/init.d/hylafax restart
) - Rischedulare il fax per l'invio immediato (
faxalter -A -v -a now JobID
)
Altrimenti un fax in uscita ha una sua entry nella sendq e un hard link al file postcript in docq:
cd /var/spool/hylafax less sendq/q<jobID> ls -l docq/doc*.ps.<jobID>
Verificare la riga tts (time to send job) del sendq, se è zero vuol dire che il fax è stato bloccato nella coda per qualche motivo. Utilizzare faxalter
per modificare la schedulazione.
Quando un fax è stato spedito, l'hard link docq/doc<docID>.ps.<jobID> dovrebbe essere rimosso. Se questo non avviene è un problema perché poi la procedura cron faxqclean trova il doppio link e si rifiuta di rimuoverlo. Bisogna rimuoverlo manualmente.
File di configurazione
HylaFAX™ servers processes are controlled by a collection of configuration files. There is a configuration file for the faxq scheduler process, etc/config, and one file for each process that uses a modem, etc/config.device. (The hfaxd process that implements the client-server protocols also has its own configuration file.)
/etc/hylafax/config | Configuration file for the faxq scheduler process. |
---|---|
/etc/hylafax/config.ttySN | Configuration file for each process that uses a modem on /dev/ttySN . |
/etc/hylafax/hfaxd.conf | Configuration for the hfaxd daemon that handles the client-server protocol. |
/etc/hylafax/hyla.conf | Configuration fot the hylafax client. |
Il parametro più importante per effettuare debug è ServerTracing, il suo valore è la combinazione (bitwise OR) dei seguenti valori:
1 (0x00001) Server Operation queue management and general operation 2 (0x00002) FAX/IXO Protocol T.30 facsimile protocol or IXO/TAP protocol 4 (0x00004) Modem Operations modem hardware manipulation 8 (0x00008) Modem Communications comands passed between host and modem 16 (0x00010) Timeouts timer operations 32 (0x00020) Modem Capabilities modem capabilities 64 (0x00040) HDLC Frames binary T.30 HDLC frames 128 (0x00080) Binary Modem I/O binary communication between host and modem 256 (0x00100) Server State Transitionsserver program state transitions 512 (0x00200) Queue Management job queue management 1024 (0x00400) Copy Quality copy quality checking of received facsimile 2048 (0x00800) Job Management low-level job management 4096 (0x01000) IXO Protocol low-level IXO protocol 8192 (0x02000) Config File Parsing unknown configuration file parameters 16384 (0x04000) FIFO Messages inter-application messages 32768 (0x08000) Modem State Transitions modem state changes (down, busy, ready) 65536 (0x10000) Dial Rules dialstring rules parsing and execution 131072 (0x20000) Docq Changes document reference handling
A seconda del file di configurazione dove viene specificato il parametro, cambia il significato:
/etc/hylafax/hfaxd.conf | Controlla le sessioni TCP client-server, non il dialogo con i modem sulle seriali |
---|---|
/etc/hylafax/config | Controlla il dialogo con i modem su tutte le linee seriali |
/etc/hylafax/config.ttyS* | Controlla il tracing specifico su questa linea seriale |
Il secondo parametro utile per il debug è SessionTracing, si compone in modo identico a ServerTracing e controlla il tracing del server mentre invia o riceve fax. Lo possiamo mettere in uno di questi file di configurazione:
/etc/hylafax/config.ttyS* | Controlla il tracing specifico su questa linea seriale |
---|
Vedere le man page di:
- /usr/share/man/man5/hylafax-config.5.gz
- /usr/share/man/man5/hylafax-server.5.gz
Esecuzione di script in ricezione e invio
Se si vuole eseguire degli script alla ricezione di un fax oppure in occasione delle notifiche (es. dopo l'invio), si possono predisporre degli script da eseguire al posto o prima di quelli predefiniti: faxrcvd
e notify
contenuti in /var/spool/hylafax/bin/
.
In /etc/hylafax/config.ttyS0
è possibile indicare lo script da eseguire in ricezione:
FaxRcvdCmd: /usr/local/bin/hylafax-faxrcvd
In /etc/hylafax/config
lo script eseguito durante le notifiche (es. invio):
NotifyCmd: /usr/local/bin/hylafax-notify
Vedere gli script originali per sapere quali sono i parametri ricevuti.
Controllo di accesso
Il demone hfaxd
risponde alle interrogazioni dei client, ad esempio per sapere quali sono i fax in coda di uscita. Viene effettuato un minimo di controllo di accesso in base al nome utente, all'host di provenienza ed eventualmente richiedendo una password. La configurazione è nel file /etc/hylafax/hosts.hfaxd
, ecco un esempio:
^.*@127\.0\.0\.1$:21:: ^.*@192\.168\.3\..*$:21::
I quattro campi separati dai due punti sono client:uid:passwd:adminwd
.
Il client
è un'espressione regolare che deve combaciare con login@host
, in questo caso si accettano tutti gli utenti da localhost 127.0.0.1 e dalla rete locale 192.168.3.*. Il secondo campo è il GID da utilizzare per impostare i privilegi del processo locale. Se il campo passwd
se è vuoto, non viene richiesta autenticazione. Se invece il campo adminwd
è vuoto non sarà possibile eseguire operazioni che richiedono privilegi di amministratore.
Server HylaFAX con firewall
Se sul server HylaFAX è in esecuzione un firewall tipo iptables che blocca le connessioni in INPUT, si possono verificare degli errori da parte dei client, ad esempio l'errore WSAETIMEDOUT di WHFC. Nel caso osservato c'erano dei tentativi da parte del client di aprire una connessione verso il server su porte effimere, che venivano bloccate:
kernel: DROP:IN=eth0 SRC=192.168.1.21 DST=192.168.1.1 DF PROTO=TCP SPT=1097 DPT=33407 WINDOW=16384 RES=0x00 SYN kernel: DROP:IN=eth0 SRC=192.168.1.21 DST=192.168.1.1 DF PROTO=TCP SPT=1109 DPT=33408 WINDOW=16384 RES=0x00 SYN
La connessione sulla porta 4559 infatti segue lo schema del protocollo FTP: dopo aver aperto la connessione sulla porta iniziale, lo scambio dati avviene su un'altra connessione aperta su porte diverse. Se viene attivata la modalità passiva è il client ad aprire la seconda connessione usando due porte effimere.
Forse conviene disattivare la modalità passiva, in modo che sia il server ad iniziare la seconda connessione verso il client.
Con iptables è sufficiente attivare il connection tracking del protocollo FTP sulla porta 4559:
insmod ip_conntrack_ftp ports=21,4559
Gateway email-fax
Si vuole mandare mail a indirizzi del tipo Mario.Rossi@555123456.fax e fare in modo che Exim converta tutto in fax e spedisca con HylaFax.
Nella configurazione di Exim si definisce un router che intercetta tutte le mail con dominio @NNNNNNNN.fax dove NNNNNNNN e' un numero costituito da cifre e dal segno “-” con max 25 cifre. Il router quindi chiama lo specifico transport.
/etc/exim4/conf.d/router/010_local-faxmail
# This router is used to operate a fax-mail gateway. An address # like "user@5551234567.fax" is sent as a fax using faxmail and HylaFax. # The <user> is used as the recipient (for composing the cover etc), # the fax nuber is extracted from the domain. # To avoid abuse, deny open relaying for *.fax domains! faxmail: driver = accept domains = \N^[0-9-]{1,25}\.fax$\N transport = faxmail
Si definisce quindi il transport che chiama il programma faxmail passando destinatario e numero del fax da chiamare:
/etc/exim4/conf.d/transport/10_local-faxmail
# This transport is used as a mail-fax gateway: do a direct # delivery calling faxmail and HylaFax, see man faxmail(1). faxmail: driver = pipe command ="/usr/bin/faxmail -d ${local_part}@${extract{1}{.}{$domain}} -n"