Возможности создаваемой системы:
Отправка факсов с windows машин в локальных доверенных сетях
Отправка факсов с почты
Отправка факсов с web-интерфейса
Уведомление о состоянии отправленных факсов по почте/сообщения по сети индивидуальному/групповому пользователю
Прием факсов и распечатка на принтере
Доступность списка полученных факсов через сетевую директорию (в нашем случае samba)
Доступность с писка полученных факсов через web-интерфейс
Здесь сильно нехвататет:
dialup доступ к системе на случай аварии
Использования голосовых функций модема при отправке и приеме, т.к. у меня просто нет такого модема
Установлена Freebsd 7.3-stable, hylafax-6.0.4_1.
Для работы с почтой:
- Любой MTA (я буду использовать exim)
Для работы в виндовой сетке
- samba
- cups/lpr
- /usr/ports/print/hplip — драйвера для моего HP принтера
Для работы через веб интерфейс:
- apache22-itk
- php5
- mysql
- phpmyadmin
- cd /usr/ports/databases/pear-MDB2_Driver_mysql
- pear-1.9.0
- PHP PEAR 5 including MDB2_driver_mysql, Mail and Mail_Mime
- PECL FileInfo
- PHP mbstring — for improved UTF-8 sorting support (optional)
- PHP MySQL 5
- MySQL server 4.1.12 or better (see Important Notes below)
- ImageMagick
- ghostscript
- libtiff
- netpbm-devel
- libungif
- sudo
Характеристики железа, на котором все это работает:
- pentium3-1Ghz/512Mb/40Gb hdd
- 4 модема courier
- МУльтикарта mosChip nm9835
У меня установлена мультикарта для работы 2 модемов и можно подгрузить puc модуль, но модемы у меня упорно не виделись, так что тем, кто использует мультикарты, надо собрать ядро с device puc.
Все поставлено, можно начинать настройку.
Настройка hylafax
Команды:
- faxsetup — сделает общие настройки факс- сервера.
- faxaddmodem — позволит добавить модем
Файлы (все конфиги находятся в /var/spool/hylafax/etc):
FaxDispatch
FILETYPE=tif;
SENDTO=mail@your-server.ru;
FaxNotify
NOTIFY_FAXMASTER=yes;
RETURNFILETYPE=tif
В файл конфига модема:
FaxrcvdCmd: «bin/faxrcvd.php»
DynamicConfig: «bin/dynconf.php»
NotifyCmd: «bin/notify.php «
В файл /etc/ttys
cuad0 «/usr/local/sbin/faxgetty» unknown on insecure
ln -s /var/spool/hylafax/bin/ps2fax /var/spool/hylafax/bin/ps2fax.gs
ln -s /var/spool/hylafax/bin/pdf2fax /var/spool/hylafax/bin/pdf2fax.gs
—————————————————————————————————————
Настроим веб сервер.
Т.к. сервер будет исполнять системные команды, я предпочел использовать apache22 с патчем itk. Это позволит мне ограничить работу виртуального хоста в системе действиями от непривелигированного пользователя uucp, например. Для активации патча необходимо сделать:
# sudo make WITH_MPM=itk -C /usr/ports/www/apache22/
Этот рецепт можно также использовать на собственном виртуальном хостинге, но следует учитывать, что apache22-itk работает примерно в 5 раз медленнее простого апача, так что может это кому-то пойдет только во вред. Мне нет, у меня нет больших нагрузок и я решил попробовать что-то необычное
ServerAdmin it@your-server.ru
DocumentRoot «/usr/local/www/avantfax»
ServerName fax.your-server.ru
ErrorLog «/var/log/fax-error_log»
CustomLog «/var/log/fax-access_log» common
# Включилась паранойя, и я изменил все запросы с http на https
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
# Настроим от чьего имени будет работать этот виратуальный хост
AssignUserId uucp uucp
# Тут настроим работу php
php_admin_value upload_tmp_dir /usr/local/www/avantfax/tmp
php_admin_flag safe_mode off # Обязательно, иначе не будет работать avantfax, указываю не в глобальной конфигурации, чтобы остальные вируальные хосты работали в сейвмоде
php_admin_flag display_errors on # Посмотрим будут ли ошибки, потом можно отключить
php_admin_value doc_root /usr/local/www/avantfax
php_admin_value user_dir «www»
php_admin_value open_basedir «/usr/local/www/avantfax:/usr/local/share/pear:/var/spool/hylafax:/usr/local/bin» # Разрешим этому вируальному хосту испольнять код-пхп в определенных директориях.
php_admin_value session.save_path /usr/local/www/avantfax/tmp
php_admin_value memory_limit «64M»
php_flag max_execution_time 60
—————————————————————————————————————
Делаем веб морду
0. Качаем архив с скриптами http://downloads.sourceforge.net/project/avantfax/avantfax-3.2.2.tgz?use_mirror=ignum
1. Этот скрипт написан для разных систем, поэтому сперва изменим пути в нескольких скриптах, или создадим символические ссылки.
Я предпочитаю сменить пути в файлах:
avantfax/includes/faxrcvd.php, notify.php, remold.php, faxcover.php, phb.php
Создадим базу вебморды нашей факс машины
# mysql -uroot -p < create_user.sql
# mysql -uavantfax -ppassword avantfax < create_tables.sql
2. Приведем avantfax/includes/local_config.php в соответстви с нашей системой:
cp /usr/local/www/avantfax/avantfax/includes/local_config-example.php /usr/local/www/avantfax/avantfax/includes/local_config.php
Опишу необходимые настройки в local_config.php:
Ищем $BINARYDIR = ‘/usr/bin’;, меняем на $BINARYDIR = ‘/usr/local/bin’;
$dft_config_lang поставим ru вместо en
$HYLAFAX_PREFIX
3. # sudo chmod -R 777 tmp faxes templates/admin_theme/templates_c и templates/main_theme/templates_c
4. Сделаем символическую ссылки на наши скрипты:
# ln -s /usr/local/www/avantfax/includes/faxrcvd.php /var/spool/hylafax/bin/faxrcvd.php
# ln -s /usr/local/www/avantfax/includes/dynconf.php /var/spool/hylafax/bin/dynconf.php
# ln -s /usr/local/www/avantfax/includes/notify.php /var/spool/hylafax/bin/notify.php
5. Отредактируем конфигурацию модема (первый модем в моей системе /dev/cuad0):
# vi /var/spool/hylafax/etc/config.cuad0
FaxrcvdCmd: bin/faxrcvd.php
DynamicConfig: bin/dynconf.php
UseJobTSI: true
6. # vi /var/spool/hylafax/etc/config
NotifyCmd: bin/notify.php
7. Заменим стандарный faxcover на авантфаксовый:
# mv /usr/bin/faxcover /usr/bin/faxcover.old
# ln -s /usr/local/www/avantfax/avantfax/includes/faxcover.php /usr/local/bin/faxcover
8. Настроим управление очередью факса от имени нашего веб сервера (добавим аккаунт в фаил hosts.faxd uucp). Именно поэтому я использую апач c патчем itk, с ним легко можно ограничить действия виртуального хоста в системе. Это нужно для того, чтобы администратор системы был юзер hylafax, от имени которого работает вся наша система:
# /usr/sbin/faxadduser -a my_password apache
# /usr/sbin/faxdeluser localhost
# /usr/sbin/faxdeluser 127.0.0.1
# echo 127.0.0.1 >> /var/spool/hylafax/etc/hosts.hfaxd
Помните , что указанный пароль используется в файле local_config.php as $FAXRMPWD.
9. Добавим два скрипта от рута в крон (/etc/crontab). Один нужен для создания адресной книги, а второй удаляет все временные файлы, которые остают после заливки файлов юезрами в факс-машину через веб морду:
0 * * * * /var/www/avantfax/includes/phb.php
0 0 * * * /var/www/avantfax/includes/avantfaxcron.php -t 2
10. Настроим возможность выполнения некоторых команд в системе от имени root, но с правами юзера hylafax (/usr/local/etc/sudoers):
hylafax ALL = NOPASSWD: /sbin/reboot, /sbin/halt, /usr/local/sbin/faxdeluser, /usr/local/sbin/faxadduser -u * -p * *
11. Теперь можно перезапустить машину для проверки, что все само стартует в случае перегрузки и пробовать войти в вебинтерфейс avantfax:
http://fax.your-server.ru/admin/
Если все в порядке, то появится запрос на ввод логина/пароля.
ПО-умолчанию: admin/password. При первом входе будет предложено сменить пароль на что-то иное.
Первое что необходимо сделать это создать всех пользователей системы и все модемы, распределить их на группы в соответвии с желаемымой маршрутизацией.
Например:
- device: cuad0
- alias: dep1
- contact: faxdep1@your-server.ru
Теперь каждый факс, пришедший на факс cuad0, будет отправлен в pdf на адрес faxdep1@your-server.ru.
Настроить как будет рассылать MTA эти письма, вы сами решайте. У нас пересылается на секретаря. Остальные модемы настраиваются аналогично.
На всякий случай, импортировать уже принятые факсы в вебморду можно следующим образом:
# cd /var/spool/hylafax; for i in `ls recvq/*`; do bin/faxrcvd.php $i ttyS0; done
Для импорта отправленных:
# cd /var/spool/hylafax; for i in `ls doneq/q*`; do bin/notify.php $i done :30; done
—————————————————————————————————————
Настройка самба для расшаривания папки с принятыми факсами:
[Fax_Rec]
comment = Incoming Faxes
browseable = yes
writable = yes
path = /var/spool/hylafax/recvq
public = yes
Зная умения пользователей, подстрахуемся сетевой корзиной:
vfs objects = recycle full_audit
recycle:repository = /usr/home/data/fax/.killed
recycle:keeptree = yes
recycle:versions = yes
—————————————————————————————————————
Автоматическое распечатывание cups принятых факсов.
Установим и настроим cups.
Я поставил вот такие пакеты: cups-base-1.4.2_4, cups-client-1.4.2_4, cups-image-1.4.2_4, cups-pstoraster-8.15.4_5, cups-samba-6.0_3, cups-smb-backend-1.0_3.
Последние 2 нужны были для публикации притеров посредством самбы. Некоторые из отправляющих факсы с клиента программ работают через самба-принтер. Так что возможно многим оно и не понадобится. Далее установим hplip-2.8.2_7 — это драйвера для принтеров HP.
Установка закончена, теперь настраиваем:
В файле /usr/local/etc/cups/cupsd.conf делаем следующие изменения:
Listen 127.0.0.1:631
Listen :631
Остальное я не правил, меня устроил дефолтный конфиг. Теперь добавим принтер:
# /usr/local/bin/tiff2ps -1 $1 | /usr/bin/lpr
Ваш принтер должен быть PostScript своместимый. Можно указать явно размер бумаги, это необходимо для некоторых типов принтеров:
# /usr/bin/tiff2ps -1 -h 11.1082 -w 7.8543 $1 | /usr/bin/lpr
Мы используем для получения аванфаксовый файл faxrcvd.php поэтому в конфиге надо выставить
$PRINTFAXRCVD = true;
$PRINTFAX2PS = ‘/usr//local/bin/fax2ps’;
—————————————————————————————————————
Рассмотрим работу с несколькими модемами и принтерами.
Тут все очень просто. Т.к. наша система плотно связана с avantfax, то и настройки мы должны проводить в неё.Идем в админку http://fax.your-server.ru/admin/. Тут Заходим в пункт «параметры модемов» и заполняем: название модем, на какой принтер печатать, какой номер. Собственно после этого у вас должно заработать как надо.
—————————————————————————————————————
Что делать тем, кто не хочет установить avantfax?
Вполне законное желание, во многих компания к этому уже пришли. Пропустите все изменения, которые связаны с avantfax.
Далее вам необходимо поместить примерно такой код в FaxDispatch:
case «$DEVICE» in cuad0)
SENDTO=name@your-server.ru
PRINTER=lj2015
;;
esac
—————————————————————————————————————
Отправка факсов с рабочих мест:
Скачаем вот это http://prdownloads.sourceforge.net/winprinthylafax/WinprintHylaFAX-1.2.9.exe?download, и несколько автоматизируем процесс настройки клиентов таким reg-файлом:
reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Username /t reg_sz /d %username% /f
reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Password /t reg_sz /d PassWord /f
reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v DefaultEmail /t reg_sz /d %username%@your-server.ru /f
reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v AddressBookPath /t reg_sz /d %userprofile% /f
Этот кусок реестра форточек позволяет настроить параметры winprint, для настройки уведомлений и авторизированного доступа к системе. Теперь пользователь может отправить факс простым распечатыванием на специальный факсовый принтер. Впрочем, можно обойти все машины и настроить факсовый притер вручную.
—————————————————————————————————————
Работа с почтовым сервером
Мозга до sendmail мне никогда не хватало, поэтому в /etc/mail/mailer.conf:
sendmail /usr/local/sbin/exim
send-mail /usr/local/sbin/exim
mailq /usr/local/sbin/exim -bp
newaliases /usr/local/sbin/exim -bi
hoststat /usr/local/sbin/exim
purgestat /usr/local/sbin/exim
Транспорт
faxmail:
driver = accept
condition = ${if eq{$local_part}{fax}{yes}{no}}
transport = faxmail
no_more
faxmail:
driver = pipe
command =»/usr/local/bin/faxmail -n -t done -d $h_subject $sender_address»
Теперь при посылке почты на fax@your-server.ru ексим выполнит отправку факса. Соответвенно, если у вас почтовый сервер и сервер с факсами разные, то на основном сервере надо настроить пересылку почты на смтп нашей факсмашины.
Дальше больше и интереснее.
Теперь рассмотрим работу hylafax с asterisk и iaxmodem. Как настраивать астреиск, тема другой статьи, поэтому я предполагаю, что он уже настроен у вас.
Итак, устанавливаем /usr/ports/net/iaxmodem. Создаем конфиг программного модема /usr/local/etc/iaxmodem/ttyIAX0:
mode 660
port 4570
refresh 300
server 127.0.0.1
peername iaxmodem0
secret parolka
cidname subnets.ru
cidnumber 203
codec alaw
В /etc/rc.conf для автостарта:
iaxmodem_enable=»YES»
Командой faxaddmodex ttyIAX0 добавим новый модем и настроим его. В итоге получим конфиг модема IAX0 для hylafax.
Настроим iax.conf для астериска:
[general]
bindport=4569
bindaddr=127.0.0.1
bandwidth=low
disallow=lpc10
jitterbuffer=no
forcejitterbuffer=no
autokill=yes
[iaxmodem0]
type=friend
username=iaxmodem0
context=office
secret=parolka
host=127.0.0.1
port=4570
qualify=yes
disallow=all
allow=ulaw
trunk=no
Ну и sip.conf:
exten => 203,1,Set(LANGUAGE()=ru)
exten => 203,n,Dial(IAX2/iaxmodem0/${EXTEN},10,r)
Несколько советов по управлению факс-машиной:
Очистка факс машины:
# cd /var/spool/hylafax/
# rm archive/* docq/* log/* recvq/* sendq/* tmp/*
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !