Всем привет, вот настала необходимость заменить виндовый факс сервер на сервер со свободном ПО. После некоторых попыток Гугления, нашел среди прочих замечательный продукт – 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.
Вроде пока все, понимаю, что тут все очень сжато, просто нет времени вес это писать. Если будут вопросы, то пишите, комментируйте.
Комментариев нет:
Отправить комментарий