Hylafax

Материал из OpenWiki
Перейти к: навигация, поиск

Сервер обработки факсимильных сообщений HylaFax

замечания автора

Это описание появляется в результате необходимости установки - а значит копаться разбираться - что то переводить...

ну а что бы труды не совсем пропали даром - поделиться опытом ... этакое пособие hylafax по русски....

если вам статья поможет киньте сколько не жалко на кошелек 41001101259634 яндекс.денег :)))

что б понимать насколько не зря я трудился :))


На момент написания этой статьи (03 декабря 2008 г.) автору известны две ветки разработки настоящей программы

Разработчики и лицензия

Изначально HylaFax разработана Силикон Графикс SGI.

лицензия BSD-стиля.

Hylafax на www.hylafax.org

Исторически основная версия HylaFax.
Бинарные пакеты на ее основе присутствуют почти во всех дистрибутивах linux.

HylaFax+ на hylafax.sourceforge.net

HylaFax+ появилась в результате недовольства части разработчиков по поводу выхода обновлений и политики включения этих обновлений в основную версию.

основное отличие в наличии голосовых функций

Более полный список отличий на английском можно почитать http://hylafax.sourceforge.net/docs/hylafax-differences.php

AvantFax - www.avantfax.com

Web интерфейс для HylaFax


Так как обновления HylaFax+ и правда более поздние, и мне были нужны голосовые функции - я пользовался последней. Далее буду писать именно о HylaFax+.

О факсах и факс-модемах

Протоколы передачи факсов

Классы факс-модемов и наборы AT-команд

Подобно модемам, поддерживающими набор AT-команд управления, факс-модемы также используют специальные AT-команды. В настоящее время существуют два различных стандарта на такие команды. Они называются командами класса 1 и класса 2. Факс-модем может поддерживать один или оба класса команд управления.

Чтобы определить без документации, является ли модем факс-модемом, а также узнать, какие классы команд управления он поддерживает, надо ввести команду

AT+FCLASS=?

в ответ как правило модем нам отвечает 1, 2.0 - поддерживаемые классы

В стандарте управления модемом класса 2 протоколы сеанса связи поддерживаются аппаратно - в стандате модемов класса 1 аппаратно поддерживаются только протоколы модуляции и коррекции ошибок - протоколы сеансов же должны быть реализованы программно. Когда то, когда процессоры были помедленнее, использование команд класса 2 считалось преимуществом. Однако сегодня - любая программа работы с факс-модемами без проблем реализует все необходимые протоколы. Нагрузка на процессор при этом настолько незначительна - что преимуществом модем класса 2 назвать трудно. Если же вспомнить, что в случае обнаружения ошибок (что не раз случалось) программную часть обновить гораздо проще, то приходишь к выводу, что правильнее выбрать набор команд класса 1.

Стоит добавить что с появлением SuperG3 протокола появились версии наборов команд 1.0 и 2.1 соответственно

тут можно почитать подробнее о протоколах работы факс-модемов

Звук в модемах

Если функции передачи факса присутствуют практически во всех модемах, то возможность воспроизводить в телефонную линию какой то записанный голос из файла и соответственно записать из телефонной линии звук в файл присутствует далеко не во всех модемах. модемы которые это могут называются голосовыми или так называемые voice модемы. Голосовые модемы оцифровывают и сжимают голосовой поток определенным алгоритмом (кодеком). Сделать это модем может находясь в специальном голосовом режиме. Управление модемом в этом режиме осуществляется набором голосовых AT-команд (как правило называется режим команд класса 8).

Спрашивается зачем оно нам надо ? Ну например для того что б проговорить в линию "Примите пожалуйста факс" если на той стороне факс не автомат. Или предложить набрать добавочный номер по завершении передачи факса. Тут ... уж как говориться кому что понадобится...

Выбор факс-модемов

модемы разных производителей и разных моделей имеют немало разных мелких ньюансов, но эти "мелочи" при работе нередко становятся причиной хорошей головной боли

тут,например, можно почитать(англ) что пишут разработчики HylaFax+ об особенностях модемов

здесь можно почитать по русски об особенностях модемов в использовании другой факс программы VentaFax

а тут можно почитать на русском об особенностях выбора модемов при желании работать с голосовыми функциями сайт программы автопрозвонка

О стабильности Факс-модемов

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

  • первое, что уменьшает статистику зависаний - это уменьшение скорости com порта

так например мой старенький USRcourier, как мне казалось, всегда стабильно пахал на 115200 - с факсами стал зависать не реже раза в день особенно в режимах переключения факс-голос. Уменьшение скорости до 38400 - решило проблему. Если вы не используете модем с V.34FAX(SuperG3) то скорости порта 38400 более чем достаточно.(Тут стоит заметить что это очень редкие модемы, купить которые в России на момент написания статьи - оказалось уж как то очень сложно). Как правило эта мера действенна для внешних модемов.

  • второе это выставление таймера S19

