INN新闻服务器与新闻阅读器配置指南
1. 文章过期设置
在新闻服务器中,文章过期设置是一项重要的管理任务。通过
purge
字段,我们可以指定带有
Expires
头的文章在过期前的最长保留时间,其编码方式与
keep
字段相同。
默认情况下,所有新闻组中的文章将保留14天,而带有
Expires
头的文章将保留7到21天。对于内部新闻组
rec.crafts.brewing.private
,我们不希望其中的文章过期,因此可以在
expire.ctl
文件中进行如下配置:
# expire.ctl file for the Virtual Brewery
# Expire all articles in 14 days by default, 7-21 days for those with
# Expires: headers
*:A:7:14:21
# This is a special internal newsgroup, which we will never expire.
rec.crafts.brewing.private:A:never:never:never
此外,在
/etc/news/expires.ctl
文件中,还可以使用
/remember/:days
这样的特殊条目来指定文章在历史文件中被记录的最短天数,这有助于防止上游服务器重复发送已过期的文章。
2. 控制消息处理
INN可以自动处理控制消息,通过
control.ctl
文件可以配置针对不同控制消息的操作。该文件的结构较为简单,语法规则与其他INN配置文件类似,以
#
开头的行将被忽略,行可以使用
/
续行,字段之间用
:
分隔。
当收到控制消息时,会依次与文件中的规则进行匹配,最后匹配的规则将被使用。因此,通用规则应放在文件开头,更具体的规则放在文件末尾。
control.ctl
文件的一般语法为:
message:from:newsgroups:action
各字段的含义如下:
| 字段 | 含义 |
| — | — |
| message | 控制消息的名称,常见的控制消息包括
checkgroups
、
newgroup
、
rmgroup
、
sendsys
、
version
和
all
等 |
| from | 发送消息的人的电子邮件地址的shell风格模式,比较前会将电子邮件地址转换为小写 |
| newsgroups | 如果控制消息是
newgroup
或
rmgroup
,该字段是匹配创建或删除的新闻组的shell风格模式 |
| action | 对于匹配规则的消息要执行的操作,常见操作包括
doit
、
doit=file
、
doifarg
、
drop
、
log
、
log=file
、
mail
和
verify-*
等 |
以下是一个简单的
control.ctl
文件示例:
## Sample /etc/news/control.ctl
##
## Warning: You should not use this file, it is illustrative only.
##
Control Message Handling
all:*:*:mail
checkgroups:*:*:mail
ihave:*:*:drop
sendme:*:*:drop
sendsys:*:*:log=sendsys
senduuname:*:*:log=senduuname
version:*:*:log=version
newgroup:*:*:mail
rmgroup:*:*:mail
##
Handle control messages for the eight most important news heirarchies
##
COMP, HUMANITIES, MISC, NEWS, REC, SCI, SOC, TALK
check-
groups:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
newgroup:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
rmgroup:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
checkgroups:group-admin@isc.org:*:verify-news.announce.newgroups
newgroup:group-admin@isc.org:comp.*|misc.*|news.*:verify-
news.announce.newgroups
newgroup:group-admin@isc.org:rec.*|sci.*|soc.*:verify-
news.announce.newgroups
newgroup:group-admin@isc.org:talk.*|humanities.*:verify-
news.announce.newgroups
rmgroup:group-admin@isc.org:comp.*|misc.*|news.*:verify-
news.announce.newgroups
rmgroup:group-admin@isc.org:rec.*|sci.*|soc.*:verify-
news.announce.newgroups
rmgroup:group-admin@isc.org:talk.*|humanities.*:verify-
news.announce.newgroups
## GNU ( Free Software Foundation )
newgroup:gnu@prep.ai.mit.edu:gnu.*:doit
newgroup:news@*ai.mit.edu:gnu.*:doit
rmgroup:gnu@prep.ai.mit.edu:gnu.*:doit
rmgroup:news@*ai.mit.edu:gnu.*:doit
## LINUX (Newsfeed from news.lameter.com)
checkgroups:christoph@lameter.com:linux.*:doit
newgroup:christoph@lameter.com:linux.*:doit
rmgroup:christoph@lameter.com:linux.*:doit
3. 运行INN
INN源包提供了一个在启动时启动INN的脚本,通常为
/usr/lib/news/bin/rc.news
。该脚本从另一个脚本
/usr/lib/news/innshellvars
读取参数,该脚本包含INN定位所需组件的文件名和文件路径的定义。
为了确保INN在启动时启动,需要检查
/usr/lib/news/innshellvars
是否配置正确,然后在启动脚本中调用
/usr/lib/news/bin/rc.news
。
此外,还需要定期执行一些管理任务,这些任务通常通过
cron
命令配置。可以将相应的命令添加到
/etc/crontab
文件中,或者更好的做法是,如果系统支持,在
/etc/cron.d
目录下创建一个文件。以下是一个示例:
# Example /etc/cron.d/inn file, as used in the Debian distribution.
#
SHELL=/bin/sh
PATH=/usr/lib/news/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Expire old news and overview entries nightly, generate reports.
15 0 * * *
news
news.daily expireover lowmark delayrm
# Every hour, run an rnews -U. This is not only for UUCP sites, but
# also to process queued up articles put there by in.nnrpd in case
# innd wasn't accepting any articles.
10 * * * *
news
rnews -U
这些命令将确保每天自动过期旧新闻,并每小时处理排队的文章。
4. 管理INN:ctlinnd命令
INN新闻服务器提供了
ctlinnd
命令来管理其日常操作,该命令可以用于操作新闻组和新闻组源、获取服务器状态以及重新加载、停止和启动服务器。
以下是
ctlinnd
命令的一些重要用法:
-
添加新组
:
ctlinnd newgroup group rest creator
参数说明:
-
group
:要创建的组的名称。
-
rest
:该参数的编码方式与
active
文件的标志字段相同,默认为
y
。
-
creator
:创建组的人的名称,如果名称中有空格,需要用引号括起来。
- 更改组 :
ctlinnd changegroup group rest
参数说明:
-
group
:要更改的组的名称。
-
rest
:该参数的编码方式与
active
文件的标志字段相同,此命令可用于更改组的审核状态。
- 删除组 :
ctlinnd rmgroup group
参数说明:
-
group
:要删除的组的名称,该命令将从
active
文件中删除指定的新闻组,但不会影响新闻池,池中的所有文章将按常规方式过期,不再接受新文章。
- 重新编号组 :
ctlinnd renumber group
参数说明:
-
group
:要重新编号的组的名称,如果组名为空字符串,则对所有组进行重新编号,该命令将更新指定组的低水位标记。
- 允许/禁止新闻阅读器 :
ctlinnd readers flag text
参数说明:
-
flag
:指定
n
将禁止所有新闻阅读器连接,指定
y
将允许新闻阅读器连接。
-
text
:提供给尝试连接的新闻阅读器的文本,通常描述禁用新闻阅读器访问的原因,重新启用时,该字段必须为空字符串或与禁用时提供的文本相同,此命令不影响传入的新闻源,仅控制新闻阅读器的连接。
- 拒绝新闻源连接 :
ctlinnd reject reason
参数说明:
-
reason
:解释拒绝传入
innd
连接的原因,此命令不影响传递给
nnrpd
的连接(即新闻阅读器),仅影响直接由
innd
处理的连接,如远程新闻源。
- 允许新闻源连接 :
ctlinnd allow reason
参数说明:
-
reason
:提供的文本必须与之前
reject
命令提供的文本相同或为空字符串,此命令将反转
reject
命令的效果。
- 禁用新闻服务器 :
ctlinnd throttle reason
参数说明:
-
reason
:限制服务器的原因,此命令相当于同时执行
newsreaders no
和
reject
,在对新闻数据库进行紧急工作时很有用,可确保在工作时没有任何操作尝试更新它。
- 重启新闻服务器 :
ctlinnd go reason
参数说明:
-
reason
:停止服务器时给出的原因,如果该字段为空字符串,服务器将无条件重新启用,如果给出原因,只有使用与提供的文本匹配的原因禁用的功能才会重新启动,此命令用于在
throttle
、
pause
或
reject
命令后重新启动服务器功能。
- 显示新闻源状态 :
ctlinnd feedinfo site
参数说明:
-
site
:要显示新闻源状态的站点名称(取自
newsfeeds
文件)。
- 删除新闻源 :
ctlinnd drop site
参数说明:
-
site
:要删除新闻源的站点名称(取自
newsfeeds
文件),如果该字段为空字符串,将删除所有活动的新闻源,删除到某个站点的新闻源将停止对该站点的任何活动新闻源,这不是永久性更改,在修改了某个站点的新闻源详细信息且该站点的新闻源处于活动状态时很有用。
- 开始新闻源 :
ctlinnd begin site
参数说明:
-
site
:要开始新闻源的站点名称(取自
newsfeeds
文件),如果到该站点的新闻源已经处于活动状态,将自动先执行
drop
命令,此命令将使服务器重新读取
newsfeeds
文件,定位匹配的条目,并使用找到的详细信息开始向指定站点发送新闻源,可用于在添加或修改
newsfeeds
文件中的条目后测试新的新闻源。
- 取消文章 :
ctlinnd cancel Message-Id
参数说明:
-
Message-ID
:要取消的文章的ID,此命令将从服务器中删除指定的文章,但不会生成取消消息。
5. 新闻阅读器配置
新闻阅读器是用户用于查看、存储和创建新闻文章的程序,有几种新闻阅读器已被移植到Linux上,下面将介绍三种最流行的新闻阅读器
tin
、
trn
和
nn
的基本设置。
在新闻组级别,大多数新闻阅读器会显示文章列表,显示文章的主题行和作者。在大型新闻组中,用户很难跟踪相关文章,不过可以通过文章的主题前缀
Re:
和
References
头行中的消息ID来识别回复文章。按这两个标准对文章进行排序会生成小的文章簇,称为线程。编写新闻阅读器的任务之一就是设计一种有效的线程处理方案。
5.1 tin配置
tin
是一种在处理线程方面非常通用的新闻阅读器,它由Iain Lea编写,大致基于较旧的新闻阅读器
tass
。当用户进入新闻组时,
tin
会进行线程处理,除非通过NNTP获取帖子,否则速度相当快。
在486DX50上,直接从磁盘读取时,对1000篇文章进行线程处理大约需要30秒,而通过NNTP连接到负载较重的新闻服务器则需要超过5分钟。可以通过定期使用
-u
选项调用
tin
来更新索引文件,以提高速度,这样下次启动
tin
读取新闻时线程已经存在。或者,可以使用
-U
选项调用
tin
,这样
tin
会在后台启动一个进程来构建索引文件,同时用户可以阅读新闻。
通常,
tin
会将其线程数据库转储到用户主目录下的
.tin/index
中,但这可能会消耗较多资源,因此可以将它们集中存储在一个位置。例如,可以将
tin
设置为
setuid
到
news
,这样
tin
将把所有线程数据库保存在
/var/spool/news/.index
下,对于任何文件访问或shell转义,它将把有效用户ID重置为调用它的用户的真实用户ID。
一些Linux发行版中包含的
tin
版本在编译时可能没有支持NNTP,但现在大多数都支持了。当以
rtin
或使用
-r
选项调用时,
tin
会尝试连接到
/etc/nntpserver
文件或
NNTPSERVER
环境变量中指定的NNTP服务器,
nntpserver
文件只包含服务器名称的一行内容。
以下是
tin
配置的操作步骤总结:
1. 定期使用
-u
选项调用
tin
更新索引文件:
tin -u
-
使用
-U选项调用tin在后台构建索引文件:
tin -U
-
设置
tin为setuid到news以集中存储线程数据库:
chmod u+s /usr/bin/tin
-
配置NNTP服务器:
编辑/etc/nntpserver文件,添加服务器名称:
nntp.example.com
或者设置
NNTPSERVER
环境变量:
export NNTPSERVER=nntp.example.com
通过以上配置和操作,可以更好地使用INN新闻服务器和新闻阅读器,提高新闻管理和阅读的效率。
INN新闻服务器与新闻阅读器配置指南(下半部分)
5.2 trn配置
trn
也是一款在Linux系统中颇受欢迎的新闻阅读器。它在处理新闻文章和线程方面有着自己的特点。
trn
的配置主要涉及到几个关键文件和参数设置。首先,
trn
的配置文件通常位于用户主目录下的
.trn
目录中。在这个目录里,
trn
会读取一些配置文件来确定其行为。
以下是一些常见的
trn
配置操作:
-
设置新闻服务器
:
可以通过编辑
.trn/trnrc
文件来指定新闻服务器。在文件中添加如下内容:
nntpserver nntp.example.com
这里的
nntp.example.com
是你要连接的新闻服务器地址。
-
自定义显示格式
:
在.trn/trnrc文件中,还可以自定义文章的显示格式。例如,设置显示文章的主题、作者和日期:
article-format "%s %a %d"
其中
%s
表示主题,
%a
表示作者,
%d
表示日期。
-
线程处理
:
trn会自动对文章进行线程处理,将相关的文章组织在一起。可以通过一些参数来调整线程处理的方式。例如,设置线程排序的方式:
thread-sort subject
这将按照文章的主题对线程进行排序。
5.3 nn配置
nn
是另一款经典的新闻阅读器,它具有简洁易用的特点。
nn
的配置相对简单,主要通过环境变量和配置文件来完成。
-
设置新闻服务器
:
可以通过设置NNTPSERVER环境变量来指定新闻服务器。例如:
export NNTPSERVER=nntp.example.com
也可以在
~/.nn
目录下的
nndb
文件中进行配置。在文件中添加如下内容:
server nntp.example.com
-
自定义快捷键
:
nn允许用户自定义快捷键来执行各种操作。可以在~/.nn目录下的nnenv文件中进行配置。例如,将j键设置为向下移动文章:
bind j next-article
6. 新闻阅读器的线程处理原理
新闻阅读器的线程处理是将相关的文章组织在一起,形成一个逻辑上的树状结构,方便用户跟踪文章之间的关系。下面是线程处理的基本原理和流程:
graph TD;
A[获取文章列表] --> B[解析文章头信息];
B --> C[提取主题和References头];
C --> D[判断文章关系];
D --> E{是否为回复文章};
E -- 是 --> F[将文章添加到对应线程];
E -- 否 --> G[创建新线程];
F --> H[更新线程结构];
G --> H;
H --> I[显示线程化文章列表];
具体步骤如下:
1.
获取文章列表
:新闻阅读器从新闻服务器获取指定新闻组中的文章列表。
2.
解析文章头信息
:对每篇文章的头信息进行解析,提取关键信息,如主题和
References
头。
3.
提取主题和References头
:主题用于识别文章的主要内容,
References
头包含了文章所回复的原始文章的消息ID。
4.
判断文章关系
:根据主题和
References
头,判断文章是否为回复文章。
5.
处理回复文章
:如果是回复文章,将其添加到对应的线程中;如果不是,则创建一个新的线程。
6.
更新线程结构
:对线程结构进行更新,确保文章之间的关系正确显示。
7.
显示线程化文章列表
:将线程化后的文章列表显示给用户。
7. 新闻服务器与新闻阅读器的协同工作
新闻服务器和新闻阅读器是一个协同工作的整体,它们之间的交互流程如下:
graph LR;
A[新闻阅读器] --> B[连接新闻服务器];
B --> C[请求新闻组列表];
C --> D[新闻服务器返回新闻组列表];
D --> E[新闻阅读器选择新闻组];
E --> F[请求新闻组文章列表];
F --> G[新闻服务器返回文章列表];
G --> H[新闻阅读器请求文章内容];
H --> I[新闻服务器返回文章内容];
I --> J[新闻阅读器显示文章];
J --> K[用户操作新闻阅读器];
K --> L[新闻阅读器发送操作请求];
L --> M[新闻服务器处理请求];
M --> N[新闻服务器返回处理结果];
N --> A;
具体流程如下:
1.
连接新闻服务器
:新闻阅读器通过网络连接到新闻服务器。
2.
请求新闻组列表
:新闻阅读器向新闻服务器请求可用的新闻组列表。
3.
返回新闻组列表
:新闻服务器将可用的新闻组列表返回给新闻阅读器。
4.
选择新闻组
:用户在新闻阅读器中选择要查看的新闻组。
5.
请求文章列表
:新闻阅读器向新闻服务器请求所选新闻组中的文章列表。
6.
返回文章列表
:新闻服务器将文章列表返回给新闻阅读器。
7.
请求文章内容
:新闻阅读器根据用户的选择,向新闻服务器请求具体文章的内容。
8.
返回文章内容
:新闻服务器将文章内容返回给新闻阅读器。
9.
显示文章
:新闻阅读器将文章显示给用户。
10.
用户操作
:用户在新闻阅读器中进行各种操作,如阅读文章、回复文章等。
11.
发送操作请求
:新闻阅读器将用户的操作请求发送给新闻服务器。
12.
处理请求
:新闻服务器处理新闻阅读器发送的请求。
13.
返回处理结果
:新闻服务器将处理结果返回给新闻阅读器。
通过以上的配置和协同工作,新闻服务器和新闻阅读器可以为用户提供高效、便捷的新闻阅读体验。同时,合理的文章过期设置、控制消息处理以及新闻组管理等操作,也有助于维护新闻服务器的稳定运行。
超级会员免费看
13

被折叠的 条评论
为什么被折叠?



