eliu518 发表于 2006-1-9 11:32:48

安装与设置FAX传真服务器 (1)

  传真标准Group 1标准在很久以前被开发出来,当时的速度是6分钟/页。70年代末,应用了压缩技术的Group 2标准使传输时间减半,为3分钟/页左右。Group 3标准于八十年代通过,速度有了进一步提高,达到1分钟/页以内。我们日常所说的传真通常就是指它,简称G3传真。后来还有Group 4标准,即所谓G4传真,主要适合可靠传输媒介,例如数字化的ISDN线路。ADSL大行其道之前,中国电信力推的"高速"连接ISDN,其中一个卖点就是G4传真能力。可惜G4传真生不逢时,和电子邮件系统相较完全没有吸引力,加上G4传真机较贵,因此从来就没有得到过广泛的应用。<br>
  用于G3传真的调制解调器又有class 1、class 2、class 2.0之分。class 1标准比较简陋,大部分工作都由电脑系统上的软件完成。class 2标准接手了以前由CPU承担的大部分工作,在class 1的基础上增加了四十多条新命令。和往常一样,标准化的过程十分漫长,厂商和用户都不想继续等待,因此根据1991年的一份草案推出了产品。这些调制解调器一般称为class 2调制解调器,为便于区分,在标准发布以后生产的严格符合官方标准的调制解调器被称为class 2.0调制解调器。在这之后,陆续还有class 3和class 4标准推出,只是时过境迁,已经乏人问津了。<br>
  HylaFAX即是一款支持G3标准的传真软件。前身是SGI的Sam Leffler在八十年代末期为公司编制的传真软件。后来SGI同意Sam将该软件贡献出来,放到网上供更多的人免费使用。早期的软件称为FlexFAX,后来发现和已有的商标相冲突,才改用现名。它是已有的开放源码传真软件之一――依我之见,是最好的一个。<br>
<br>
  HylaFAX功能强大,应用灵活,运行稳定,管理方便,即使与商业传真软件相比,也毫不逊色。它有诸多特性:<br>
  1)不同的用户从不同的电脑使用不同的操作系统接收/发送传真。<br>
  2)将收到的传真email给用户<br>
  3)使用电子邮件提交传真。<br>
  4)记录和归档传真<br>
  5)使用多条线路,传送海量传真<br>
  6)自动打印收到的传真<br>
  7)访问控制<br>
<br>
  HylaFAX传真服务器能力很强。有用户报告说在一部Pentium Pro 200机器上使用30个调制解调器,每天可以毫无问题地接收 6000-7000页传真。发送记录则是Matthias Reich创下的:他在10部Solaris 2.4上运行HylaFAX 4.0pl2,每日发送多达10,000页传真。<br>
<br>
  2.HylaFAX如何工作?<br>
<br>
  正如邮件传输代理(MTA)软件从客户端接收电子邮件并发送到正确的电子邮件地址,HylaFAX传真服务器软件从客户端接收传真并发送到正确的传真号码。主要的进程有三种:后台守护进程 hfaxd监听 4559 端口、队列调度进程faxq和终端处理进程faxgetty。基本上,hfaxd精通HylaFAX的传真协议,负责服务器同客户端的通信,将需要发送的传真放入适当的队列当中;faxgetty则负责实际的传送工作――与端口、调制解调器、传真机什么的打交道;而faxq则坐镇中枢,掌管着繁忙的传真队列。三者互相配合、密切合作,在一些辅助程序的帮助下完成各种传真事务。 <br>
   请看下图:<br>
<br>
<br>
图一<br>
  绝大多数情况下,我们通过启动脚本在系统启动时运行hfaxd,如果你的系统负载很轻,也可以利用inetd/xinetd来做这件差使,只是我看不出来有多大裨益罢了。当收到客户机的联接请求时,hfaxd会foke出一个子进程加以处理;faxgetty有所不同,每个faxgetty进程都和系统中的调制解调器一一对应,和其它终端守护进程如mgetty相似,由init在系统初始化时启动。faxgetty是个友好的进程,能够识别数据、语音和传真信号。如果发现拨入的是数据/语音信号而不是期待中的传真信号,它会将处理权转交给适当的处理程序,因此你可以毫无问题地使用同一根电话线执行其它任务。<br>