если регистр модема S19 выставлен в 0 то модем не обрывает соединение при отсутствии передачи данных. Если модем работает в режиме передачи данных - то ситуация когда модем висит на линии а данных нет вполне нормальна. При работе с факсами это как раз таки верный признак того что что то не так. Выставление S19 например в 3 - приводит к тому что через 3 минуты бездействия модем производит сброс. Конечно это не решает проблем на 100 процентов, но процентов 90 головной боли отходит на второй план.

  • ну и наконец последнее средство - встроенное в hylafax уведомление о необходимости вмешательства - Hylafax_wedged.

данным скриптом можно даже перегрузить сервер - и если модемы внутренние - это может быть решением проблемы - если конечно сервер можно перегружать.

Системные Требования HylaFAX

Оригинал системных требований на английском можно почитать тут

   * libtiff - можно получить тут: http://www.remotesensing.org/libtiff/
     LZW сжатие не требуется.
     Для BSD требуется версия 3.5.6. не использовать не пропатченную версию 3.6.1.
   * Ghostscript - можно получить тут:  http://www.cs.wisc.edu/~ghost/
   * zlib - обычно присутствует вместе с libtiff или Ghostscript
   * awk, gawk, mawk или nawk - mawk можно скачать тут: ftp://ftp.whidbey.net/pub/brennan/
     Многие дистрибутивы уже содержать эти программы.
   * sendmail или совместимый SMTP - можно получить тут: http://www.sendmail.org/
     Многие дистрибутивы содержат и его.
   * metamail, uuencode, или base64-encode
     По требованию - для использования fax-email шлюза.
   * PAM libraries
     по требованию - для использования в hfaxd аутентификации через PAM.
   * JBIG-KIT - get it at http://www.cl.cam.ac.uk/~mgk25/jbigkit/
     По требованию: используется для JBIG-сжатия факсов при отправке.


Конечно совсем не обязательно следовать ссылкам получать исходники компилировать их.

Правльнее и быстрее в соответствии с вашим дистрибутивом получить бинарный rpm и или deb пакет через rpm или apt-get.

Форматы принимаемых fax-файлов

По умолчанию hylafax сохраняет принимаемые факсы в tiff формате. Кроме того в системе сразу присутствуют такие преобразователи как tiff2pdf и tiff2ps. Как пишут разработчики это оптимальные, форматы для черно-белых точечных форматов и использование PNG, GIF или JPEG бессмысленно для fax данных за исключением новых цветных-факс форматов - которые распространены крайне мало по сравнению с черно белыми факсами.

Первое время я оставил все как есть и выставлял принимаемые tif через самбу. После живого общения с факсами это был безусловный шаг к комфорту сотрудников и всем нравилось... критические замечания появились позднее. Дело в том, что в такой tif или не содержит информацию о плотности линий или далеко не все программы умеют ее правильно извлекать - но факс tif открываемый например в windows программой программой просмотра факсов - бывает сжимается по вертикали. Происходит это не редко, хотя и не всегда. Пришлось поставить автоматическое конвертирование в pdf - с которым подобных казусов не наблюдалось.

Следующим шагом стало подключение разного рода сервисов - типа комму пришедший факс можно смотреть а кому нельзя - что решили реализовывать через web интерфейс - php. Тут открылись новые ньюансы. Дело в том что броузеры сами эти форматы не видят - то есть они их открывают сторонними приложениями: tif программой просмотра факсов - с теми же глюками со сжатием, pdf - acrobat reader-ом. а что бы встроить в страничку типа галереи рисунков - им подавай jpeg, gif,png.

Встал вопрос о преобразовании tif,pdf -> jpeg,gif,png. Искал естественно с оглядкой на php. :

- первое, что вылезло, графическая библиотека php - gd (или gd2). В ее теории написано что может преобразовывать форматы. однако живых примеров для tif,pdf -> jpeg,gif,png я не нашел. не нашел и подтверждения поддержки tiff,pdf в ней.

- второе - библиотека tiff2png. имеющиеся на сайте бинарники скомпилированы только для i386, а из исходников у меня что то не пошло - править настройки мне было лень - при наличии других вариантов :) но думаю что это путь нормальный - кому интересно.

- третье ImageMagick - и интерфейс для php - Imagick - тут оказалось все просто - в репозитарии ubuntu были оба пакета - и получив их по apt-get instal - все заработало.

- четвертый вариант - утверждения на форуме hylafax - что с помощью tiff2ps - можно получить PNG. По всей видимости тут имеется ввиду использование gs из пакета ghostscript. По меньшей мере, в примере, pngпревьюшки на e-mail получаются именно так.

Установка

Перед установкой естественно покопался в поисковиках на предмет чего-то похожего. на Русском языке вылезло не так что бы много ссылок.

Приведу те которые привлекли мое внимание:

В целом установка из исходников достаточно проста

  • распаковываем исходники
  • правим в configure пути - например меня не устраивал spool по умолчанию /var/spool/hylafax

