Поиск по этому блогу

понедельник, 5 октября 2009 г.

Настройка hylafax

Всем привет, вот настала необходимость заменить виндовый факс сервер на сервер со свободном ПО. После некоторых попыток Гугления, нашел среди прочих замечательный продукт – Hylafax.

Особенно  порадовало что входящие факсы он сохраняет в формате tif.

 

ЗАДАЧА:

Прием факсимильных сообщений, распечатка на принтер и сохранение файла на файл-сервере (smb) с определенной иерархией папок.  <месяцгод\число\часыминуты.tif>

Буду использовать пакеты:

Hylafax

Autofs (Для автоматического монтирования smbfs)

Sendmail (для пересылки уведомлений, предупреждений и полученных файлов)

Итак начнем:

Есть сервак с CentOS 5.3, скачиваем RPM пакет с офф сайта и ставим командой

yum localinstall <path_to_saved_rpm>, yum скачал одну зависимость и все установилось.

Далее идет настройка autofs:

Добавляем в /etc/auto.master

/mnt/share      /etc/auto.share                --timeout=60

cat /etc/auto.share:

vip     -fstype=cifs,credentials=/home/fax/vvvip.auth  :"//nb/fax$/FaxNBD"

Формат файла /home/fax/vvvip.auth следующий:

username=user

password=pass

В этом файле сохраняются учетные данные от samba сервера. К слову скажу, что долго не работало монтирование из – за того, что был неправильный синтаксис в файле /etc/auto.share, так что будьте внимательны).

Устанавливаем принтер на который распечатываются факсы:

Принтер с принт-сервером, модель HP Laser jet 4300n.

system-config-printer &

В появившемся окне создаем принтер, указываем IP адрес, называем его prvip(в моем случае), выбираем драйвер(я использую post script driver), и все.

Настраиваем hylafax.

Запускаем команду faxsetup, следуем всем инструкциям и вопросам, далее запустится команда faxaddmodem, там тоже все просто, когда закончили, то мой конфиг выглядит следующим образом:

[root@fax1 etc]# cat ./config.ttyS0

CountryCode:            7

AreaCode:               831

FAXNumber:              +7.831.000.00.00

LongDistancePrefix:     8

InternationalPrefix:    7

DialStringRules:        etc/dialrules

ServerTracing:          1

SessionTracing:         11

RecvFileMode:           0664

LogFileMode:            0660

DeviceMode:             0600

RingsBeforeAnswer:      1

SpeakerVolume:          off

GettyArgs:              "-h %l dx_%s"

LocalIdentifier:        NCC_VIP

TagLineFont:            etc/lutRS18.pcf

TagLineFormat:          "From %%l|%c|Page %%P of %%T"

PercentGoodLines:       50

MaxConsecutiveBadLines: 30

MaxRecvPages:           25

#

#

# Modem-related stuff: should reflect modem command interface

# and hardware connection/cabling (e.g. flow control).

#

ModemType:              Class1          # use this to supply a hint

ModemRate:              19200           # rate for DCE-DTE communication

ModemFlowControl:       rtscts          # default

#

ModemNoFlowCmd:         AT&K0           # setup no flow control

ModemHardFlowCmd:       AT&K3           # setup hardware flow control

ModemSoftFlowCmd:       AT&K4           # setup software flow control

ModemSetupDTRCmd:       AT&D2           # setup so DTR drop resets modem

ModemSetupDCDCmd:       AT&C1           # setup so DCD reflects carrier (or not)

#

ModemMfrQueryCmd:       !Rockwell

ModemModelQueryCmd:     !RC288DPi

ModemRevQueryCmd:       ATI3            # product information

#

ModemDialCmd:           ATDT%s          # T for tone dialing

Думаю что при знании английского тут все понятно J.

Теперь нам нужно, чтобы модем слушал линию и при звонке отвечал на него, для этого нам нужно запустить команду /usr/sbin/faxgetty <номер com-порта>, в моем случае порт ttyS0. Длятого, чтобы сервис висел и чтобы он сам перезапускался в случае закрытия, добавляем в файл

/etc/inittab следуюущую строку:

f1:345:respawn:/usr/sbin/faxgetty ttyS0

что все это значит, читаем в интернете. Все, при перезагрузке если выполнить команду ps, то мы увидим, что сервис стартовал.