3.安装和配置<br>
<br>
  在着手安装之前,我们需要有所准备。<br>
<br>
  1) 这里谈论的是运行在RedHat Linux 8.0上的HylaFAX 4.1.2。好吧,HylaFAX的最新版本是HylaFAX 4.1.5,不过我的经验主要是在HylaFAX 4.0/4.1.2上,而我的原则是不随便谈论不懂的东西,特别是公开场合:)<br>
  2) 确保modem安装正常。通常我们使用终端仿真程序连接到调制解调器,来测试它与电脑之间联接的正确性,比如说cu,<br>
<br>
   cu -l ttyS1<br>
  Connected<br>
  at+fclass=?<br>
  0,1,8<br>
  OK<br>
  ~.<br>
  Disconnected<br>
<br>
  只要调制解调器能够给出合理的回应,就表示联接正常。响应0,1,8表示我目前使用的调制解调器支持数据、class 1传真和语音功能。<br>
<br>
  另外,我们需要清楚地知道调制解调器的生产厂家、具体型号和固件(firmware)版本,出现问题的时候很有用处。记住,在邮件列表上提出问题的时候固件版本很重要!<br>
<br>
  3) Postscript和libtiff,<br>
  libtiff不必说,TIFF,更确切的说TIFF/F,是传真使用的标准格式,Postscript则是客户端和服务器较换数据的通用语言。这两个软件包不是万能,但没有则万万不能,所以在这里特别指出,安装时不要漏掉。<br>
<br>
  4) 硬盘空间分配<br>
  HylaFAX的主要程序文件分布 /var/spool/hylafax。所有收到的传真被存放到/var/spool/hylafax/recvq,对应的,所有已发送的传真被存放到/var/spool/hylafax/doneq。在安装操作系统的时候,我们就必须考虑到这一点,在/var分区为HylaFAX保留足够的空间以保存所有的传真。因为/var的空间被系统和众多程序所使用,这给HylaFAX带来了某些不明朗因素,因此,如果你决定在/var/spool/hylafax为HylaFAX挂载一个独占的分区,我也不会感到吃惊。<br>
<br>
  使用源代码安装<br>
<br>
  和其他开源软件相似,展开从 www.hylafax.org 下载的源代码包hylafax-4.1.2.tar.gz,保存到/tmp目录,然后展开,<br>
  tar -zxvf hylafax-x.x.x.tar.gz<br>
<br>
  展开后的源码被保存到一个新的目录hylafax-x.x.x下.进入源代码目录, <br>
  cd hylafax-x.x.x<br>
<br>
  不要急于安装,先阅读README以及相关说明文档。然后运行<br>
  ./configure <br>
<br>
  命令,稍等一会儿。熟悉GUN autoconf 和 automake的读者都知道,用户安装软件的默认的位置在/usr/local。习惯上我们通过指定configure的参数来改变安装位置,比如说,我们想要安装到/usr目录,则使用命令 <br>
  ./configurer --prefix=/usr<br>
<br>
  不过Hylafax稍有不同,它的configurator并不是用autoconf和automake生成,而是手工编写的,并不识别这些参数,而是使用了稍微不同的方法。如果你是坐在电脑旁边,手里拿着文章照做的话,现在显示器屏幕上可能已经出现了以下提示<br>
<br>
  HylaFAX configuration parameters (part 1 of 2) are:<br>
  [ 1] Directory for applications: /usr/local/bin<br>
  [ 2] Directory for lib data files: /usr/local/lib/fax<br>
  [ 3] Directory for lib executables: /usr/local/sbin<br>
  [ 4] Directory for system apps: /usr/local/sbin<br>
  [ 5] Directory for manual pages: /usr/local/man<br>
  [ 6] Directory for HTML documentation: /var/httpd/htdocs/hylafax<br>
  [ 7] Directory for spooling: /var/spool/hylafax<br>
  [ 8] Directory for uucp lock files: /var/lock/uucp<br>
  [ 9] Uucp lock file scheme: ascii<br>
   PostScript imager package: gs<br>
   PostScript imager program: /usr/bin/gs<br>
   Manual page installation scheme: bsd-source-cat<br>
   Default page size: North American Letter<br>
   Default vertical res (lpi): 98<br>
  Are these OK ?<br>
