第十二章 管理Taylor UUCP
12.1 历史回顾
UUCP是AT&T贝尔实验室的Mike Lesk在七十年代末期设计的,用于在公共电话线路上提供简单
的拨号上网服务。由于许多想在自己的机器上有email和Usenet News的人仍然使用modem进行
通信,所以UUCP仍然很流行。尽管有运行于各种类型的硬件平台和操作系统上的许多实现版
本,然而它们在很高的程度上是兼容的。
然而,尽管在过去的这些年中有许多软件以各种方式已成为“标准”,还没有一个UUCP软件
被称为UUCP的。自从在1976年第一个版本实现以来,它经历了一个稳固的演变过程。目前,
存在着两个主要种类,它们在硬件支持和配置上是不同的。它们都有各式各样的实现,每种
实现都有一些细微的差别。
其中一类就是所谓的“版本2 UUCP”,它是Mike Lesk、David A. Novitz和Greg Chesson于
1977年实现的。尽管这是一个很老的版本,但仍然被经常使用。版本2的近期实现提供了更新
的UUCP种类的易用性。
第二种是于1983年开发的,并且通常被称为BNU(基本连网工具)、HoneyDanBer UUCP,或简
称为HDB。这个名称产生自作者的名字,P. Honeyman、D. A. Novitz和B. E. Redman。HDB考
虑到了排除版本2 UUCP的某些不足之处。例如,增加了新的传输协议并且针对每个与之有UU
CP通信的站点都有一个独立的目录。
目前随同Linux发行的UUCP实现是Taylor UUCP 1.04,[1]本章即基于这个版本进行讨论。Ta
ylor UUCP 版本1.04是于1993年2月发布的。除了传统的配置文件以外,Taylor UUCP也可被
编译成使用新的样式 ? a.k.a.“Taylor”―配置文件。
最近发行了1.05版,并且不久就将融入大多数Linux发行版中。这些版本的不同之处主要在于
你不太会使用到的特性上,所以你可以使用本书中的信息来配置Taylor UUCP 1.05版。
对于包含在许多Linux发行中的Taylor UUCP,它通常被编译成BNU兼容的,或者是使用Taylo
r配置方案的,或者间而有之。由于后者更具灵活性,并且可能比经常是晦涩的BNU配置文件
易于理解,所以下面我将介绍Taylor配置方案。
本章的目的不是给你一个对UUCP命令的命令行选项是什么和怎么使用的详尽描述,而是给你
一个对如何设置一个可使用的UUCP站点的概要介绍。第一部分给出了有关UUCP是如何实现远
程执行和文件传输的一个简要说明。如果对于UUCP,你不是一个完全的新手的话,你可以跳
过这一部分而直接到UUCP的配置文件部分,该部分解释了用于设置UUCP的各种文件。
然而,我们将假设你对UUCP套件的用户程序很熟悉。这些程序是uucp和uux。有关这两个命令
的介绍,请参见在线手册页。
除了通常使用的uux和uucp程序,UUCP套件还包含了仅用于管理目的的一系列命令。它们用于
监视通过你的节点的UUCP通信、删除老的日志文件或者汇总统计参数。这里将不对它们进行
任何说明,因为它们与UUCP的主要任务是并行的。而且,它们有很好的文档可作参考并且很
容易理解。不过,还有一类,它们是由UUCP实际的“工作机器”组成。它们被称为uucico(
这里cico代表copy-in copy-out)和uuxqt―用于执行远程系统发送来的作业。
12.1.1 有关UUCP的更多信息
对于不能在本章中找到所要信息的人,应该阅览随该软件包而来的文档。这是描述使用Tayl
or配置方案进行设置的一打texinfo文件。可以分别使用tex和makeinfo将texinfo转换成DVI
和GNU信息文件。
如果你想使用BNU或者甚至是(令人战栗的)版本2配置文件的话,这里有一本很好的书,“
管理UUCP和Usenet”([Oreilly89])。我发现它非常有用。其它有关Linux上UUCP的很好的
信息来源是Vince Skahan的UUCP-HOWTO,它是定期地投递到comp.os.linux.announce上的。
当然还有一个专门讨论UUCP的新闻组,叫做comp.mail.uucp。如果你有针对Taylor UUCP的问
题,你最好在那里去问他们,而不要在comp.os.linux组中。
12.2 概述
12.2.1 UUCP传输和远程执行的概要
对于理解UUCP至关重要的概念是作业(jobs)。用户使用uucp或uux发起的每一个传输被称作
一个作业。它是由在远程系统上执行的命令,以及将要被在站点间传输的文件集构成。当然
,可以省略其中一部分。
作为一个例子,假设你在你的主机上发出了下面的命令,该命令使得UUCP将文件netguide.p
s拷贝到主机pablo上,并且使得它执行lpr命令来打印这个文件。
$ uux ?r pablo!lpr !netguide.ps
UUCP通常不会立刻调用远程系统来执行一个作业(不过你可以使用kermit来做到)。而是临
时地将该作业描述存储起来。这称为假脱机操作(spooling)。作业所存放的目录树因此也
就称为假脱机目录(spool directory)并且通常位于/var/spool/uucp中。在我们的例子中
,该作业描述含有将被执行的远程命令(lpr)的有关信息、要求进行该操作的命令以及其它
一些项目。除了这个作业描述,UUCP也需要存储输入的文件netguide.ps。
假脱机文件所在的确切位置和命名方法是可以不同的,这依赖于一些编译时的选项。HDB兼容
的UUCP通常将假脱机文件存储于命名为/var/spool/uucp/site的目录中,这里site是远端站
点的名称。当以Taylor配置方式编译时,UUCP将针对不同类型的假脱机文件在指定站点的假
脱机目录下再创建子目录。
在规定的时间间隔,UUCP将向远程系统拨号。当与远程系统的连接建立后,UUCP就会传输描
述作业的文件,加上所有的输入文件。输入的作业不会立刻被执行的,而要到连接结束关闭
之后。这是用uuxqt来执行的,如果有指定到其它站点的作业,它也处理这些作业的转发工作
。
为了区分重要的和不很重要的作业,UUCP给每个作业指定了一级别(grade)。这是一单个字
母,范围从0到9、A到Z以及a到z,级别从大到小。Mail通常以级别B或C进行假脱机操作,而
news则以级别N进行假脱机操作。级别越高的作业传输的越早。级别可以在调用uucp或uux时
用-g标志来指定。
你也可以在一定时间内禁止低于某级别的作业的传输。这称为在对话期间所允许的最大假脱
机级别(maximum spool grade),缺省值是z。这里请注意术语上的含糊不清:一个文件将
被传输当且仅当它的级别等于或高于最大假脱机级别。
12.2.2 uucico的内部工作机制
要理解为什么uucico需要知道某些事情,这里给出了它实际上是如何连接至远程系统的一个
快速描述。
当你在命令行上执行uucico ?s system时,它首先必须进行物理连接。所进行的操作起决于
所打开的连接类型 ? 例如,当使用电话线时,它必须找到一个modem,并且进行拨号。而在
TCP上,它就必须调用gethostbyname(3)将名字转换为一个网络地址、找出要打开那一个端口
,并且将该地址绑定于相应的套接字(socket)上。
在这个连接被建立起来后,接下来必须通过一个认证过程。这常常是由远程系统询问一个登
录名字以及一个可能的密码组成。这通常被称为登录对话(login chat)。认证过程或者是
通过通常的getty/login套件执行的,或者是由uucico自身在TCP套接字上完成的。如果认证
成功的话,远端系统就会启动uucico。初始化连接的本地uucico拷贝被视作主端(master)
,远端的则作为从端(slave)。
接下来是握手阶段(handshake phase);主端现在发出自己的主机名,加上几个标志,从端
检查这个主机名的登录许可,发送和接收文件等等。这些标志用于描述(以及在其它一些事
情中)被传输的假脱机文件的最大级别。如果使能的话,这里将会进行一个对话计数,或调
用序列号的检查。使用这个特性,两端站点就维持有一个成功连接的计数,可用于进行比较
。如果它们不匹配的话,握手过程就失败了。这对于保护你免受冒充者是很有用的。
最后,两个uucico试着达成一个共同的传输协议。这个协议指导数据被传输的方法、检查一
致性并且在出错时进行重传操作。针对所支持的不同的连接类型需要有不同的协议。例如,
电话线路要求有一个对于出错保守的“安全”协议,而TCP传输天生就是可靠的因此可以使用
一个更为有效的无须附加出错检查的协议。
在握手阶段完成以后,就开始进行实际的传输阶段。传输两端开启所选的协议驱动程序。驱
动程序一般还要进行与该协议相关的初始化过程。
首先,主端将发送假脱机级别足够高的排于队列中的所有文件到远程系统中。当它完成传输
后就会通知从端,此时从端就可以挂断了。现在从端可以或者同意挂断,或者将对话控制权
接过来。这是一个规则的变化:现在远程系统变成了主端,而本地则变成了从端。新的主端
现在发送它的文件。当完成后,两个uucico互相交换传输消息,并关闭连接。
我们将不再进行更为详细的描述:请参阅代码或任何针对于此的有关UUCP的好书。在网上也
还流传着一篇很古老的文章,是由David A. Novitz写的,它给出了UUCP协议的详细描述。T
aylor UUCP FAQ也讨论了UUCP实现方法的某些细节。它被定期地投递到comp.mail.uucp上。
12.2.3 uucico命令行选项
本节描述uucico的一些最重要的命令行选项。有关完整的命令行选项列表,请参阅uucico(1
)手册页。
-s system 呼叫指定的系统(system)除非受到呼叫时间的限制。
-S system 无条件地呼叫指定的(system)。
-r1 以主端(master)模