ryan@crimperman.org
v0.1 - 2000 年 9 月 21 日:原始文档提交
v1.2 - 2003 年 3 月 19 日:作者联系方式已修改,拼写错误已更正。少量文本更改。添加了“更多评论”部分。版本已修改以适应 CVS。
v1.3 - 2004 年 10 月 6 日:少量拼写和语法错误已更正。少量文本更改。
本文档首先献给耶稣基督,我的主和救主,感谢他赐予我完成此项工作的能力。其次,献给此处提及的各种实用程序和文档的作者。感谢他们,我拥有了完成这项工作的工具。
Linux(或更准确地说是 GNU/Linux)在工作场所越来越受欢迎。它主要部署在互联网市场的服务器级别,但它开始进入其他领域,例如内部网络服务器和桌面工作站。考虑到这一点,并出于以下给出的原因,我的公司决定在我们的基于 Windows 9x 的网络中部署基于 Linux 的局域网服务器。我在启动这个项目时只掌握了 Linux 的基本知识和一些 Unix 知识。在项目过程中,我想到编写一份描述所涉及任务的文档可能会有所帮助。我找不到这样的文档,因此写了这一篇。
您在这里找不到重复的关于所使用的各种工具和实用程序的安装和配置文档。我认为没有理由重复这些内容,而是选择包含在安装或配置这些工具和实用程序时遇到的问题,以及针对这些情况的解决方法/解决方案。
给出新服务器将要部署的环境的简短背景可能会有所帮助。
大约 35 台 PC 通过以太网局域网连接在一个庞大的站点中。与许多办公室一样,这个办公室最初只有一台 PC,然后一点一点地发展成现在的环境。出于速度、便利性和成本的原因,采用了对等网络。用户使用共享级访问在网络上共享目录和打印机。
其中一台 PC 被指定为“服务器”(从现在开始,我将称之为“服务器 PC”)。对等网络本身没有服务器,因此这台 PC 与其他 PC 完全相同,只是它没有固定的用户。它用于存储所有用户使用的通用文件(模板、小型数据库文件等),并且还包含内部邮件系统的 Microsoft Mail 邮箱目录。网络传真也通过这台 PC 使用 Microsoft Fax 路由,最近,通过邮件服务器实用程序添加了互联网电子邮件分发,该实用程序定期连接到外部邮件服务器并相应地重新分发邮件。它还共享一台打印机,供附近的大多数用户使用。邮件和传真系统的客户端由 Microsoft Outlook 处理。
通过服务器 PC 的流量增加,尤其是互联网邮件,增加到文件访问速度减慢,用户有时无法登录到互联网邮件服务器的程度。起初怀疑是互联网邮件服务器程序,但进一步的测试证明这是不真实的。用户变得越来越沮丧,随后将这些情绪发泄到 IT 支持人员身上。
还有一个次要问题需要考虑。拥有指定的服务器 PC 意味着从管理角度来看,一台完全正常的 PC “什么也没做”,因为没有人坐在它面前。因此决定允许临时用户将这台 PC 用作工作站。PC 有时会在这些临时使用期间锁定为工作站,这意味着在重新启动期间所有用户都无法访问重要文件,随后需要清除数据库和文件锁,以允许用户恢复访问他们的数据。
这种情况需要某种补救措施。在最基本的层面上,选项只是“维修或更换”,而且通常情况下,资金有限。
乍一看,维修是最快、最便宜的选择,但它很少容易,尤其是当您不确定问题的确切原因时。作为工作站,这台 PC “没有”任何问题,但作为服务器,它似乎常常不堪重负。通过安装网络交换机来提高网络流量速度,这种情况可能得到部分解决,但可能会在服务器 PC 上造成瓶颈,因为它难以跟上流量需求。该 PC 运行的是 Windows 98,作为桌面环境完全足够,但作为服务器开始显得吃力。充其量,人们认为此选项只会暂时推迟问题,尤其是如果网络增长持续下去。
用专用服务器更换服务器 PC 并建立客户端-服务器关系将允许预期的网络规模和流量的增加。传统上,专用服务器将涉及相当大的支出,因为这里的选项是 Windows NT 或 NetWare。自 20 世纪 90 年代后期以来,Linux 非常受关注,它提供了一种替代的更换策略。
Linux 在所有意图和目的上都是 Unix 克隆(为了更准确的描述,我建议您在其他地方查找,因为它与本文档无关),因此它融合了后者出色的网络能力。正是这种特性(以及其他特性)导致它在互联网服务器市场中的部署不断增加。它可以为手头的问题提供低成本的更换策略,并且只需很少或无需额外成本即可应对预期的网络增长。
Linux 是一种有效且经济高效的服务器解决方案这一点毋庸置疑,但我们需要知道它是否可以在这种情况下提供特定的解决方案。Linux 能否履行当前服务器 PC 提供的所有角色,包括文件服务、内部邮件、网络传真和互联网邮件重新分发?初步询问表明它可以,因此问题不再是“Linux 能做到吗?”,而是更多地变成了“我能让 Linux 做到吗?”。
在向管理层提出任何部署论点之前,似乎明智的做法是研究该论点。这将有助于我进一步了解 Linux 管理的更精细的细节。我的 Linux 经验源于在家中使用几个月,而且由于公司内部没有使用 Linux,因此在所有意图和目的上,我都是 Linux 专家。
我开始在新闻组(尤其是 uk.comp.os.linux (u.c.o.l.))潜水研究。虽然在某些圈子里潜水可能会受到非议,但我建议在像这样的项目的早期阶段这样做。阅读其他人的问题和答案可以为你在未来可能遇到的项目的方法提供宝贵的见解。俗话说,不从别人的错误中吸取教训的人是傻瓜。此外,我还有一本 O'Reilly 出版的《Learning RedHat Linux》(http://www.ora.com)这本书。这本书是在我安装家庭版 Linux 时使用的,对于此目的来说非常出色。它还包含一个非常重要的关于 Samba 的章节 - Samba 是一种网络应用程序,允许 Linux 充当 Windows 9x PC 的文件服务器。我还广泛使用了 Linux 文档项目(tLDP - http://www.tldp.org),尤其是 Linux 用户指南、系统管理员指南和网络管理员指南。
我再怎么强调研究对于整个项目结果的重要性也不为过。有很多短语和轶事准确地总结了这一点,包括“未雨绸缪”和 5P 原则(充分的准备预防糟糕的性能)。
注意:- 我知道经常在声明前加上第六个 P,但我选择不包含它。
我的初步研究揭示了我应该前进的方向以及我应该更多地了解哪些特定程序。这些包括:-
虽然还有其他替代方案(例如 postfix 和 exim 用于电子邮件),但这些方案似乎适合我的目的,并且向 u.c.o.l. 快速提问证实了这些是很好的选择。我知道可以进行网络传真服务,并且有工具可用 - 《Linux Journal》上的文章和 u.c.o.l. 用户的建议都很有帮助。
这被证明是早期阶段最令人焦虑的任务之一。意识到 Linux 提供了最佳解决方案是一回事,而考虑引导我的老板(们)得出相同的结论则是另一回事。
虽然实际上没有涉及任何支出成本(始终是消除障碍的好方法),但存在时间问题。该项目将涉及我边做边学的一定时间,这反过来将导致解决方案到位之前的整体时间更长。
诱惑是指出现有解决方案的缺点,然后将 Linux 提案作为全能英雄呈现。这不太可能奏效,因为它可能会被解释为我仅仅因为喜欢这个想法而推动解决方案。此外,如果我在部署 Linux 服务器方面出现任何延迟(或感知到的延迟),都将更难解释。我必须将我的论点作为对公司的好处来呈现。为此,我可以使用现有问题,但我必须小心避免“为了 Linux 而 Linux”的观点。
碰巧的是,我所有的担忧都是徒劳的 - 在一次关于现有服务器的对话中,IT 经理提出了我即将争论的解决方案!但是,他确实需要一些保证,这些保证都与我在此处讨论的内容一致。当然,您的情况会有所不同,但在任何情况下,尽可能客观地提出论点肯定是有益的。
我选择 RedHat 6.0 用于这个项目。这归结为一个非常简单的原因 - 我已经有了一个副本,因此可以更快地开始。而且我已经习惯了它,因为我一直在家中使用它。我看不出在这种情况下应该使用一个发行版而不是另一个发行版的真正理由,除了个人偏好。有几个发行版的一些服务器版本,再次使用这些版本也属于个人偏好领域。我对各种发行版的经验有限,因此感到自己没有足够的资格提出建议,我的建议是您可能希望消除尽可能多的未知因素,因此学习不同发行版的细微差别可能会造成进一步的障碍。
我从 IT 商店里闲置的零件组装了一台 PC - 这本身就是一项有趣的练习 - 最终得到了一台 P133、32MB 内存和 540MB 硬盘的测试系统。我计划用更大的硬盘更换硬盘,但想先在系统的其余部分测试安装。
之前安装过几次 RH6,我 *知道* 这将是轻而易举的事……我相信“不祥的预感”是我在这里要找的短语!安装似乎很好,但在第一次启动(以及随后的启动)时,当我系统尝试解压缩 Linux 时,我遇到了“无效的压缩格式”错误。这演变成系统在启动时挂起,出现“LI”提示,并且在 UCOL 上提出的一些问题突出了这个问题是驱动器几何结构问题。系统可以从 MSDos 启动盘启动,从 LOADLIN 启动 Linux,但这远非可以接受。因此使用了 1GB 硬盘。
第二个问题是网卡。我最初使用的网卡是 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 测试证明网卡运行良好。
版本 2.0.3 作为 RedHat 安装的一部分安装,并且由于这是一个试运行,我看不出有任何理由下载最新的版本(在撰写本文时为 2.0.7)。smbclient 未安装,因为 Linux 机器没有理由访问 Windows PC 上的共享。由于 SWAT 实用程序,配置非常简单,可以通过将 Web 浏览器指向端口 901(即:https://:901)来访问该实用程序。我甚至能够从网络上的其中一台 Windows 机器访问和配置它 (http://<ip address>:901)。
出于某种原因,我们的用户习惯于不探索工作组以外的网络 - 即使他们经常可以这样做。为了避免他们感到困惑并将事故降到最低,服务器被放在了自己的工作组中。关于 Samba 的设置和配置有很多优秀的文档,因此我将读者推荐给这些文档,而不是在此处重复这些信息。
由于我们的 PC 都具有静态 IP 地址,并且用户每天主要坐在同一台 PC 前面,因此我选择了 Samba 中的共享安全选项。这存在使资源对任何浏览网络的人开放的危险,因此我还在全局部分中使用了 hosts-allow 功能。这被限制为使用部分 IP 地址的我们网络上的用户。启用了指向各个目录的共享,所有目录都在新的 /resources 目录下。
所有共享都工作正常,但当涉及到 MS Word 97 的模板时除外。Word 有一个功能,您可以在其选项中设置工作组模板位置。问题是,如果该位置指向 Samba 共享,则该共享不能位于顶层(即://SERVER/template)。当您单击“文件|新建”时,MS Word 会报告它无法打开所选位置的模板,但您可以通过“文件|打开”从该位置打开模板。这进一步令人困惑,因为您可以在资源管理器中导航到所述顶层共享,然后双击模板文件,Word 将创建一个基于您选择的模板的新文档。解决方法被发现非常简单,即共享模板目录的父目录,并将 Word 设置为查找该路径(即://SERVER/resource/template)。尽管对文件权限和用户名进行了大量修改,但这似乎是唯一可行的方法。我仍然不确定是哪一端导致了问题,Word 似乎是可能的罪魁祸首(因为其他所有程序都可以正常使用这些文件),但 Samba 也可能被指向(因为 Windows 顶层共享可以在 Word 中工作)。
qmail 被选为邮件传输代理 (MTA),而不是 RedHat 附带的 sendmail。这主要是因为前者比后者更易于配置且安全性更高而闻名。
最新的源文件是通过 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 被用作收集代理,它的安装和设置非常简单,尤其是在我发现 fetchmailconf :o) 之后。我们不需要一直收集邮件,而是更喜欢按设定的时间间隔收集邮件。为了方便起见,fetchmail 每天通过 cron 作业使用 -d 开关调用,并通过另一个 cron 作业停止。
我们从我们的网站托管服务器上的十个邮箱收集邮件,其中一个是批量重定向,其中发送到我们的主机名但不是发送到其他九个特定地址之一的任何邮件都将存入该邮箱。fetchmail 的 multidrop 功能被用来允许我们从这个邮箱下载所有邮件,然后使用预期的收件人地址通过 smtp 将其发送到 qmail。我们遇到的一个问题是从我们的新 qmail 服务器向我们的销售人员发送邮件。他们直接从网站托管服务器收集邮件,但他们的域名与其他所有人的域名相同。这意味着每次本地用户尝试向其中一位销售人员发送消息时,qmail 都会尝试查找本地用户名以将消息传递给该用户,并且在找不到匹配用户后,会将其退回给邮局管理员。解决方案是为销售人员使用辅助电子邮件地址。我们的网站托管服务器不提供拨号服务,因此我们的销售人员各自拥有自己的免费 ISP 帐户来访问 Web。此帐户为他们提供了一个不同域上的地址,因此 qmail 能够使用别名文件将所有发送给他们的邮件转发到此地址。
注意:为了让销售人员的生活更轻松,我们的网站托管服务器将发送给这些人的邮箱的所有邮件重定向到免费 ISP 邮件地址 - 这意味着销售人员不会因为必须在其笔记本电脑上处理多个帐户和地址而感到“困惑” - 保佑他们 :o)。
旧的服务器 PC 使用 Microsoft 的网络传真在网络上共享传真服务。然后用户使用 MS Word 模板(其中包含 VBA 宏)自动创建和发送传真,错误将通过邮件发送给用户。为了在新服务器上提供相等甚至更好的服务,我选择 mgetty+sendfax 来提供本地传真服务。这很容易安装,我很快就能够从 Linux 服务器假脱机传真。从 Windows 客户端假脱机被证明是一个更棘手的问题,并导致了从原始选择的更改。
以前的安排是从服务器 PC 共享传真调制解调器,使用 MS Outlook 下的 Microsoft Fax 为所有 Windows 客户端提供传真服务。除此之外,我们还使用了一个标准的 Word 97 模板,该模板附加了一个宏,用于自动发送传真。利用 Sendfax VBA 命令,此宏意味着用户只需填写模板并点击 Word 工具栏上的“立即传真”按钮即可发送传真。他们不必处理任何第三方程序,这些程序要求他们重复刚刚在模板中输入的所有内容。因此,这种安排为用户提供了无缝传真,我渴望继续使用它。
理想情况下,我想要做的是某种方法,可以将预期的文档、用户名和传真号码从 Windows 客户端应用程序传递到 Linux 机器上的 faxspool。为任何 Windows 应用程序提供传真服务的传统方法是设置一个指向传真调制解调器的“打印机”。
最初,我安装了 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 安装非常容易,并且在几秒钟内设置完成。
如前所述,我们的用户习惯于能够点击一个按钮从 MS Word 97 中发送传真文档,保持此功能在新服务器上可用非常重要。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
这几乎涵盖了启动和运行我们的新服务器所需的所有工具和实用程序的安装和配置。话虽如此,一个好的服务器不仅仅是完成所需工作的工具。我建议您阅读前面提到的《Linux 系统管理员指南》,尤其是第 10 章 - 备份!
Linux 服务器在该项目启动约两个月后到位。我相信如果我知道自己在做什么,这可能只需要几天时间,但我建议任何考虑类似项目的人给自己留出充足的时间。如果您像我一样在 Windows 中磨练了您的支持能力,则尤其如此。Linux 并不难使用,只是不同,从 Windows 过渡需要时间。在开始之前阅读周围的优秀文档,您可能还会发现,在旧机器仍在其他地方运行时,在辅助机器上逐步尝试会更有益。迁移比直接交换更好。
自从首次编写本文档以来,我在 Linux 和此处提到的一些工具方面获得了更多的经验。我现在在家和工作中将 Linux 用于各种任务。此后,我离开了为之设置此特定服务器的公司,但据我所知,他们在大约三年后仍在继续使用它(我认为他们在大约这个时候用更新的基于 Linux 的解决方案替换了它)。如果您正在考虑使用 Linux 作为另一种操作系统的替代方案,我鼓励您对此进行研究。
不仅我进步了,而且 Linux 的不断变化的面貌意味着本文档的必要性有所降低。许多发行版(尝试在此处查找 http://www.linux.org/dist/)通过预配置所需的选项,使将 Linux 用作 Windows 局域网服务器变得更加容易。通常,您可以找到专门用于此处提及的用途的专用产品。
但是,总会有人想要“亲自动手”或只是想自己做事并通过该过程学习。我可以理解这一点,因为此处显示的经验教会了我更多关于 Linux 的知识,而不是我最初预期的。
此外,随着 Microsoft 的世界远离 Windows 9x 等客户端,已经出现了对共享日历、地址簿等(基本上取代 Microsoft 的 Exchange Server)的需求。Linux 下通过各种应用程序和工具提供了许多此功能,其中一些是专有的,但我决定不在此处列出它们,因为我认为最好(也更简单)将本文档保留在其原始目的范围内。如果您需要这些东西,请查看各种发行版提供的旨在一次性提供文档中列出的所有功能的一些产品。