Tuto pour l’installation d’un serveur de fax

  • Contraite : Serveur, carte modem et ligne fax
  • Système d’exploitation : Ubuntu 14.04 LTS
  • Source : http://alternsofts.blogspot.fr/2014/09/tutoriel-hylafax.html
  • Etat : Terminé

Plan

Plan_FAX

Tutoriel HylaFAX et Avantfax

 Préambule

Avant toute installation, il faut vérifier si le modem série est bien reconnu par Debian. Voir dans les fichiers de log.

Installation des packages Debian.

# apt-get install hylafax-server ntp

Paramétrage du modem
Il nous faut lancer :

#faxsetup
HylaFAX configuration parameters are:

[1] Init script starts faxq:            yes
[2] Init script starts hfaxd            yes
[3] Start old protocol:                 no
[4] Start paging protocol:              no
Are these ok [yes]?
Répondre : Yes
You do not appear to have any modems configured for use.  Modems are
configured for use with HylaFAX with the faxaddmodem(8) command.
Do you want to run faxaddmodem to configure a modem [yes]?
Répondre : Yes

Serial port that modem is connected to [ttyS0]?
Répondre ttySO
Country code [1]?
répondre 33

Area code [415]?
Pour notre région , répondre 0

Phone number of fax modem [+1.999.555.1212]?
Répondre 0241966873
Local identification string (for TSI/CIG) [« NothingSetup »]?
Répondre
Long distance dialing prefix [1]?
Répondre 00
International dialing prefix [011]?
Répondre 00

Débogage

#apt-get install minicom

#minicom -b 9600 -o -D /dev/ttyS0

Les commandes

fax en attentes
#faxstat -afs

Fax reçus
#faxstat -r

Fax en envoi
#faxstat -s

Fax envoyés
#faxstat -d

Envoyé un fax
#sendfax -n -d 0241966861 document.txt

Supprimer un fax
#faxrm -a <JID>

 AvantFax

Avantfax est une interface de gestion de fax Web.

Installation

#apt-get install apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libsqlite3-0 php5-cli php5-common mysql-server imagemagick libtiff4-dev netpbm libnetpbm10-dev libungif-bin libungif4-dev sudo php-mail php-mail-mime php-file php-db php5-mysql psutils wdiff rsync postfix

#pear channel-update pear.php.net
#pear upgrade-all
#pear install Mail Net_SMTP Mail_mime MDB2_driver_mysql

Paramétrage

#chmod 0770 avantfax/includes/templates/admin_theme/templates_c/ #avantfax/includes/templates/admin_theme/cache/ #avantfax/includes/templates/main_theme/templates_c/ #avantfax/includes/templates/main_theme/cache/

#chmod 0755 avantfax/includes/faxcover.php avantfax/includes/faxrcvd.php #avantfax/includes/notify.php avantfax/tools/update_contacts.php avantfax/tools/faxcover.php #avantfax/includes/avantfaxcron.php avantfax/includes/dynconf.php

#cp avantfax/includes/local_config-example.php avantfax/includes/local_config.php

#echo « www-data: apache » >> /etc/hylafax/hfaxd.conf

#echo « CoverCmd:         /var/www/includes/faxcover.php » >> /etc/hylafax/sendfax.conf

cat >> /etc/hylafax/hyla.conf << EOF
#
## JobFmt for AvantFAX
#
JobFmt: « %-3j %3i %1a %15o %40M %-12.12e %5P %5D %7z %.25s »
EOF

#mv avantfax /var/www
#chown -R www-data.www-data /var/www
#chmod -R 0770 /var/www/tmp /var/www/faxes
« chown -R www-data.uucp /var/www/tmp /var/www/faxes

# DISABLE SELINUX FOR APACHE
# echo « Disabling SELinux for Apache »

# setsebool -P httpd_disable_trans 1

cat >> /etc/apache2/sites-enabled/000-default << EOF

<VirtualHost *:80>
DocumentRoot /var/www
ServerName fax.toto.fr
ErrorLog logs/avantfax-error_log
CustomLog logs/avantfax-access_log common
</VirtualHost>
EOF

Mail vers FAX

Serveur de messagerie

#apt-get install postfix