Далее нужно настроить, чтобы факсы при  принятии распечатывались и копировались на samba – сервер. За это отвечает файл /var/spool/hylafax/bin /faxrcvd. Этот скрипт выполняетсчя после получения факса. Я просто добавил в конец следующее:

VIP_DIR=/mnt/share/vip/

 

#Pechat' faxa na printer pod imenem prvip, on dolgen byt' nastroen!!!

case $DEVICE in

    ttyS0)

    #Так мы понимаем что это модем на 1 порту, а это телефон ВИП ценра

    #следовательно печатаем на принтер випов и переносим файл к ним в шару

/usr/bin/tiff2ps -a /var/spool/hylafax/$FILE | /usr/bin/lpr -o fitplot -P prvip

 

#Kopirovanie na windows mashinu fayla i udalenie faylov iz spula.

#Не забыть взять скрипт bfxcopy

/var/spool/hylafax/bin/bfxcopy /var/spool/hylafax/$FILE $VIP_DIR

#Если не достучались до виндовой шары, то положили файл в папку,

#откуда потом можно его достать

if [[ -e /var/spool/hylafax/$FILE ]]

    then

        mv /var/spool/hylafax/$FILE /var/spool/hylafax/recvq/vip/`date +%m%y%H%M`.tif

fi

;;

    *)

    #Если тут не прописать, то факсы не будут распечатываться на принтер,

    #это сделано для того, если на серваке поднято более одного факса

logger -p "local0.error" -s "Incoming faxes from port $DEVICE not printed, please tune priner in /var/spool/hylafax/bin/faxcvd"

;;

esac

 

Для копирования файла на сервак в папки с определенной иерархией, я написал небольшой скрипт:

[root@fax1 bin]# cat ./bfxcopy

#! /bin/bash

# bfxcopy file destination

#Скрипт создает иерархию папок с годом и месяцем, и перемещает файл,

#если он не переместился, то оставляет его, и сообщает это в лог

 

if [ $# -lt 2 ]; then

    echo "Usage: $0 "

    exit 1

fi

 

 

DIR=$2

 

ls $2

 

if ! [ -d $DIR ]; then

    echo "Directory not mounted"

logger -p "local0.error" -s "Directory $2 not mounted see autofs log..."

 

    exit 1

fi

 

 

if [ -d $DIR/`[21~date +%y%m`/`date +%d` ]

        then

                mv $1 $DIR`date +%y%m`/`date +%d`/`date +%H%M`.tif

        else

                mkdir -p $DIR`date +%y%m`/`date +%d`/

                mv $1 $DIR`date +%y%m`/`date +%d`/`date +%H%M`.tif

 

        echo    "mv $1 $DIR`/bin/date +%y%m`/`/bin/date +%d`/`/bin/date +%H%M`.tif" >> /tmp/tmpmv

 

fi

Тут легко разобраться, если знаешь bash .

Приступаем  к настройке пересылок отчетов об ошибках.

Hylafax создает alias под именем FaxMaster в настройках sendmail.

У меня это выглядит так:

FaxMaster: tsolodovnikov@example.com

Небольшое отступление:

В моей сети есть почтовый сервер, на который можно слать письма от несуществующего имени и не существующего домена, это сделано для отсылки разных оповещений. Естественно с интернета такое не прокатит, это только из внутренней сети так работает почта.

Конфиг senmdmail.mc:

[root@fax1 bin]# cat /etc/mail/sendmail.mc

divert(-1)

divert(0)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl

OSTYPE(`linux')dnl

FEATURE(`allmasquerade')dnl

FEATURE(`masquerade_envelope')dnl

FEATURE(`always_add_domain')dnl

FEATURE(`virtusertable')dnl

FEATURE(`local_procmail')dnl

FEATURE(`access_db')dnl

FEATURE(`blacklist_recipients')dnl

define(`ALIAS_FILE', `/etc/aliases')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

MASQUERADE_AS(`ncc-volga.ru')dnl

MAILER(`smtp')dnl

MAILER(`procmail')dnl

define(`SMART_HOST', `smtp:exchange.example.com)dnl

Пересобираем базу алиасов:

[root@fax1 bin]# newaliases

Все, теперь при отсылки почты на faxmaster@localhost, почта будет пересылаться на tsolodovnikov@example.com.

Вроде пока все, понимаю, что тут все очень сжато, просто нет времени вес это писать. Если будут вопросы, то пишите, комментируйте.

Комментариев нет:

Отправить комментарий