(отвечаю на вопрос любопытных почему не устраивал :)) - spool - это то куда ложатся все данные: входящие факсы, очередь исходящих, логи и т.п. - и я посчитал правильным поместить его на raid - а он у меня был примонтирован в другое место)

  • #./configure
  • # make
  • # make install

Далее запускаем faxsetup.

В конце своей работы faxsetup через faxaddmodem будет добавлять модемы столько раз сколько вам надо. Соображения по поводу того выбирать класс 1 или 2.0 я уже писал выше.

Если модемов больше 4 - или точнее в системе больше 4х com-портов - то в параметрах загрузки ядру надо об этом сказать через lilo или через grub "8250.nr_uarts=5" (или сколько вам надо этих com-потротв).

Основные программы пакета HylaFax

  • faxgetty - прием факсов
  • sendfax - постановка факсов в очередь отправки
  • faxrm - удаление задания из очереди отправки
  • faxsend - изменение параметров задания стоящего в очереди отправки
  • pagesend
  • faxstat - статистика состояния модемов очереди отправки и результаты работы.
  • faxclean - очистка очереди отправки
  • faxcron
  • hfaxd - протокол клиент-сервер
  • faxq - менеджер очереди процессов
  • faxstate - контроль состояния модемов
  • faxconfig - dynamically change HylaFAX configuration parameters

Файлы конфигурации HylaFax

$spool/etc/ :

config

config.ttyS0 ...ttyS...

dialrules


/usr/local/lib/fax/hfaxd.conf

/usr/local/lib/fax/hyla.conf

/usr/local/lib/fax/sendfax.conf

~/.hylarc

Что стоит поправить сразу

Первое, что сильно не устраивало, это то, что при отправке факса формируется дополнительно титульная страница. Факс документы сегодня это как правило короткие сообщения на 1-2-3 странички которые надо посмотреть быстро - все остальное как правило отправляется по E-mail. И формирование такой станицы ... кажется несколько устаревшим :)) по какой причине оно оставлено по умолчанию ... не совсем понятно.. ну да бог с ним .. главное что отключть можно :))

читаем ман sendfax и и находим там:

sendfax reads configuration information from the files /usr/local/lib/fax/hfaxd.conf, /usr/local/lib/fax/hyla.conf, /usr/local/lib/fax/sendfax.conf, and ~/.hylarc; in that order, with later-read settings superseding any that may have been previously read. Configuration files follow the conventions described in hylafax-client(1).

Tag Type Default Description

AutoCoverPage boolean Yes automatically generate cover page

соответственно в нужном вам файле пишем :

AutoCoverPage: No

Запуск демонов :)

Запуск hfaxd, faxq, and faxgetty сервисов.

Процедура запуска очень сильно зависит от операционной системы, дистрибутива и пакета инициализации.


Для BSD-init (non-SysV-init) систем, возможно понадобиться отредактировать etc/setup.cache и изменить следующие строки:

FAXQ_SERVER='yes'
HFAXD_SERVER='yes'
SYSVINIT='/usr/local/sbin/hylafax'


Отредактируйте /etc/rc.d/rc.local и добавте следующие строки:

# запуск HylaFAX hfaxd и faxq сервисов при загрузке.
/usr/local/sbin/hylafax start


На большинстве систем SysV-init необходимо отредактировать файл /etc/inittab и добавить следующую строку(строки при нескольких модемах):

m0:2345:respawn:/usr/local/sbin/faxgetty ttyS0

Где m0 это уникальное значение в inittab, а ttyS0 соответствует названию устройства(устройств) используемых в скрипте faxaddmodem. Чтобы init перечитал /etc/inittab необходимо набрать 'init q'.

Если используется /etc/inittab, то при использовании опции "respawn", faxgetty перезапускается после закрытия.

faxgetty может запускаться также из /etc/rc.d/rc.local:

/usr/local/sbin/faxgetty -D ttyS0

В системах использующих upstart, поведение с перезапуском аналогичное /etc/inittab - respawn может быть достигнуто созданием файла /etc/event.d/ttyS0 следующего содержания:

start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /usr/local/sbin/faxgetty ttyS0

затем пишем /sbin/start ttyS0 что бы запустить faxgetty.

Где искать Логи и Интеграция с Базой данных

$spool/log/ - каждый файл соответствует отдельной сессии связи

В текстовом файле seqf храниться число номера следующей сессии. Это число используется в имени файла логов. Поэтому при очистке файлов из этого каталога можно поправить и число в 1.


$spool/etc/xferfaxlog - сводный лог-файл событий Hylafax.

Тут нельзя не отметить про механизм запуска исполняемого файла $spool/hylafax/etc/FaxAccounting при каждом добавлении записи в xferfaxlog, с помощью которого можно отправить лог например в базу данных .

Докуменация

Полный список манов на английском по Hylafax+ можно найти тут

man hylafax.config (англ.) -- (частичный русский перевод)

man jobcontrol (англ.) -- (частичный русский перевод)

man wedged (англ.) -- (русский перевод)

man xferfaxlog (англ.) -- (русский перевод)