<br>
  你可以在这里为hylafax指定不同的路径。在中国大陆,最常使用的标准传真纸张尺寸是ISO A4,因此我们需要回答no并将 North American Letter改为需要的ISO A4,为此你可以输入ISO A4或者,简单些,A4。第[14]项Default vertical res由Group 3标准定义(即常说的G3传真),有两个选择:普通分辨率的98或良好分辨率196,目前默认的垂直分辨率是98 lpi。根据我的个人经验,较低的98 lpi感觉已经相当不错,不过,也许你希望修改它到 196 以获得更好的传真效果,当然,传真时间也会相应增长。顺带说一句,lpi是英制单位 line per inch的缩写,所以98 lpi大致相当于公制 4 线/毫米,而196 lpi约为公制7线/毫米。<br>
既然是(part 1 of 2),自然跟着(part 2 of 2):<br>
<br>
  HylaFAX configuration parameters (part 2 of 2) are:<br>
<br>
   Location of getty program: /sbin/agetty<br>
   Location of voice getty program: /sbin/vgetty<br>
   Location of sendmail program: /usr/sbin/sendmail<br>
   Location of TIFF tools: /usr/bin<br>
   Location of SysV init scripts: /etc/rc.d/init.d<br>
   Location of SysV start scripts: ../rc2.d ../rc3.d ../rc4.d ../rc5.d<br>
   Location of SysV stop scripts: ../rc0.d ../rc1.d ../rc6.d<br>
   Name of SysV start script: S97hylafax<br>
   Name of SysV stop script: K05hylafax<br>
   Init script starts faxq: yes<br>
   Init script starts hfaxd yes<br>
   Start old protocol: no<br>
   Start paging protocol: no<br>
  Are these OK ?<br>
<br>
  这里的默认设置相当妥当,不过我个人更喜欢start scripts和stop scripts的数字之和为100,所以总是修改stop scripts为 K03hylafax。如果使用其它的MTA而不是sendmail,情况有点棘手。简单来说,HylaFAX使用sendmail命令行发送邮件,所以若你的MTA可以成功地伪装sendmail并识别aliases 文件的话,一般是没有问题的――我的HylaFAX服务器就在运行Postfix,一切正常。<br>
<br>
  然后执行 make 命令编译系统,<br>
  [/] make<br>
<br>
  编译期间会有些警告信息,抱怨说使用了过时的函数调用――有点讨厌,但不碍事。完成后执行<br>
  [/] make install<br>
<br>
  安装HylaFAX到指定位置。<br>
<br>
  安装完成后会自动调用 faxsetup 设置运行环境相关的系统参数,此后配置改变的话,你也可以单独执行这个命令重新配置你的系统。<br>
<br>
  faxsetup依次向我们提出常规问题,比如国家代码(Country Code)、区码(Area Code)、长途拨号前缀(Long dialing prefix)、往日志写入ServerTracing消息时使用的名称(Syslog facility name for ServerTracing messing) 等等。<br>
<br>
  这些设定需要根据各人自身的情况设置,不可从一而论。有时配置脚本认死理,你必须迁就它,完成后手动修改配置文件即可。有时候我们会碰到点例外小状况,比如我设置香港分公司的传真服务器时,发现中国香港特别行政区只有国家代码而没有区码,这时你就要灵活处理。根据我的经验,一般可以使用默认值。<br>
<br>
  faxsetup运行完毕后,情况有点小变化,<br>
<br>
  添加了新用户fax,<br>
  /etc/services 下添加了 hylafax 的端口号 4557/4559,<br>
  [/ ] grep fax /etc/services<br>
  fax 4557/tcp # FAX transmission service (old)<br>
  hylafax 4559/tcp # HylaFAX client-server protocol (new)<br>
  /etc/aliases 中添加了 <br>
  grep FaxMaster /etc/aliases<br>
<br>
  这里faxsetup会自动运行newalises更新别名数据库。<br>
<br>
  已经够乱的了,不过我们还要手动在 /etc/inittab 里加上一点小把戏<br>
<br>
  [/] grep fax /etc/inittab<br>
  # HylaFAX faxgetty<br>
  f0:2345:respawn:/usr/local/sbin/faxgetty ttyS0<br>
这会确保init运行后自动启动faxgetty。init也会监控faxgetty并在必要的时候重新启动它。<br>
<br>
  完成后faxsetup自动运行faxaddmodem设置系统中的调制解调器。<br>
