Lnews: local news system

COPYRIGHT(C) 1998 BY D.Ikawa. ALL RIGHTS RESERVED.

いきなりブツ

1. 概要

1.1 Lnews とは

配送機能がまったくない「ネットニュースシステム」です。単に、ニュース的記事を受けとってスプールに放り込むだけ、という簡単な作りとなっております。

1.2 使い道

Lnews は、1995年の夏ごろ、名古屋大学で作られた、DNAS と組み合わせて使うことを意図してつくられました。Lnews の名前自体、DNAS のドキュメントに出てくるものをそのまま無断借用 :^) させていただいております。

その後、DNAS から DeleGate に乗り換えたり、個人で某プロバイダと契約したりして Netnews 環境が変わったのにともない、すこしづつ変更やらデバッグやらを加えました。この配布物に含まれるのは version 3 で、Suck との組み合わせでどこかのニュースサーバにある記事を取り込み、オフライン(?)でゆっくり読むための仕掛けとなりました。

2. 配布物と配布条件

2.1 配布物

inews.c:
C による投稿プログラム。
link.pl:
投稿された記事を記事スプールへばらまくプログラム。
expire.pl:
古くなった記事を消すプログラム。
rnews-suck.pl:
Suck と併用するさい、rnews の代わりに使用。
suck.pl:
perl で書いた suck。とても遅いです。
lnews.conf:
設定ファイル。
nntpd.pl:
簡易 nntp サーバ。
aclocal.m4:
CF-3.5W 付属の aclocal.m4

Expires: ヘッダによる、記事の長期保存機能を使うには、getdate.pl をどこかから手に入れてください。私は mailagent に附属のものを使っています。

2.2 配布条件

3. インストールと設定

3.1 インストール

必要なもの
perl-5.004, C コンパイラ, news ユーザのアカウント
準備
/usr/spool/news をニュース・スプールとして使用します。このディレクトリ以下は、1つのファイルシステムになっていることを仮定しております。
/usr/lib/news に、システム本体と active, history ファイルをおきます。
手順
設定
設定の一部は、lnews_conf ファイルを書き換えることで可能です。
$domainname:
Message-ID につくドメイン名を指定します。
$spooldir:
ニュース・スプールを指定します。
$active:
active ファイルのファイル名を指定します。
$history:
history ファイルのファイル名を指定します。
$expire:
記事が古くなるまでの期間を指定します。
$expire_short:
投稿された記事が取っておかれる最短時間を指定します。
$archive:
この変数にマッチするニュースグループの記事は、$spooldir/archive ディレクトリ下にも保存されます。
$use_expires:
0 以外ですと、expires: ヘッダが有効になります。

3.2 crontab

link.pl と expire.pl を定期的に起動するように書いてください。作者は Slackware 3.4 ですが、

15,30,45,59 * * * * /usr/lib/news/link.pl
3 13 * * *          /usr/lib/news/expire.pl -silent

と書いてあります。(昼間つけてることが多いので expire はお昼にやってます)

4. マニュアル

inews

inews は、投稿を行なうコマンドです。inews に記事を食わせてやると、スプールしてくれます。引数は無視します。.signature ファイルは追加しません。

inews は、実際には /usr/spool/news/in.coming にファイルをつくって記事を書き込む作業をするだけです。記事内容のチェックなどは、link.pl が行います。投稿時にファイルのオーナを news ユーザにするために、 setuid バイナリになっています。

link.pl

link.pl は、inews で投稿された記事を、/usr/spool/news 以下の適当なディレクトリに配置するプログラムです。15分程度の間隔で、news ユーザの権限で適当に起動してください。

expire.pl

expire.pl は、古くなった記事を消去するコマンドです。1日1回程度、news ユーザの権限で適当に起動してください。

rnews-suck.pl

Suck を併用してどこかの NNTP サーバから記事を引っ張る場合、get.news.rnewsで使用する rnews の代わりに rnews-suck.pl を使います。

suck.pl

Suck が嫌いな方のために?、perl で書かれた suck です。

引数に NNTP サーバ名をつけて起動してください。

以下の 3つのファイルで若干動作を変更できます。

/ggroup.サーバ名
引っ張ってくる newsgroup を設定します。正規表現が使えます。
/newsrc.サーバ名
最後に Suck.pl を起動したときに読んだ記事の番号のリストです。
/temphist.サーバ名
引っ張り損ねた記事のリストです。前回、suck.pl を SIGPIPE で終了させた時に、suck.pl が作ります。

5. メンテナンス

5.1 Newsgroup の増減

Lnews は、control を引っ張ってくるようには設計されていません。手動でnewgroup/rmgroup する必要があります。が、active に

aNewGroup 0000000000 0000000000 y

と一行追加すれば、aNewGroup というグループが追加されたことになります。ディレクトリは、新しいグループに記事が投稿されたときに生成します。

5.2 history が壊れたら

テキストエディタで直せます。

5.3 active が壊れたら

テキストエディタで直せます。

6. おわりに

6.1 謝辞

以下の皆様に感謝をささげたいと思います。

名古屋大学 DNAS プロジェクトのみなさま
* DNAS がなかったら、このようなプログラムを書くこともなかったでしょう。(阿草先生はお元気ですか?)
Larry Wall さま
* perl がなければこのプログラムは C で書かれていました。
Larry Wall, Randal L.Schwartz, 近藤 嘉雪さま
* programming perl (Softbank 刊) を駆使してこのプログラムはかかれました。
京大マイコンクラブ、OBのみなさま、especially 伊東由人師匠@そば
* プログラミングの楽しさはここで教えていただきました。

6.2 最後に

LNews version 1 は、私のはじめて書いた perl プログラムでした。現在はversion 3 + suck.pl にまで成長してきましたが、汚いのは相変わらずです。