|
- Автор: (C) Pedro Fraile. Перевод: (C) Александр Михайлов. Источник: LG. -
Введение
В фирме, на которую я работаю, есть система для отсылки и приема
факсов, интегрированная в корпоративную e-mail платформу, Microsoft
Exchange. В один прекрасный день, после обновления ПО, система
сломалась. Нам потребовалось найти что-то с эквивалентной
функциональностью, но удовлетворяющее следующим условиям:
- Минимальная стоимость, или лучше вообще бесплатно, особенно в
том что касается лицензий на ПО.
- Прозрачная интеграция с программным обеспечением конечных
пользователей (проще говоря Microsoft Office)
- Отсутствие необходимости установки какого-либо ПО на стороне
клиента, даже бесплатных программ, для минимизации работы сетевых
администраторов.
Эта статья рассказывает о том, как интеграция нескольких
продуктов с открытым исходным кодом на платформе Линукс позволила
удовлетворить все эти требования.
Благодарности
Я хочу выразить мою признательность людям и организациям, без
помощи которых я никогда не написал бы этой статьи. Во-первых, это
работники IT-подразделения фабрики Solvay QuMmics S.L. в
Torrelavega, Испания. Во-вторых, руководство моей фирмы за
одобрение и поддержку при написании этой статьи. И, наконец, в
последнюю очередь, но особенно сильно хочется поблагодарить всех
кто участвовал в разработке проектов с Открытым Исходным кодом,
упомянутых в этом тексте, участников списка рассылки HylaFax
(которые обеспечили меня необходимой информацией) и Craig Kelly,
разработчика утилиты smbfax.
Обзор системы
Чтобы уточнить о каком именно компьютере я веду здесь речь, я
буду называть ПК с установленным программным обеспечением для
работы с факсами, TOSERFAX.
Предлагаемое решение использует программный пакет HylaFax. Это
приложение контролирует установленные модемы, распределяет входящие
факсы и отсылает исходящие.
Входящие факсы конвертируются в формат PDF и направляются при
помощи почтового протокола SMTP соответствующим получателям. PDF
был выбран в качестве формата, так как Acrobat Reader это
стандартная программная платформа в данной сети. Место назначение
выбирается исходя из определенных правил, что будет разъяснено
позднее.
Если кто-то хочет послать fax, то он печатает документ на
принтер, расположенный на TOSERFAX, который виден всем остальным
компьютерам благодаря Samba. Задание на печать вызовет отсылку
e-mail сообщения пользователю, который поставил его на печать. Это
e-mail сообщение содержит URL веб-формы, создаваемой на лету
веб-сервером Apache. Веб-форма позволяет пользователю заполнить
детали, касающиеся данного факсимильного сообщения, в частности
телефонный номер. Как только пользователь закончил с заполнением
формы, и щелкнул на кнопку "Отправить", факс попадает в
очередь исходящих.
Программное и аппаратное обеспечение
Конфигурация TOSERFAX следующая:
- PC Dell Optiplex GX150, с процессором 1 Ghz Pentium III , с
256 MB RAM и 20 GB жестким диском. Модемы: 3Com US Robotics 56K
Faxmodem.
Что касается программного обеспечения:
- Базовая система -- это дистрибутив SuSE Linux 7.2, который
включает в себя HylaFAX версии 4.1beta2,
веб-сервер Apache версии 1.3.19 и SMTP-сервер sendmail версии
8.11.3.
- Samba версии 2.2.3a.
- Отправка факсов клиентами реализована при помощи пакета smbfax,
версии 1.4.
Установка и настройка HylaFAX
Установка HylaFax проводилась в соответствии со стандартными
процедурами, четко определенными в документации. Самая тонкая часть
- настройка модемов. В HylaFax нет шаблона для модема US Robotics
56K Faxmodem. Тем не менее, поиск в списке рассылки дал необходимую
информацию, в результате чего был создан файл
/var/spool/fax/etc/config.ttyS0 ( и config.ttyS1 для второго
модема). Первый из этих файлов можно найти здесь.
Прием факсов
У нашего предприятия есть несколько телефонных номеров,
соединенных с факс-машинами. Функция перевода звонка может
переключать звонки с одного внутреннего номера на другой. Эта
возможность позволяет централизовать прием всех факсов на TOSERFAX,
без изменения телефонных номеров, уже известных клиентам.
Например, предположим, что у отдела закупок есть номер факса
5550001, а у отдела логистики 5550002. Один из модемов TOSERFAX
подсоединен к внутреннему номеру 1700. АТС переводит все входящие
звонки на номера 5550001 и 5550002, на внутренний номер 1700, где
TOSERFAX принимает факс.
Но конечно же, человек, который должен получать факсы
предназначенные отделу закупок, и человек, который должен получать
факсы адресованные отделу логистики, это не одно и тоже лицо.
Необходимое нам распределение факсов требует знания номера, на
который был изначально адресован факс, и который недоступен в
стандартной версии faxrcvd. Обходной маневр в данной ситуации, это
восстановить этот номер из лога сессии и присвоить его некоторой
переменной, например TOPHONE.
TOPHONE=$($AWK '/SESSION BEGIN/ {print $NF; exit}' log/c${COMMID})
Модифицированные версии faxrcvd и FaxDispatch можно найти здесь и здесь.
Стандартная версия faxrcvd посылает факс адресату, как
postscript вложение в e-mail сообщение. На моем предприятии это не
самое лучшее решение, так как на стандартном ПК клиента нет
программы для просмотра postscript. Но зато есть программа для
просмотра PDF, а файлы postscript могут быть преобразованы в
PDF.
Однако, здесь мы сталкиваемся с небольшой проблемой, связанной с
отсылкой e-mail сообщения, с присоединенным файлом. TOSERFAX
использует в качестве SMTP-ретранслятора сервер Windows NT, с ISS
версии 4. По какой-то причине, которую я так и не смог установить,
этот сервер не может пересылать e-mail'ы c вложениями
созданными faxrcvd.
Решением стало использование утилиты "metasend",
включенной в пакет metamail 2.7.19. Скрипты metasend.sh и tiff2pdf.sh успешно
отсылают факсы, предварительно преобразованные в PDF-формат, таким
образом (и в таком виде), который устраивает SMTP-ретранслятор.
Стоит также заметить, что эти скрипты вызывают утилиты tiff2ps и
gs.
Отправка факсов
Есть несколько клиентов для отправки факсов, написанных
специально для HylaFAX и работающих на многих платформах. Но,
IT-администраторы в Torrelavega стараются по возможности избегать
установки программного обеспечения на машины клиентов. Единственной
операцией на клиентских машинах, должна быть настройка сетевого
принтера, и она должна проводиться автоматически, по возможности
самим пользователем.
Использование очереди печати имеет дополнительное преимущество,
т.к. любое приложение способное послать документ на печать (а это
практически любая программа), сможет отправить факс. С учетом
этого, система отправки факсов, описанная в этой статье, явно
превосходит другие коммерческие системы, установленные в Microsoft
Exchange, которые позволяют отсылать только факсы созданные
определенными приложениями, например созданные в Microsoft
Office.
Пакет smbfax, разработанный Craig Kelly, выполняет указанное
выше требование. В его основе лежит очень интересная идея: клиент
печатает документ, который он хочет отправить по факсу в очередь
принтера, сконфигурированную на TOSERFAX при помощи Samba, и
которая представляется как postscript принтер. Печать вызывает
исполнение perl скрипта, который вкладывает распечатанный документ
в файл и отсылает клиенту e-mail с его URL. Этот URL указывает на
веб-форму, создаваемую "на лету" в веб-сервере на
TOSERFAX (Apache). Клиент нажимает на URL, вызывает браузер и,
используя веб-форму, заполняет номер или номера, по которым должен
быть отправлен факс. Выбирает нужно ли добавлять титульную страницу
и другие детали. Наконец, после нажатия на кнопку
"Отправить", факс ставится в очередь на отправку. Если в
ходе обработки задания возникнет какая-либо ошибка, клиент также
будет извещен поcредством электронной почты. Очевидно что такая
система требует знания идентификатора пользователя, отсылающего
факс (должен существовать механизм, позволяющий однозначно
идентифицировать пользователя Windows), а также его e-mail
адреса.
Инсталляция smbfax достаточно проста. Документация пакета ясно
объясняет различные шаги и повторение их здесь будет излишне.
Настройка Samba, с другой стороны, требует применения некоторых
интересных приемов. Подходящий файл конфигурации можно увидеть здесь. Следующие строки должны
быть выделены:
[global]
workgroup = DOM
netbios name = TOSERFAX
security = DOMAIN
winbind uid = 10000-20000
winbind gid = 10000-20000
template homedir = /home/win/%D/%U
winbind separator = +
printer admin = @DOM+PRINTADMIN
...
[print$]
path = /etc/samba/printers/
browseable = yes
read only = yes
write list = @DOM+PRINTADMIN,root
# В этой секции настраивается очередь печати для факса
[fax]
comment = Fax queue
path = /tmp
printable = Yes
writable = no
create mode = 0700
guest ok = no
postscript = Yes
printing = lprng
print command = /usr/local/smbfax/smbfax -r queue %u %s
lpq command = /usr/local/smbfax/smbfax show
lprm command = /usr/local/smbfax/smbfax dequeue %j
Как Samba-сервер, TOSERFAX входит в домен Windows 2000 (Active
Directory). Samba версии 2.2.3 включает поддержку
"winbindd", который позволяет авторизовать клиентов,
основываясь на мандате полученном после начала сессии в домене. Как
следствие больше не нужно создавать Windows пользователей на Linux
машине. Каждый клиент, который первый раз подсоединяется к
samba-серверу, будет идентифицироваться комбинацией <Доменное
имя>+<Имя пользователя>, и получит "uid" в
диапазоне 10000 - 20000.
Внутри секции [fax] , строка
print command = /usr/local/smbfax/smbfax -r queue %u %s
вызывает программу smbfax, передавая ей в качестве параметра имя
пользователя (%u), которое определяется как было описано ранее.
Внутри секции [global], строка
printer admin = @DOM+PRINTADMIN
дает административные права на принтер всем членам группы
PRINTADMIN в NT домене DOM. Эти пользователи смогут настраивать
принтеры, устанавливать драйвера (для разных версий Windows) и
давать привилегии на печать пользователям домена при помощи
стандартных административных утилит, имеющихся на NT или Windows
2000 машинах, и которые используют Удаленный Вызов Процедур (RPC).
Все это полностью прозрачно для пользователя, несмотря на то, что
сервер печати это на самом деле не Windows-сервер, а Linux.
Члены группы DOM+PRINTADMIN конечно должны иметь доступ на
запись в /etc/samba/printers. Это достигается путем установки
необходимых прав в файловой системе Linux:
$ chown -R DOM+PROWNER:DOM+PRINTADMIN /etc/samba/printers
$ chmod 0775 /etc/samba/printers
Установка драйверов -- это особенно интересная возможность. На
TOSERFAX можно установить драйвера postscript принтера для всех
версий Windows, которые используются на предприятии: 95, NT и 2000.
После чего любой клиент, который подсоединяется к очереди печати в
первый раз, сможет автоматически установить необходимые драйвера.
Таким образом достигается одна из целей сетевых администраторов: не
нужно производить дополнительную настройку на стороне клиента.
Дополнительно любой член группы PRINTADMIN, может запретить
доступ к очереди печати, используя списки доступа NT (ACL).
Единственный вопрос оставшийся без ответа, это как отослать
e-mail сообщение пользователю, который хочет отправить факс.
Благодаря winbindd, пользователь прошел процедуру аутентификации,
но какой у него e-mail адрес? Т.к. считать эту информацию из Active
Directory не представляется возможным (возможно здесь помог бы
OpenLDAP), то решением стало вручную добавить в файл
"aliases" список всех возможных пользователей факса,
вместе с их e-mail адресами
DOM+User1: email-1@domain.com
DOM+User2: email-2@other-domain.com
и так далее. После этого запустите "newaliases" и
система готова.
Обслуживание системы
После того как все компоненты сконфигурированы, последнее что
остается сделать, это автоматизировать некоторые простые сервисные
процедуры. Этого очень легко достигнуть, добавив в /etc/crontab
следующие строки:
0 21 * * * root test -x /usr/sbin/faxqclean && /usr/sbin/faxqclean
25 23 * * * root test -e /usr/sbin/faxcron && sh /usr/sbin/faxcron | mail faxmaster
Примите во внимание, что пакет HylaFax, поставляемый с Suse 7.2
устанавливает faxcron в /etc/cron.daily. Вам придется удалить его,
чтобы предложенная схема заработала.
Заключение
Комбинация из HylaFax, Samba, smbfax и других open-source
пакетов, на базе Linux системы, позволила интегрировать эффективный
централизованный факс-сервис в окружение Windows сети, оправдав
ожидания IT менеджеров, и, что особенно важно, исключив
необходимость установки дополнительного программного обеспечения на
стороне клиентов.
|