<br>
  faxaddmodem首先检测系统中的调制解调器,自动探测该调制解调器的能力,这时调制解调器的CS/TR灯会亮起。如果faxaddmodem不能正确识别你的调制解调器,它不得不询问一些有关通信的技术细节,诸如支持的AT命令,时间延迟等等使人不知所措的问题。好在faxaddmodem会从一个一般性的配置开始,因此如果你没有使用AT命令拨号的经验又不是一位串口通信行家的话,尽管使用你的Enter键好了,默认配置几乎总能正常运转。<br>
<br>
  调制解调器配置完毕后系统几乎可以运行了。若你的默认安装位置是/usr/local,还有一点小工作必须完成:<br>
  在 /etc/ld.so.conf 的末尾加上一行<br>
  /usr/local/lib<br>
<br>
  然后运行ldconfig使更动生效。否则会提示找不到库文件,拒绝运行。<br>
  输入命令<br>
  [/] kill -HUP 1 <br>
<br>
  让init重新读取配置文件 /etc/inittab 并启动 faxgetty。瞄瞄你的调制解调器的CS/TR灯,它现在应该亮。<br>
<br>
  输入命令<br>
  [/] /etc/init.d/hylafax start<br>
  HylaFAX: faxq hfaxd (without old protocol & without SNPP support).<br>
  来运行hfaxd和faxq。 <br>
  现在可以看看HylaFAX的状态<br>
  [/] faxstat<br>
  HylaFAX scheduler on athlon.setiatchina.org: Running<br>
  Modem ttyS0 (020-12345678): Running and idle<br>
<br>
  OK! 现在你的传真服务器已经在运转了!让我们来发送本服务器的第一份传真。创建一个新文件<br>
  [/] echo "Hello! This is my first facsimile. Thanks" > /tmp/testfax<br>
  sendfax -n -d /tmp/testfax<br>
<br>
  参数 -n告诉sendfax不要使用封面页。只见调制解调器上的LED灯一阵狂闪,看看这时传真服务器的状态<br>
  [/] faxstat<br>
  HylaFAX scheduler on athlon.setiatchina.org: Sending<br>
  Modem ttyS0 (020-12345678): Running and idle<br>
<br>
  给它一点时间,凝神倾听那"嘀嘀嘟嘟"的拨号音,难道你不觉得很有成就感吗?当一切安静下来的时候,传送完成。<br>
<br>
  最后,不要忘了清除临时文件<br>
  [/] rm -rf /tmp/hylafax-4.1.2 hylafax-4.1.2.tar.gz<br>
<br>
  4.进一步的配置<br>
<br>
  1)JobFmt<br>
  当运行faxstat查看传真队列状态的时候,典型的输入如下<br>
  HylaFAX scheduler on athlon.setiatchina.org: Running<br>
  Modem ttyS0 (020-12345678): Running and idle<br>
  JID Pri S Owner Number Pages Dials TTS Status<br>
  5 127 R root 11223344 0:1 0:3<br>
<br>
  它使用的就是默认的格式,<br>
<br>
  JobFmt: "%-3j %3i %1a %6.6o %-12.12e %5P %5D %7z %.25s"<br>
<br>
  你可以在/usr/lib/fax/hfaxd.conf中设置新的格式,以便更符合你的需要。特别是第4列Job owner定为%6.6o,对于Alexander这样的英文名字显然太少了;我通常还要加长第5列(Public (external) format of dialstring)%-12.12e到%-16.16e,因为这样才能容下9,00852,12345678这样的国际长途直拨电话号码。<br>
hfaxd.conf<br>
<br>
  因为这个设置可以在HylaFAX协议中使用JobFmt原语调整,所以有时仅在传真服务器上设定是不够的。例如,前面介绍的whfc客户端使用服务器上默认的JobFmt格式,结果你不得不在所有用户的电脑上修改设置。<br>
<br>
  2)Kill Time / MaxDial /MaxTries<br>
  发送失败的传真,根据错误的严重程度,被区别对待:有些只是小问题,比如对方占线,当然只需等一会儿重新发送就好了;也可能拨叫的传真号码根本不存在或者另一端根本不是传真设备――用户输入了错误的号码――这个问题不能被任何软件解决,因此立即被停止发送并传回错误消息。<br>
