设置 UUCP
在大学环境中接触到互联网后,我一直对在线时间非常随意。由于我没有收到大学的直接账单,因此没有理由去追踪它。当我离开大学世界并获得商业互联网服务提供商 (ISP) 后,一切都改变了。当我在网上阅读新闻和邮件时,我意识到我的大部分在线时间不是花在传输数据上,而是花在眼睛在屏幕上来回移动。从这个简单的观察开始,我开始了漫长而奇怪的 UUCP 之旅。尽管今天使用了先进的硬件和软件,但对于我们这些身处互联网偏远地区的人来说,UUCP 仍然是理想的连接方式。本文是
本文涵盖了简单的设置:一台计算机、一条电话线、一个 ISP,以及仅从读者机器发起的呼叫。对于设置更复杂的用户,请参考 Olaf Kirch 撰写的 《Linux 网络管理员指南》;Vince Skahan 关于 UUCP、邮件和新闻的出色 FAQ(请参阅 http://www.ssc.com/linux/howto.html);Tim O'Reilly 和 Grace Todino 撰写的 《管理 UUCP 和 Usenet》;以及一位称职的精神科医生。
UUCP(Unix-to-Unix CoPy,Unix 到 Unix 复制)的历史可以追溯到 70 年代后期,它在 AT&T 贝尔实验室开发,旨在为他们提供简单的拨号网络功能。与此类软件一样,改进和增强功能很快得到实施,因此,如今存在几种不同的 UUCP“风格”。用户最明显的区别在于 UUCP 使用的各种配置文件的名称和位置。最初的风格,Version 2,大多已过时,仅为完整性而提及。HoneyDanBer (HDB) 实现于 1983 年开发,使用相当难以理解的配置文件,但由于其历史悠久,因此使用非常广泛。Ian Taylor 的 Taylor UUCP 包提供了更高的灵活性和易用性。作为额外的奖励,Taylor UUCP 能够理解 HDB 配置文件。大多数(如果不是全部)Linux 发行版都发布了 Taylor UUCP;当前版本为 v1.06。
我运行 Red Hat Linux,但我更喜欢编译自己的软件包,因此安装 UUCP 就像安装 SRPM 文件和编译一样简单
rpm -i uucp-1.06.1-4.src.rpm
要编译,请编辑顶层 Makefile.in 以定义您的安装目录。运行 sh configure 以生成 Makefile 和配置头文件 config.h。浏览这些文件以确保它们的内容符合您的预期。编辑 policy.h 头文件以根据您的系统进行自定义;对此进行了大量注释,因此唯一需要注意的是 HDB 风格的默认配置文件。我建议将这些更改为 Taylor 格式。键入 make 以构建软件,然后键入 uuchk 以验证您的配置文件格式。make install 安装软件,现在您可以开始配置了。
Taylor UUCP 使用少量相互依赖的配置文件,我选择将它们放在 /etc/uucp 中。第一个配置文件名为 config,用于设置最通用的属性
# /etc/uucp/config -- UUCP main # configuration file hostname perrin
hostname 是您和您的 ISP 约定的 UUCP 名称——我的名称是 perrin。如果此条目不存在,UUCP 将尝试通过 hostname() 获取它,但如果您的 UUCP 名称和您的系统名称不同,您将无法登录到您的 ISP。一旦您设置了 UUCP,请不要随意更改此名称,因为您的 ISP 将在他的配置文件中包含与此名称对应的条目。更改将阻止您访问他的机器。此文件中的其他参数可以设置为覆盖编译的默认值,但我建议在编译时在 UUCP Makefile 中指定默认值。
下一个必需的文件是 sys,其中包含有关 perrin 可以连接的系统的信息。此文件中只有一个条目,因为 perrin 将仅连接到我的 ISP 的机器。顺便说一句,它的 UUCP 名称是 sloth。这是我的 sys 文件
# /etc/uucp/sys - name UUCP neighbors # system: sloth remote-send ~ remote-receive ~ local-send ~ local-receive ~ command-path /usr/sbin commands rmail rnews system sloth time any phone 123-4567 port serial1 speed 38400 chat ogin: UUCP_LOGIN_NAME ssword: UUCP_LOGIN_PASSWORD alternate phone 123-6789
remote-send、remote-receive、local-send 和 local-receive 条目指定了 UUCP 期望在其中找到它将要操作的文件的目录。默认情况下,对于 Taylor UUCP 配置,这是 /var/spool/uucp。
command-path 和 commands 条目指定了 uuxqt 允许执行的程序以及查找它们的位置。我花了两天时间试图弄清楚为什么我的 ISP 无法向我提供新闻文章,然后才注意到我没有将 rnews 放在 command-path 中的目录中,因此请注意此项。如果您希望 uuxqt 能够执行其他程序,则必须包含它们的条目。例如,要允许匹兹堡的 Fred 使用您昂贵的彩色激光打印机,请将 lpr 添加到命令列表中。
system 条目必须是您要呼叫的系统的 UUCP 名称,因为 HDB 和 Taylor UUCP 都会检查系统名称。询问您的 ISP,此条目的 UUCP 名称是什么。
time 条目用于指定允许连接到 sloth 的时间。我不了解普通 Linux 用户,但当我想在特定时间运行特定作业时,我的想法自然会转向 cron。通过在配置文件中指定任何时间,我可以通过 crontab 条目启动 UUCP 连接,而不必担心 UUCP 对呼叫时间吹毛求疵。
phone 条目,毫不奇怪,指定了 ISP 的电话号码。如果您的 ISP 有多个接入号码,则可以使用 alternate 字段指定它们。在上面的示例中,如果由于任何原因呼叫 123-4567 失败,UUCP 将尝试呼叫 123-6789,所有其他配置数据保持不变。
port 条目不是要使用的端口,而是名为 port 的文件中的条目,该条目指定要使用的端口。对于像我这样的单调制解调器机器,port 文件将包含一个条目,我们稍后会看到它。
speed 条目是端口传输数据的速度。
chat 条目包含一个简短的聊天脚本,用于登录,对于任何使用过 SLIP 或 PPP 的人来说,这应该很熟悉。空格分隔的字段表示交替发送和接收的消息。在大多数情况下,必须传输的唯一基本数据是登录名和密码。如果您想更详细地了解 ISP 机器发出的消息,请咨询您的 ISP。
现在是 port 文件
# /etc/uucp/port - UUCP ports port serial1 type modem device /dev/modem speed 38400 dialer generic
此处的 port 条目必须与 config 中的 port 条目相对应。type、device 和 speed 条目让 UUCP 知道要使用的设备文件和速度。UUCP 将基于设备名称创建锁定文件,因此您应该使用与其他通信软件指定的设备相同的设备。这样,您将避免一个进程中断另一个进程。(如果您通过 cron 作业运行 UUCP,则很可能在您已经使用调制解调器(例如用于 Web 浏览)时,连接时间至少会到来一次。)最后一个条目 dialer,指定了最后一个配置文件 dial 中的条目。
# /etc/uucp/dial -- per-dialer info # My modem dialer generic chat "" ATZ OK ATM0DTT CONNECT chat-fail BUSY chat-fail ERROR chat-fail VOICE chat-fail NOsCARRIER chat-fail NOsANSWER chat-fail NOsDIALTONEdialer 条目再次与 port 中的条目匹配。chat 条目指定了一个聊天脚本,该脚本初始化调制解调器并发出实际呼叫。读取此条目时,T 将替换为 sys 中的 phone 条目。chat-fail 条目提供了一系列条件,在这些条件下,连接将失败并且整个过程中止,或者尝试备用电话号码(如果提供了)。
我遇到了使用电话线进行语音通话的问题——当 cron 告诉系统呼叫时,调制解调器会拨号,产生拨号音并中断我的通话。仅在拨号后,它才会检查任何 chat-fail 条件并中止。如果您知道一种方法可以使呼叫在调制解调器激活并且没有“听到”拨号音时立即中止,请告诉我。我的朋友和家人越来越厌倦我的自动化机器。[我认为检查拨号音是大多数现代调制解调器上的可配置选项——编者。]
UUCP 实际上是一套程序,用于执行非常特定的任务。例如,uucp 本身用于在节点(通过 UUCP 连接的机器)之间复制文件,而 uux 用于在另一个节点上执行程序。存在用于各种维护的程序,例如日志文件修剪和假脱机检查。对于我的目的(以及本文的目的),最重要的程序是 uucico 和 uuxqt。uucico 实际发出电话呼叫并设置文件传输,而 uuxqt 告诉另一台机器需要运行什么程序才能正确处理文件。
以下事件序列是典型的
键入 uucico -s sloth 会导致 uucico 在 config 中查找 sloth。看到它应该使用 serial1 连接到 sloth,它会在 port 中查找,并看到 serial1 是调制解调器,它由 dialer 条目激活。查看 dial 中的此条目,uucico 初始化调制解调器并呼叫 sys 中指定的号码。当收到 CONNECT 字符串时,它会执行来自 sys 的聊天脚本并登录到 sloth。
当登录过程完成时,perrin 处于“主”模式,而 sloth 处于“从”模式。要上传的文件将位于假脱机目录 /var/spool/uucp/sloth/D./filename 中。如果这些文件存在,perrin 将上传它们,并带有给从机的指令。指令文件将位于 /var/spool/news/uucp/sloth/C./filename 中。传输完成后,主从交换角色,perrin 现在接收 sloth 上假脱机的任何文件以及执行指令。当双方都传输了所有必要的文件后,连接终止。日志记录在 /var/log/uucp 中完成,因此请查看那里以获取平均会话工作的详尽清单。
当连接断开时,第二个重要的 UUCP 程序会启动:uuxqt。uuxqt 在 UUCP 假脱机目录中查找执行请求,并在(如果允许)执行它们。例如,包含邮件消息的文件必须传递,新闻帖子必须移动到新闻假脱机中。默认情况下,UUCP 仅允许执行两个本地程序 rmail 和 rnews,这并非巧合地完成了刚才提到的任务。
配置并测试 UUCP 后,现在是时候设置邮件和新闻的传输了。
对于邮件传输和传递,最明显的两个选择是 sendmail 和 smail。我读到对于小型站点,两者的配置难度大致相当,但我也看过 O'Reilly 的 sendmail 书。对于我的小项目来说,绝对不需要那么庞大的东西。因此,我选择了 smail。当前版本是 v3.1.29——虽然不是 Red Hat 发行版的一部分,但一些好心人已在 ftp.redhat.com 的 /pub/contrib 目录中提供了一个 RPM。
在查看了 smail 的完整源代码树后,我退缩了,并从 Red Hat 的 /pub/contrib 目录中抓取了一个预编译的 rpm,然后安装了它
rpm -i smail-3.1.29.1-6.i386.rpm
需要到 smail 的两个链接:usr/bin/rmail 和 /usr/sbin/sendmail。前者在通过 UUCP 传递邮件时调用;后者通常硬编码到邮件用户代理中,例如 elm。要创建这些链接,请使用以下命令
ln -s /path_to_smail/smail /usr/bin/rmail ln -s /path_to_smail/smail /usr/sbin/sendmail
请注意,rmail 或指向它的链接必须放置在 etc/uucp/sys 中指定的 command-path 中,否则这将失败。您的 ISP 可能有权运行 rmail,但如果他找不到它,那么他会在他的 UUCP 日志中收到各种错误消息,并且可能只是向您发送一封令人讨厌的电子邮件。当然,如果您已经安排通过 UUCP 发送邮件,这将对 ISP 产生反作用,并且您会很快发现自己不受欢迎。或者我听说。
smail 的主要配置文件是 etc/smail/config。对于将通过 UUCP 链接完成所有邮件发送的站点,这是一个非常简单的文件,尤其是在 smail 包附带了 etc/smail/config.linux 中非常好的示例文件的情况下。在 smail 将使用的四个文件中,我只需要修改 config 以适应我的特定设置
# /etc/smail/config smart_path=sloth smart_transport=uux visible_name=swcp.com uucp_name=perrin.swcp.com
smart_path 条目是您的 ISP 机器的 UUCP 名称。这将与 /etc/uucp/sys 中的系统名称匹配。任何非本地邮件地址都将被发送到此机器以进行 DNS 解析和传递。将 uux 指定为传输代理将导致任何外发邮件消息在 UUCP 假脱机中排队,以等待下一个 UUCP 连接。当我讨论 smail 的其他配置文件时,我将回到这一点。
visible_name 条目标识您的 smail 域。如果您已注册您的 UUCP 名称,请将 :uucp 附加到此条目。在许多情况下,这是不必要的。以我的系统为例,.swcp.com 部分由 InterNIC(以及我的 ISP 辛辛苦苦赚来的钱)保证是唯一的。因此,可能已经占用 perrin 的唯一机器将连接到我的 ISP,他们会通知我存在冲突。
uucp_name 条目是(惊喜)您系统的 UUCP 名称。默认情况下,smail 将从 hostname 命令生成返回路径,在我的情况下是 perrin。由于我没有注册 perrin,因此其他人可能会注册。如果没有此条目,则返回到 perrin 的任何邮件都将发送到另一台机器。通过指定完全限定的域名,我可以保证(由于 DNS 和 UUCP 地址的解析方式)消息将首先发送到 swcp.com,它会将 perrin 识别为我的 UUCP 帐户。对于名为“perrin”的机器,这是一个可以忽略不计的问题,但更常见的名称,例如“darkstar”,可能会导致问题。
对于正在讨论的独立系统,最好将 smail 作为守护程序单独运行。确保此条目出现在 etc/services 中
smtp 25/tcp #Simple Mail Transfer Protocol
这将为 SMTP 连接指定端口 25,邮件传输代理 (MTA) 将使用该端口进行传递。
通过让系统启动脚本运行以下命令,将 smail 作为守护程序运行
/path_to_smail/smail -bd -q10m
-bd 选项使 smail 作为守护程序运行;-q10m 告诉它每 10 分钟处理一次消息队列。如果您发送少量邮件(或在连续的时间块内发送大量邮件),请考虑增加此时间,例如使用 -q2h 之类的命令行选项增加到两个小时或更长时间。当检测到与 SMTP 端口的连接时(例如当 UUCP 移交最新批次的本地邮件时),smail 将 fork 并处理 SMTP 连接。
当 smail 从邮件程序(如 rmail,用于传入的 UUCP 传递,或 elm,用于传出的消息)收到唤醒呼叫时,它会在文件 /etc/smail/routers 中查找以查看如何处理消息。这是我的文件
# /etc/smail/routers smart_host: driver=smarthost,#What do I do with nonlocal mail? transport=uux; # Deliver it via UUCP-path # to the machine specified with the # smart_path option in ./config
收到发往非本地地址的消息后,smail 会检查此文件。它看到它将使用 smart_host,它在 /etc/smail/config 中定义为 sloth,即 ISP 的机器。消息将使用 transport 选项转发到 sloth,该选项设置为 uux。uux 是 UUCP 套件中的另一个程序,它将消息与在 UUCP 假脱机中运行邮件的指令一起排队,以等待下一个 UUCP 连接。
本地邮件部分由 /etc/smail/directors 文件中的条目处理。directors 文件的目的是告诉 smail 一些本地可用的特殊选项,例如别名、转发到另一个用户或管道,或者您可以设置的任何其他内容。(双用户机器上的邮件列表,有人要吗?)我剪掉了除处理 .forward 文件和通用“如果我们有一个只想将邮件假脱机的用户该怎么办?”场景之外的所有条目。阅读 /etc/smail/config.linux/directors 文件以获取完整的血腥细节
# /etc/smail/directors dotforward: # general-purpose forwarding director driver = forwardfile, # problems go to the site mail admin owner = Postmaster, nobody, # sender never removed from expansion sender_okay; # .forward file in home directories file = ~/.forward, # the user can own this file checkowner, # or root can own the file owners = root, # it should not be globally writable modemask = 002, # don't run things as root or daemon caution = daemon:root, # be extra careful of remotely accessible home # directories unsecure = "~uucp:~nuucp:/tmp:/usr/tmp" # user - match users on the local host with # delivery to their mailboxes user: # driver to match usernames driver = user; # local transport goes to mailboxes transport = local
一旦在 directors 中匹配了传递选项,就会搜索 transports 文件以查看该特定传递模式是否需要任何特殊选项。对于上面修剪的 directors 文件,相应的 transports 文件将是
# /etc/smail/transports # append message to a file local: driver=appendfile, # include a Return-Path: field return_path, # supply a From_ envelope line from, # insert > before From in body unix_from_hack, # comment out the above line for # MMDF mailbox format and for # use with the Content-Length # header fields. # use local forms for delivery local; # location of mailbox files file=/var/spool/mail/${lc:user}, # group to own file for System V group=mail, # For BSD: only the user can # read and write file mode=0600, # append an extra newline suffix=" ", # notify comsat daemon of delivery notify_comsat,请注意,转发选项没有传输。这已编译到 smail 中,以将消息发送到转发地址,并带有一些额外的标头。转发到非本地地址会将消息发送到 UUCP 队列,以等待下一个电话呼叫。
既然您已设置 smail 以等待 UUCP 从外部世界传递邮件,并将邮件发送到 UUCP 以从您的机器传输,那么您需要告诉 UUCP 何时传输文件。这最容易通过 crontab 条目完成。通过键入 su uucp 创建它,然后键入 crontab -e。生成的文件应如下所示
# Call for transfers 25 0,9,11,13,15,17,18-23 * * * /usr/sbin/uucico -s sloth # Trim logfile 35 03 * * * find /var/log/uucp -size +16k -exec cp /dev/null {} ;
第一行在白天每隔几个小时呼叫 sloth,并在黄金时段每小时呼叫一次。每天下午,它都会修剪 UUCP 的日志文件,频繁传输会导致该文件急剧增长。
与邮件一样,有各种软件包可用于在本地机器上收发新闻。同样像邮件一样,最著名的是庞大而令人生畏的。与邮件不同,不太为人所知的是 也 庞大而令人生畏的。新闻传输中的“大人物”是 InterNet News (INN)。紧随其后的是 C News 软件包。我查看了这两个软件包的可用文档,然后才决定尝试哪个。INN 作为守护程序运行,并且可能占用大量磁盘和内存。虽然它可以配置为在像我这样的情况下运行,但它实际上旨在在高带宽连接和许多用户的专用新闻服务器上运行。C News 是由 cron 执行的二进制文件和脚本的集合,消耗的磁盘资源最少。虽然 INN 有更多可用文档,但我决定 C News 是正确的选择。此外,如果我只是按照说明进行操作并拥有一个工作系统,我就会感觉不对劲,作为一个 Linux 用户。
C News 具有足够的系统依赖性,以至于从源代码发行版编译是唯一合乎逻辑的事情。C News 的当前版本可以在 ftp.cs.toronto.edu 的 /pub/c-news/c-news.tar.Z 中找到。解压缩并解压源代码树后,花点时间通读 docs/ 子目录中的文件;那里有一些有趣的内容。
要为您的系统配置 C News,请按照文件 README.install 中的说明进行操作。在开始之前,请编辑文件 conf/update.ran。它缺少 #!/bin/sh 的初始行,并且会导致 Makefile 退出并显示错误。通读文档后,开始安装。
运行“quiz”。这个简短的交互式脚本根据您的答案设置 C News 的默认值。在大多数情况下,默认值都可以,或者您将对首选替代方案有直观的了解(例如决定将文章存储在 /var/spool/news 而不是 /usr/spool/news 中)。但是,有一些事情需要注意
存储新闻控制文件的默认位置是 /etc/news。此目录中有少量文件变得非常大,因此如果您的根文件系统很小,您可能希望将这些文件放在另一个文件系统上。
quiz 将询问是否存在 13 个系统函数。在我的 Red Hat 3.0.3 系统上,除了 fgetline 之外,所有函数都存在。
quiz 将为您构建 makefile,因此它需要知道使用哪种类型的语法来指定包含文件。指定 SVR4。
确保指定您在设置 UUCP 时使用的相同风格的 UUCP 配置文件,HDB 或 Taylor。
指定 rnews 和 inews 的路径:这些程序的路径应与您的 UUCP sys 文件中的 command-path 行匹配。
quiz 将询问系统以何种格式报告可用磁盘空间。考虑到 Linux 与 SVR4 的相似性,我随意猜测了一下,并回答了 statfs。从工作设置来看,我似乎猜对了。
运行 make 以构建软件,然后运行 make r 以运行一些回归测试来检查构建。
创建您在 quiz 中指定的目录,用于文章树、概述树、二进制文件和控制程序。C News 分别将这些目录称为 NEWSARTS、NEWSOV、NEWSBIN 和 NEWSCTL。我将文章和概述放在 /var/spool/news 中,将二进制文件放在 /usr/lib/news 中,将控制程序放在 etc/news 中。/NEWSBIN 的所有权在很大程度上是任意的,但其他三个应该由 /news 管理员拥有。我将该用户设为 news,组 news。如果您没有 news 用户,请使用 adduser 或您喜欢的任何工具创建一个。一些新闻阅读器在 usr/spool/news 中查找新闻,因此您可能需要在 /usr/spool 中创建指向 NEWSARTS 目录的符号链接。
使用 su 以 news 所有者身份登录并运行 make install。您可能会遇到尝试将二进制文件写入 NEWSBIN 的权限问题。我通过切换虚拟控制台、授予每个人对该目录的写入权限、以 news 身份运行 make install,然后恢复原始限制性权限来解决这个问题。接下来以 news 身份运行 make setup。
作为 NEWSBIN 的所有者,运行 make ui。
C News 附带了一个新闻阅读器、发布器和检查器,可以最好地描述为功能性。您不希望在测试设置之外使用这些,但为了这个目的安装它们是值得的。通过运行 make readpostcheck 来完成此操作。
确保 NEWSBIN/input/newsspool 由 news 拥有,并且在 news 组中。将其权限更改为 rwsr-sr-x。
以 news 身份,将目录更改为 NEWSCTL 并为您的特定设置配置重要的控制文件
batchparms:默认情况下,C News 将尝试在文章到达后立即传递它们。对于我们的设置,最好将文章收集到单个压缩文件中,并通过 UUCP 定期传递它。这称为批处理,文件 batchparms 设置批处理的大小和数量。这是我的
# NEWSCTL/batchparms # 500KB, after compress, is 4 minutes at # 1000cps 20 batches is somewhat arbitrary, # about 5MB per site # site class size queue command # - -- - -- -- sloth u 500000-750000 20 batcher| compcun | viauux
与邮件一样,sloth 是我的 ISP 的 UUCP 主机。u 类选项指定批处理将通过 UUCP 传输。批处理的大小名义上设置为 500KB,最大大小为 750KB。如果指定了单个值,则它是名义值,最大值是名义值的 3 倍。queue 字段允许最多 20 个批处理排队。最后一个字段中的管道命令指定如何处理批处理。批处理程序获取传出新闻文章的假脱机,并将它们组装成名义大小的批处理。它将批处理传递给 compcun,后者压缩批处理。默认情况下,compcun 使用 compress 函数,虽然它不如 GNU 的 gzip 效率高,但任何系统都肯定可以理解它。如果您对使用 gzip 充满热情,请联系您的 ISP 以查看他的系统是否安装了 gzip。(别笑,有些 ISP 使用来自其硬件提供商的软件,并拒绝安装任何自由软件基金会产品。现在我是认真的:停止笑。)compcun 现在将其压缩的文章传递给 viauux,这是 UUCP 的 C News 前端,它将压缩和拆分的文章传递到 UUCP 假脱机以进行传递。如果传入新闻是批处理的,则会经历相反的过程:通过 UUCP 传递、解压缩、取消批处理,然后进入新闻假脱机。
controlperm:controlperm 中的条目指定谁和哪些站点被允许为哪些组发送控制消息。C News 源代码附带的示例文件非常不言自明,因此我将跳过此主题,并给出警告:如果您通过来自 Linux 盒子的 UUCP 链接运行 C News,那么您并不重要到可以发送 newgroup 或 rmgroup 控制消息。不要这样做。
explist:除非您有神奇的硬盘驱动器,否则如果您不丢弃(“过期”)较旧的文章,您的新闻假脱机很快就会填满。您应该每天左右运行程序 doexpire,该程序检查 explist 文件以查看文章在假脱机中保留多长时间。explist 中的条目采用以下形式
grouplist perm times archive
grouplist 是逗号分隔的新闻组列表,该行将应用于该列表。子层次结构扩展是自动的,因此要使整个 rec.* 层次结构过期,rec 的 grouplist 就足够了。perm 条目指示组的类型:u = 未审核,m = 已审核,x = 两者皆可。
times 条目通常是单个数字,尽管它可以是以破折号分隔的三个数字的列表。如果是前者,则该条目指示文章到达您的站点后应保留多少天。当然,如果文章本身包含 Expires: 标头,该标头评估为较早的日期,则它将在那时过期。如果 times 条目是三个数字的组合,则第一个数字表示文章到达后必须经过多少天才能被视为“可过期”。我确信有人可以想出一个理由,为什么需要一个非零的数字,但我一无所知。第二个数字是以单位数格式看到的到期天数,第三个数字是允许文章躲避过期的绝对天数。
archive 字段在不进行存档时采用破折号,存档文件的完整路径名或 @ 符号。如果使用 @,则必须在使用 doexpire 运行时使用 -a 选项指定存档文件。
# NEWSCTL/explist #grouplist perm times archive # hold onto history lines 14 days, nobody gets # >90 days /expired/ x 14 - /bounds/ x 0-1-90 - # High-traffic or trivial groups get dumped # quickly control,junk,swcp,perrin x 3 - # default: 14 days all x 14 -
请注意,最早的匹配项被接受,因此当 doexpire 看到 control 组的 3 天限制时,它优先于末尾的 14 天包罗万象的限制。如果您想混合使用完整组名(例如 rec.arts.tv)和层次结构(例如 rec.arts.*),请记住将条目以递增的通用性放入 explist 文件中。
最后的评论:/expired/ grouplist 告诉 doexpire 将文章条目在历史记录文件中保留多长时间。对于多个订阅源,重复的文章可能会不时到达。C News 在 NEWSCTL/history 文件中保留文章列表,并删除任何重复项。历史记录文件中的行保留 /expired/ 指定的天数,以便如果重复项在原始项过期后几天到达,则不会重新发布它。如果您有一个配置正确且不向其叶子站点发送多个副本的单个订阅源,则可以将此值保持较小。
mailname:不言而喻。我的 mailname 文件包含单行
# NEWSCTL/mailname perrin.swcp.com
mailpaths:发布到审核的新闻组的帖子会通过邮件发送给审核员,由审核员决定是否发布。mailpaths 文件中每个审核的新闻组都有一行条目,包括组名、制表符和审核员的电子邮件地址。我阅读的唯一审核组是 comp.os.linux.announce,因此我的 mailpaths 文件很简单
# NEWSCTL/mailpaths comp.os.linux.announce linux-announce@news.ornl.gov
organization:这只是一个字符串,其中包含您从中发布的组织。对于家庭站点,像“Private News Server”这样的条目就足够了,尽管您可能会屈服于诱惑并想出一些令人眼花缭乱的有趣的东西。
sys:sys 是与外界对话的最重要文件;它指定您获取哪些层次结构、从哪里获取以及您愿意传递哪些新闻。对于我们的特殊情况,只需要两行。条目采用以下形式
site[/exclusions]:grouplist[/distlist][:flags[:cmds]]
来自 site 的任何不在(逗号分隔的)grouplist 中的文章都将被丢弃。distlist 是我们愿意转发的发行版(逗号分隔)列表。Path: 标头包含排除列表中的机器的任何文章都不会转发。
可以设置相当多的标志,但只有一个标志是相关的。f 标志告诉 C News 使用批处理。如果您使用批处理,则 cmd 条目包含的不是命令,而是文件名。如果文件名不是以斜杠开头,则它相对于 /var/spool/news/out.going。如果 cmd 字段为空,则文件是 remote-system/togo。
考虑到这一点,让我们仔细看看我的 sys 文件
# NEWSCTL/sys ME:all/all:: sloth/sloth.swcp.com:all,!perrin/all,!local:f:
我向我的 ISP 提供了我希望提供给我的新闻组列表;他将它们输入到他那端的配置文件中。因此,我可以安全地在 ME 条目中使用 all/all,而不必担心尝试以 14.4kbps 的速度下载整个 Usenet 订阅源。
sloth 条目再次指定了我的 ISP 的机器。通过将 sloth.swcp.com 放入排除列表,我不会尝试将文章发回。我为一些简单的测试创建了一个 perrin.* 层次结构;我的 sys 文件中的 grouplist 条目显示我将除 perrin 之外的所有新闻组都发送到我的 ISP。同样,旨在用于除 local 之外的所有发行版(world、usa、nm 等)的文章都会被发送出去。我将使用批处理,文章将存储在 /var/spool/news/out.going/sloth/togo 中。
whoami:机器的 hostname——在我的情况下是 perrin。
返回到 C News 源代码目录并 make cmp 以查看一切是否已正确安装和配置。当您看到消息“no worrisome differences”(没有令人担忧的差异)时,您无疑会想短暂地停下来,从计算机前站起来,跳一小段舞,因为终点快到了。
是时候自动化了!作为 news,使用 crontab -e 创建/编辑 crontab。此处的条目将设置内务处理任务和传输的计划。这是我的
#/var/spool/cron/news 09 * * * * /usr/lib/news/input/newsrun 22 * * * * /usr/lib/news/batch/sendbatches 59 0 * * * /usr/lib/news/expire/doexpire 17 8 * * * /usr/lib/news/maint/newsdaily 05 * * * * /usr/lib/news/maint/newswatch 3000 300 100
在每小时的 9 分钟,newsrun 获取 UUCP 传递的批处理文章,解压缩它们,并将它们存储到新闻假脱机中。
在每小时的 22 分钟,sendbatches 获取传出的文章,对它们进行批处理和压缩,并将它们传递到 UUCP 假脱机以进行上传。这些文件将在下一次 UUCP 连接发生时传输,因此 su 到 uucp 并编辑 crontab,就像您对邮件所做的那样。
在凌晨 12:59,doexpire 负责使旧文章过期。
每天早上 8:17,newsdaily 会整理一些各种日志文件,并在出现问题时向新闻管理员发送邮件。
在每小时的 5 分钟,newswatch 会查看系统,以查看是否存在任何问题。过时的锁、磁盘已满等问题会报告给新闻管理员。
您需要在系统启动时运行 newsboot,以清理潜在崩溃后留下的任何混乱。为了保留权限,它需要以用户 news 身份运行。我在我的 rc.sysinit 文件的末尾添加了行
su news -c "/usr/lib/news/maint/newsboot"
到 rc.sysinit 文件的末尾。
安装手册页。由于系统差异很大,您最好的选择是更改为 C News doc/ 目录,并将它们手动复制到您的手册页子目录中。
通过以下方式创建本地测试组
cnewsdo addgroup my-site.test y
并发布到它。如果您制作了 readpostcheck,则可以使用 postnews 包执行此操作。查看 NEWSARTS/in.coming,您应该会看到该文章,其中包含 postnews 周到地提供的标头信息。离开计算机房,与您的家人共度时光,直到 newsrun 再次执行。现在,您的文章应该已出现在 NEWSARTS/my-site/test 中,并且还应该在 NEWSCTL 中的历史记录和日志文件中包含条目。如果您安装了 readpostcheck,请使用 readnews -n my-site.test,您应该会看到您的消息。拍拍自己的背;您已经拥有了一个 Netnews 站点。
停止拍拍自己的背。除非您计划花时间向 my-site.test 发送消息并在稍后阅读它们,否则您会想要来自外部世界的新闻组。C News 附带的安装说明涵盖了此步骤,其中“从某人那里获取订阅源,以某种方式”。最好通过向您的 ISP 发送您要接收的新闻组列表,并在设置完成后请求电子邮件来处理此问题。
作为新闻,编辑文件 NEWSBIN/active 和 NEWSBIN/newsgroups。它们都应具有权限模式 644。
active 包含新闻组列表、其文章编号和发布权限。每行应采用以下形式
news.group.name highest lowest perms
:Highest 和 lowest 是 news.group.name 中可用文章的上限和下限。对于设置,请将最高设置为 00000000,将最低设置为 00001。为了节省时间,C News 从不更新最低值,因此如果您的新闻阅读器(例如 trn)查看最低值,则您需要设置 crontab 条目以不时运行 updatemin。相关的参数是 y:用户可以发布到该组;n:用户可以阅读但不能发布;m:新闻组已审核。发布到此新闻组的帖子实际上将发送到 $NEWSCTL/mailpaths 中指定的审核员地址。
当新闻传入时,C News 将不断更新活动文件。这是我的一个片段
alt.tv.homicide 0000000002 00001 y alt.tv.nypd-blue 0000000010 00001 y comp.os.linux.announce 0000000009 00001 m comp.os.linux.misc 0000000504 00001 y linux.dev.kernel 0000000048 00001 y rec.arts.sf.written.robert-jordan 00033 00001 y rec.arts.tv 0000000334 00001 y swcp.test 0000000005 00005 y
除了“真实”新闻组外,您还应该拥有用于控制、垃圾邮件、to.feed-site 和 to.my-site 的组。
这个文件可以通过手动维护,或者使用 addgroup 和 delgroup 命令维护。 第二次警告:不要 发送 newgroup 或 rmgroup 消息;这些命令会为整个 Usenet 创建组,而不是为我们这些凡人准备的。 即使你可能很想自己主动创建 newgroup alt.fan.back-hair,但是创建新的 Usenet 组是有程序的,违反这些程序会让你不受欢迎。
在使用 C News 运行了一两天后,我注意到一件事:控制消息占用了我大约 80% 的新闻假脱机空间。 为了减少磁盘空间,我让我的 ISP 从他提供给我的组列表中删除了 control。 我不再接收 newgroups、rmgroups 或 cancels 消息,但这为了节省磁盘空间是值得的。 四十个非二进制新闻组,大部分是低流量的,仅仅三两天就占用了我近 8MB 的磁盘假脱机空间。 将其乘以控制组的五倍因子,你就可以明白为什么我可怜的 50MB 假脱机空间负担不起控制消息了。 然而,请确保你的 ISP 仍然接受你发送的 control 消息,因为你可能有一天需要取消一个愚蠢的问题或匆忙发布的煽动性言论。
newsgroups 文件包含一个活跃新闻组的列表,以及每个新闻组的简要描述。 当用户阅读一个新的新闻组时,应该显示此描述,以提供一些新闻组信息。 这对于防止烟火技术员误入像 alt.flame 这样的地方非常有用。 我通过修剪我的 ISP 的副本制作了我的 newsgroups 文件。
最后一步:请在你的 feed 中包含一个本地测试组——你的 ISP 可能有一个。 向它发布一条消息,等待批处理和 UUCP 完成它们的工作,然后看看它是否显示出来。 如果是这样,向其中一个“真实”的新闻组发布一条测试消息。 通过使其相关且切题来伪装它是测试消息的事实。 如果它显示出来,你就成功了。 坐下来,放松一下,喝杯可乐,笑一笑。
Jim Hill 是洛斯阿拉莫斯国家实验室的研究生助理,自 .99 内核系列以来一直在玩 Linux。 尽管对本文的主题完全无知,但他还是着手学习一些东西,也许可以帮助别人。 感谢 Southwest Cyberport 的 Mark Costlow (cheeks@swcp.com),没有他的帮助和耐心,这篇文章可能会写成“它不起作用;它不可能完成。”