下一页 上一页 目录

5. 安装

5.1 RedHat

我从IT商店里随便找了些零件组装了一台PC - 这本身就是个有趣的练习 - 最后得到了一台P133、32MB内存和540MB硬盘的测试系统。我计划用更大的硬盘替换掉这个硬盘,但想先在系统的其余部分测试安装。

之前安装过几次RH6,我*以为*这会是小菜一碟...我想“不祥之语”就是我要找的词组!安装过程似乎很顺利,但在第一次启动(以及随后的启动)时,当我系统尝试解压缩 Linux 时,遇到了“无效的压缩格式”错误。后来系统启动时卡在“LI”提示符处,并且在 UCOL 上的一些问题突显出这是驱动器几何结构问题。系统可以从 MSDos 启动盘启动,并通过 LOADLIN 启动 Linux,但这远非可以接受。因此改用了 1GB 的硬盘。

第二个问题是网卡 (NIC)。我最初使用的是 Realtek8019 ISA 卡,这是一款 NE2000 兼容卡,因此*应该*使用 ne2000 驱动程序。经过多次尝试甚至重新编译内核,该卡仍然无法使用所述驱动程序,所以我将其与另一台 PC 上的 D-Link DT-530 PCI 卡进行了交换。据报告,这款卡可以使用 'tulip' 驱动程序。然而,RedHat 安装程序无法检测到它。快速浏览 D-Link 网站后,发现最新的 via-rhine 驱动程序是一个解决方案。该驱动程序被下载、编译和安装,同时还从同一网站 (http://www.scyld.com/network/via-rhine.html) 下载了 pci-scan 驱动程序文件。该网站还包含出色的安装说明。安装了新驱动程序后,机器启动并运行,一些 ping 测试证明网卡运行良好。

5.2 Samba

版本 2.0.3 是作为 RedHat 安装的一部分安装的,由于这是一个试运行,我没有理由下载最新的版本(在撰写本文时,最新版本是 2.0.7)。没有安装 smbclient,因为 Linux 机器没有理由访问 Windows PC 上的共享。配置非常简单,这要归功于 SWAT 实用程序,可以通过将 Web 浏览器指向端口 901 (即:http://localhost:901) 来访问它。我甚至能够从网络中的一台 Windows 机器上访问和配置它 (http://<ip address>:901)。

Samba 配置

由于某些原因,我们的用户习惯于不探索超出其工作组的网络 - 即使他们通常可以。为了避免他们感到困惑,并将事故降到最低,服务器被放置在自己的工作组中。关于 Samba 的设置和配置有很多优秀的文档,因此我将读者引导至这些文档,而不是在此重复信息。

由于我们的 PC 都具有静态 IP 地址,并且用户每天主要坐在同一台 PC 前,因此我选择了 Samba 中的共享安全选项。这有使资源对任何浏览网络的人开放的危险,所以我还在 globals 部分使用了 hosts-allow 功能。这被限制为我们网络上使用部分 IP 地址的那些人。启用了指向各个目录的共享,所有目录都在新的 /resources 目录下。

Microsoft Word 模板

所有共享都工作正常,但当涉及到 MS Word97 的模板时除外。Word 有一个功能,您可以在其选项中设置工作组模板位置。问题是,如果该位置指向 Samba 共享,则该共享不能位于顶层 (即://SERVER/template)。当您单击“文件|新建”时,MSWord 会报告它无法打开所选位置的模板,但您可以通过“文件|打开”从该位置打开模板。更令人困惑的是,您可以在资源管理器中导航到所述顶层共享,然后双击模板文件,Word 将根据您选择的模板创建一个新文档。解决方法被发现非常简单,只需共享模板目录的父目录,并将 Word 设置为在该路径中查找 (即://SERVER/resource/template)。尽管对文件权限和用户名进行了大量修改,但似乎这是使其工作的唯一方法。我仍然不确定是哪一端导致了问题,Word 似乎是可能的罪魁祸首(因为其他所有程序都可以正常使用这些文件),但 Samba 也可能有问题(因为 Windows 顶层共享在 Word 中可以正常工作)。

5.3 电子邮件

选择 qmail 作为邮件传输代理 (MTA) 而不是 RedHat 提供的 sendmail。这主要是因为前者比后者具有更易于配置和更好的安全性的声誉。

qmail

最新的源文件是通过 http://www.qmail.org 的镜像下载、编译和安装的。qmail 提供了大量的文档,但我还选择使用 Life With Qmail (http://web.infoave.net/ dsill/lwq.html)。本文档类似于 HOWTO,并且可能是我们用途最有用的文档。

Qmail 安装起来很容易,但我在使用它时遇到了一些小问题。出于性能和可靠性考虑,我将其配置为使用 Maildir 作为默认传递方式。旧的标准邮件程序无法识别这种类型的传递,因此我花了一段时间才弄清楚为什么我的邮件已发送,但我却看不到它。解决方案是使用 mutt (http://www.mutt.org),它支持 Maildir。当然,这是一个小问题,因为用户不会使用 Linux 机器来阅读他们的邮件,而是通过 Windows 工作站上的 pop 客户端 (MS Outlook) 获取邮件。

fetchmail

Fetchmail 被用作收集代理,它的安装和设置非常简单,尤其是当我发现了 fetchmailconf :o) 时。我们不需要始终收集邮件,而是希望以设定的时间间隔收集邮件。为了方便这一点,每天使用 cron 作业通过 -d 开关调用 fetchmail,并由另一个 cron 作业停止。

我们从网络主机服务器上的十个邮箱中收集邮件,其中一个是批量重定向,任何发送到我们主机名但不是其他九个特定地址之一的邮件都会被存入该邮箱。使用了 fetchmail 的 multidrop 功能,使我们能够从这个邮箱下载所有邮件,然后使用预期收件人的地址通过 smtp 将其发送到 qmail。我们遇到的一个问题是从我们的新 qmail 服务器向我们的销售人员发送邮件。他们直接从网络主机收集邮件,但他们的域名与其他所有人相同。这意味着每次本地用户尝试向其中一位销售人员发送消息时,qmail 都会尝试查找本地用户名以将消息传递给该用户,并且在找不到匹配的用户后,将其退回给邮局管理员。解决方案是为销售人员使用辅助电子邮件地址。我们的网络主机不提供拨号服务,因此我们的销售人员每个人都有自己的免费 ISP 帐户来访问网络。此帐户为他们提供了一个不同域上的地址,因此 qmail 能够使用别名文件将所有发送给他们的邮件转发到此地址。

注意:为了让销售人员的生活更轻松,我们的网络主机将所有发送到他们邮箱的邮件重定向到这些人的免费 ISP 邮件地址 - 这意味着销售人员不必为在笔记本电脑上处理多个帐户和地址而感到“困惑” - 保佑他们 :o)。

5.4 传真

旧的服务器 PC 使用 Microsoft 的网络传真在网络上共享传真服务。然后用户使用 MS Word 模板(其中包含 VBA 宏)自动创建和发送传真,错误会通过邮件发送给用户。为了在新服务器上提供相等甚至更好的服务,我选择 mgetty+sendfax 来提供本地传真服务。这很容易安装,我很快就能够从 Linux 服务器假脱机传真。从 Windows 客户端假脱机传真被证明是一个更难解决的问题,并导致了与最初选择的更改。

从 Windows 客户端发送传真

以前的安排是从服务器 PC 共享传真调制解调器,使用 MS Outlook 下的 Microsoft 传真为所有 Windows 客户端提供传真服务。此外,我们使用了标准的 Word97 模板,该模板附加了一个宏,用于自动发送传真。利用 Sendfax VBA 命令,此宏意味着用户只需填写模板并单击 Word 工具栏上的“立即传真”按钮即可发送传真。他们不必处理任何第三方程序,这些程序要求他们重复输入刚刚在模板中输入的所有内容。这种安排因此为用户提供了无缝传真,而且我很希望继续使用它。

理想情况下,我想做的是找到某种方法,将预期的文档、用户名和传真号码从 Windows 客户端应用程序传递到 Linux 机器上的 faxspool。为任何 Windows 应用程序提供传真服务的传统方法是设置一个指向传真调制解调器的“打印机”。

HylaFAX

最初,我安装了 mgetty+sendfax 以用作传真服务器。这主要是因为它随 RedHat 6 提供,因此很容易获得。不幸的是,事实证明它不适合我们的特定用途,因为我们需要某种使用 Microsoft Word 宏将传真发送到传真服务器的方法。有一些出色的 mgetty+sendfax Windows 客户端,但不幸的是,它们都要求用户在每次发送传真时都输入传真号码等。我想要一个与我们当前解决方案相匹配的解决方案,用户在其中填写 Word 模板,单击按钮,宏从文档中读取传真号码,并使用 VBA Sendfax 命令通过 MS Fax 发送传真。

经过深思熟虑和搜索,我被指向 HylaFAX (http://www.hylafax.org),它有一个 Windows 客户端 WHFC (http://www.uli-eckhardt.de/whfc/)。该客户端允许通过 VBA 宏进行通信,这正是我想要的。Hylafax 安装正常,尽管我遇到了一些相当恼人的客户端访问问题。通过确保客户端 IP 地址被正确添加到不仅是 /var/spool/fax/etc/hosts(如手册页和 FAQ 中所示),而且还添加到 /var/spool/fax/etc/hosts.hfaxd,这些问题得到了解决。完成此操作后,我很快就启动并运行了。WHFC 安装非常容易,并在几秒钟内完成设置。

Word 宏

如前所述,我们的用户习惯于能够单击一个按钮从 MS Word97 中发送传真文档,因此保持新服务器上的此功能可用非常重要。WHFC 具有 OLE 功能,因此我们能够编写一个新的宏,该宏允许用户从 Word 中发送传真,而无需在辅助弹出框中输入传真详细信息。该宏执行两件事 - 首先,它将当前文档打印到文件,然后它使用 WHFC 的 SendFax OLE 函数将打印的文件发送到 HylaFAX。我们使用的打印机驱动程序是 WHFC 设置说明中推荐的 Apple Laserwriter 16/600(ps) 驱动程序。

以下是我们使用的宏代码...

Sub Spool_fax()
' Spool_fax Macro
' Macro created 09/08/00 by Ryan Cartwright 

Dim givenfax, realnum As String
Dim whfc As Object
Dim OLE_Return As Long
Dim Box_Return As Integer 

' First we print the document to a local file - note that Background must be false
' otherwise the function will return before the file is entirely written
' and thus HylaFAX will be unable to convert it properly.
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
   wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
   Collate:=True, Background:=False, PrintToFile:=True, _
   OutputFileName:="c:\faxtemp\printout.ps", Append:=False 

' In our template the user is asked by an Autonew macro for the faxnumber etc.
' the field number for the faxnumber is 8, we need to retrieve this
' and add a 9 to the front of it
Set givenfax = ActiveDocument.Fields(8).Result realnum = "9" + givenfax 

' Now we create the OLE object and call the Sendfax() routine
Set whfc = CreateObject("WHFC.OleSrv")
OLE_Return = whfc.SendFax("c:\faxtemp\faxoutput.ps", realnum, False) 

' Finally we test the returned value and report accordingly
If OLE_Return &<= 0 Then
   Box_Return = MsgBox("Error sending file", 16, "FAX Not Spooled")
Else
   Box_Return = MsgBox("Fax Job ID:" & _ 
      OLE_Return & Chr(13) & _ 
      "You will be notified by email if it was successfully sent", _ 
       0, "Fax spooled")
End If
Set whfc = Nothing
End Sub 


下一页 上一页 目录