Le  fichier « /etc/postfix/main.cf »

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA’s job.
append_dot_mydomain = no
# Uncomment the next line to generate « delayed mail » warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = fax01.toto.fr
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydomain = toto.fr
mydestination = fax01.toto.fr, localhost.toto.fr, localhost
relayhost = smtp.toto.fr
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 150.0.0.0/16
mailbox_command = procmail -a « $EXTENSION »
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
transport_maps = hash:/etc/postfix/transport
fax_destination_recipient_limit = 1

Le fichier « /etc/postfix/master.cf »

fax       unix  –       n       n       –       1       pipe
flags= user=faxmaster argv=/usr/local/bin/myattachement.pl

En cas de problème avec le script, la ligne du dessus peut être réactivée.

Le programme « myattachement.pl »

Ce programme permet d’extraire la pièce jointe d’un message  et de l’envoyer au destinataire. Car les utilitaires fournis envoyaient le corps du message même si celui-ci était vide.En cas de problème, il faut activer le mode debug à 1 dans le fichier.

#!/usr/bin/perl -w

##
## Auteur : Arnaud Champion
## Version : 1.0.0

#use strict;
#use warnings;
use MIME::Parser;
use MIME::Entity;
use MIME::Body;
use Sys::Syslog qw( :DEFAULT setlogsock);
use Fax::Hylafax::Client qw(sendfax);

### FONCTION DE LOG
sub logger{
$user = $ENV{‘USER’};
setlogsock(‘unix’);
openlog($0, »,’user’);
syslog(‘info’, « added $user $_[0] « );
closelog;
}

$dbg = « 1 »;

#Liste des PJ autorisees
my @attypes= qw(
application/pdf
);

## Instanciation Objet
my $parser = new MIME::Parser;

### Dossier temporaire
$parser->output_under(« /tmp »);

#Parser
$entity = $parser->parse(\*STDIN);

my $error = ($@ || $parser->last_error);

#get email headers
my $header = $entity->head;
$to = $header->get(‘To’);

#Destinataire
chomp($to);
my @value = split(‘@’,$to);
$telephone=$value[0];
$path_temp = $parser->output_dir();

#Variable de test
$checkTypePj = 0;
$checkNbPj = 0;
my $bhpath = «  »;

#Le corps du Chri .. message
if ($entity->parts > 0){

if( $dbg eq « 1 »){
&logger(« Fonction parsing du message OK »);
}

for ($i=0; $i<$entity->parts; $i++){

$subentity = $entity->parts($i);

foreach $x (@attypes){
if ($subentity->mime_type =~ m/$x/i){
my $bh = $subentity->bodyhandle;
#Path de la PJ
$bhpath = $subentity->bodyhandle->path;
#print $bhpath. »\n »;
$checkTypePj = 1;
$checkNbPj = $checkNbPj + 1;
}
}
}
}

### CONTROLES
# Si Pas de PJ
if ( $checkTypePj !=1 )
{
#Message dans dbg
if( $dbg eq « 1 »){
&logger(« Pas de piece jointe pour $telephone »);
}
}

if ( $checkNbPj > 1 )
{
#Message dans dbg
if( $dbg eq « 1 »){
&logger(« Fonction nombre de piece jointe invalide pour $telephone »);
}
}

#C’est OK on converti et on envoie
# Le nombre piece et bon et le type est bon
if (( $checkNbPj == 1) && ( $checkTypePj == 1  ))
{
$path_pdf=$bhpath;
$path_ps=$path_temp. »/ ».$telephone. ».ps »;

#Message dans dbg
if( $dbg eq « 1 »){
&logger(« Conversion de la piece jointe pour $telephone »);
}

#Conversion
$conversion =  « /usr/bin/pdf2ps $path_pdf $path_ps »;
system $conversion;

#Envoie
$commandes =  « /usr/bin/sendfax -n -d $telephone $path_ps »;

#Message dans dbg
if( $dbg eq « 1 »){
&logger(« Envoi du Fax & $telephone »);
}

system $commandes;
}

#Debug
#$entity->dump_skeleton;
eval { $entity = $parser->parse(\*STDIN) };
$parser->filer->purge;

#Sortie standard
exit 0;