<br>
  有时传真在队列中会停留很久,比方说对方不巧电话没有放好导致总是忙音,这会占用系统资源。HylaFAX使用MaxTries、MaxDial、KillTime三道防线来防止此类无效的资源占用。<br>
<br>
  前面提到过,当两个传真系统通过电话网联接上并建立虚链路以后,要执行握手程序,以便协商某些细节问题,比如传真速度、压缩方式等,只有双方达成一致后才开始正式传送数据。在这个过程中如果出现某些问题,比如电话线路出现干扰,就可能需要"retry"一下。如果"retry"的次数太多,超过了上限MaxTries(默认是12次),HylaFAX将停止本次会话(但不会停止传送)。<br>
<br>
  MaxDial则用于为一份传真拨叫特定传真号码的最大次数,默认也是12次。也就是说,比如连续十二次都碰到忙音的话,HylaFAX会想,很可能是对方的电话没有放好吧,这可没办法了,只好停止传送。但是有些公司很节约(或者是申请不到足够的电话线),使用三合一甚至四合一机器,传真、电话、复印甚至打印都在同一部机器上,高峰时可能会很难打进去。这种情况下,你必须指定更大的MaxDial值以避免用户重传。<br>
<br>
  HylaFAX传真服务器每次拨叫失败后会等待更长的时间再重试。具体的等待时间由KillTimeMap指定,默认为5 5 5 15 60 240 720 1440 1440 1440 1440 1440,单位是分钟。即第1、2、3次失败后等待5分钟,第4次等待15分钟,第五次等待60分钟,以此类推。<br>
<br>
  如果你在它等待期间修正了错误,可以使用命令<br>
  [/] faxalter -p JOBID<br>
  或者<br>
  [/] faxalter -a now JOBID<br>
  --两者等价--立即发送队列中任务号为JOBID的传真。<br>
KillTime则是最后的雷霆手段,默认是3小时。午时三刻一到,任何在队列中停留超过KillTime的传真将被认为不可送达而立即终止。<br>
<br>
  MaxDial和KillTime这两个限制条件只要触发了任意一个即会导致任务终止,传真归于失败。<br>
<br>
  3)运行在程控电话交换机后的传真服务器 <br>
  有时候我们需要在程控电话交换机后运行HylaFAX服务器,在拨叫外线之前,往往需要先拨一个前缀号码,通常是"9"。我们当然可以在客户端的地址簿上为每个联系人的传真号码前加上一个9,不过还有更好更简单的方法。通过修改调制解调器配置文件config.ttySx中的拨号设定<br>
  #ModemDialCmd: ATDT%s # T for tone dialing<br>
  为<br>
  #ModemDialCmd: ATD9T%s # T for tone dialing<br>
  此调制解调器在拨叫任何号码前都会自动添加前缀"9",同时用户对此一无所知――这符合面向对象的信息隐蔽原则:)获得的好处是,如果有一天我们想把这部服务器移到程控电话交换机之前,只须花上5秒钟修改服务器配置文件的一行而不是所有用户的所有数据。<br>
<br>
  4)调制解调器组<br>
  默认情况下faxgetty为任务分配当前可用的任何调制解调器,但HylaFAX也提供由指定调制解调器/调制解调器组发送的功能。我们可以将多个调制解调器分配到一个组中,方法是在调制解调器配置文件/usr/local/lib/fax/config.ttySx中指定一个或多个ModemGroup参数,其值为正则表达式。当指定调制解调器组发送时,faxgetty会在匹配的调制解调器中为任务分配调制解调器。<br>
<br>
  我使用这个功能保留一个调制解调器专用于接收传真,而发送全部通过SENDER组中的调制解调器进行。<br>
<br>
  5.我应该使用什么样的调制解调器?<br>
<br>
  你能够买到的最贵的那种--我很想这样回答。遗憾的是,生活总是不那么简单。这里的要点在于,HylaFAX服务器和传真设备之间的通信是通过AT命令集完成的。理论上说,能够理解AT命令的传真设备都是可以的和HylaFAX一起运行的。但在实际生活当中,明智的方法是只购买经过验证的产品。因此请检查www.hylafax.org的HCL(Hardware Compatibility List),看看是否能够买到上面列出的产品。<br>
<br>
页: [1]
查看完整版本: 安装与设置FAX传真服务器 (1)