Linux网络管理员手册(19)
翻译:赵炯
[email protected]
第十九章 Newsreader的配置
新闻阅读器(Newsreader)是用于为用户提供方便地访问新闻系统功能的方法,比如象邮寄文章、以适当的方式取得一个新闻组的目录。这个界面的品质正面临着无穷无尽的战火。
已经有许多新闻阅读器移植到了Linux上。下面,我将叙述名为tin、trn和nn的三种最为通用的新闻阅读器的基本设置方法。
最有效的新闻阅读器之一是
$ find /var/spool/news –name ‘[0-9]*’ –exec cat {} \\; | more
这是UN*X读取它们的新闻的顽固僵硬的方法。
然而,大部分的新闻阅读器是比较复杂的。它们通常提供一个全屏幕的界面并以不同的层次显示用户预订的所有组和显示一个组中所有文章的概貌以及显示单篇文章。
在新闻组这一层,许多新闻阅读器列出了文章的清单,显示出了这些文章的标题和作者。在大型的组中,用户要明了文章之间的关系是不可能的,尽管能够确认出对早期文章的响应文章来。
一篇响应文章通常重复原有文章的题目,只是在题目前加上了“Re: ”。另外,后面紧跟的文章的message id可能在References:标题行给出。根据这两个标准进行排序可以生成小文章族(实际上是树结构),通常被称为线索(threads)。编写新闻阅读器程序的任务之一就是设计出有效的生成线索的方案,因为其所需的时间是与文章数的平方成正比的。
这里,我们将不再深入讨论用户界面是如何建立的。目前Linux下的所有新闻阅读器都有一个很好的帮助功能,所以你应该会摸索出来的。
下面,我们将只涉及管理方面的任务。其中的大部分都是与线索数据库的建立和帐号相关的。
19.1 tin的配置
有关线索操作的最通用的新闻阅读器是tin。它是有Iain Lea编写的并且是松散地以一个很老的新闻阅读器tass为模型的。[1] 当用户进入一个新闻组时,它就作线索操作,除非你通过NNTP来进行这个操作,否则的话这个线索操作是很快的。
在一个486DX50的机器上,当直接从硬盘上读取文章时,它大约要花30秒的时间来索引1000篇文章。对于通过NNTP到一个已加载的新闻服务器上,这个操作大约要花费5分钟左右的时间。[2] 你可以通过使用-u选项定期地更新你的索引文件或通过使用-U选项调用tin来改善这个操作。
通常,tin将它生成的线索数据库放在.tin/index下的用户主目录中。然而,这可能是很费资源的,所以你会想在一个中心位置处保存它们的一个拷贝。例如,这可以通过让tin setuid为news或某个完全无特权的帐号来做到。[3] 此时,tin将把所有的线索数据库放在/var/spool/news/.index下。对于任何的文件访问和shell出口,它会把他的有效uid复位成调用它的用户的真正uid。[4]
一个更好的解决方案是安装tind索引后台程序,它会作为一个后台程序运行并且定期地更新索引文件。然而,这个后台程序并不包含在任何一个Linux发行版中,所以你必须自行编译它。如果你正在运行一个有着中心新闻服务器的局域网,那么你甚至可以在该服务器上运行tind并由所有的客户通过NNTP来取回这个索引文件。当然,这需要扩展到NNTP。对于实现了这个扩展的nntpd的补丁程序已包括在tin源程序中。
包含在某些Linux发行版中的tin版本没有编译进对NNTP的支持,但现在大多数tin版本是有的。当作为rtin或使用-r选项被调用时,tin就会试图连接到文件/etc/nntpserver中指定的或由NNTPSERVER环境变量说明的NNTP服务器上。nntpserver文件只是简单地在一行上含有服务器的名字。
19.2 trn的配置
trn也是一个更老的名为rn(意思是阅读新闻)的新闻阅读器的继承者。该名字中的“t”代表“线索操作过的”。它是由Wayne Davidson编写的。
不象tin,trn并没有提供运行时刻的线索数据库的生成功能。相反,它使用那些由一个称为mthreads的程序准备的线索数据库。这个程序必须定期地从cron中更新索引文件。
然而,不运行mthreads并不意味着你不能访问新的文章了,它只是表示你将会有所有哪些散落在你的文章选择菜单中的“Novell buys out Linux!!”文章,而不是单一的一个你可以很容易跳过的线索。
为了针对特定的新闻组开启线索操作,就要在命令行上使用一新闻组列表来调用mthreads。这个列表清单与sys文件中的组成方式是完全一样的:
mthreads comp,rec,!rec.games.go
该命令将开启对comp和rec中所有的组的线索操作,除了rec.games.go(玩Go的人不需要流行的线索)。此后,你只需简单地不带任何选项地调用它来对新到的文章进行线索操作。对active文件中的所有组进行线索操作可以通过使用all的组列表调用mthreads来打开。
如果你是在晚间接收新闻的,那么你通常可以在早晨运行一次mthreads,但你也可以根据所需运行多次。有着很大传输流量的的站点可能想以后台方式运行mthreads。当它是在系统启动期间用-d选项运行时,它就把自己放入后台,每隔10分钟醒来一次来检查是否有新到的文章,如果有则对它们进行线索操作。为了以后台方式运行mthreads,将下面一行写入你的rc.news脚本中:
/usr/local/bin/rn/mthreads –deav
-a选项使得mthreads对新建的组自动开启线索操作;-v用来对mthreads的日志文件mt.log采用详细的日志消息。该日志文件位于你安装trn的目录中。
不再存在的老文件必须定期地从索引文件中删去。默认地,只有号码在低水线标记以下的文章将被删除。[5] 但不管怎样已经过期的在这个号码以上的文章(因为该最老的文章在Expires:标题字段中已经赋予了一个长时间的过期日期)可以通过给予mthreads一个-e选项来迫使运行一个“加强的”过期操作来删除。当mthreads是以后台方式运行时,-e选项使得它一天中在午夜稍过一些时候进行一次加强的过期操作。
19.3 nn的配置
由Kim F. Storm编写的nn申明是一个最终目标不是为了阅读新闻的新闻阅读器。它的名字代表“No News”,它的格言是“没有新闻就是好新闻,nn则更好。”(“No news is good news. nn is better.”)
为了达到这个野心勃勃的目标,nn带有一大套的维护工具,不但可以生成线索,而且还有对这些数据库一致性的检查、帐号管理、使用统计参数的采集、和访问限制功能。也有一个称为nnadmin的管理程序,该程序允许你交互式地执行这些任务。它是非常有直觉性的,因此我们将不再深入讨论这些方面,而仅涉及索引文件的生成。
Nn的线索数据库管理程序称为nnmaster。它通常从rc.news或rc.inet2脚本中启动并作为后台程序运行。它是以如下方式调用的
/usr/local/lib/nn/nnmaster –l –r -C
这对active文件中的所有组开启了线索操作。
同样地,你也可以从cron中周期性地调用nnmaster,给它一个进行操作的组的清单。这个清单与sys文件中的订阅清单非常相似,但它使用空格代替了逗号。它使用一个空的参数“”来表示所有的组,而不是使用伪组名all。一个调用的例子如下
# /usr/local/lib/nn/nnmaster !rec.games.go rec comp
注意,这里的顺序是很重要的:最左边匹配的组说明是首选的。因此,如果我们将!rec.games.go放在rec后面的话,那么无论怎样,这个组中的所有文章都将被线索操作过。
nn提供了几种方法来从它的数据库中删除已过期的文章。第一种方法是通过扫描新闻组目录并且丢弃相应文章不再存在的条目来更新数据库。这是使用-E选项调用nnmaster的默认操作。除非你是通过NNTP来做的,否则它是很快的。
第二种方法的行为非常象mthreads的默认过期操作,它只删除那些号码在active文件中低水线记号以下的文章。它可以用-e选项开启。
最后,第三种方法是放弃整个数据库并且重新收集所有的文章。这可以通过将-E3给nnmaster来做到。
即将过期的组的清单是以上面同样的方式通过-F选项给出的。然而,如果你已有作为后台运行的nnmaster,那么在过期操作开始前你必须杀死它(使用-k),过后再用原来的选项重新运行它。这样使用第一种方法对所有组运行过期操作的适当的命令是:
# nnmaster –kF “”
# nnmaster -lrC
还有很多的标志用来微调nn的行为。如果你涉及有关坏文章的删除或对文章进行分类,请阅读nnmaster的手册。
nnmaster依赖于一个名为GROUPS的文件,该文件位于/usr/local/lib/nn中。如果它原本不存在的话,就会被创建。对于每一个新闻组,它都含有一行以组名开始的内容,组名后跟一可选的时间标记以及一些标志。你可以针对相应的组,编辑这些标志项以启用一定的性能,但你最好不要改变各个组出现的顺序。[6]所许可的标志和这些标志的作用在nnmaster的手册中也有详细的说明。
注释
[1] 由Rich Skrenta编写。
[2] 如果让NNTP服务器本身来做线索的操作,并且让客户来取回线索数据库的话,事情就会有巨大的进展;例如,INN-1.4就是这样做的。
[3] 然而,对于此不要用nobody。作为一个规则,任何文件或命令都不要与这个用户相关联。
[4] 这就是为什么当作为超级用户调用它时你会得到出错信息。但不管怎样,不要用root来做。
[5] 注意,C News不会自动地更新这个低水线标记;你必须运行updatemin来更新。请参见第17章。
[6] 这是因为它们的顺序必须与(二进制)MASTER文件中的条目的顺序一致。
发布人:netbull 来自:Linux自由鸽