次のページ 前のページ 目次へ

5. nntpd

この章では、nntpd のインストール、設定、gnspool, gninews との連係について解説し ます。

5.1 インストール

適当なディレクトリに nntpd のソースを展開します。

まず、nntp.1.5.11t/common/conf.h を編集します。特にディレクトリ関係の設 定は、gnspool での設定と矛盾しないようにしなければなりません。私は次のようにしま した。


#define DBM
#undef DBZ
#define CNEWS
#define GHNAME
#undef  UUNAME
#define STAT_FILE      "/usr/lib/news/mgdstats"
#define NGDATE_FILE    "/usr/lib/news/groupdates"
#define ACTIVE_FILE    "/usr/lib/news/active"
#define ACCESS_FILE    "/usr/lib/news/nntp_access"
#define DISTRIBUTIONS_FILE     "/usr/lib/news/distributions"
#define NEWSGROUPS_FILE        "/usr/lib/news/newsgroups"
#define HISTORY_FILE   "/usr/lib/news/history"
#define INEWS          "/usr/lib/news/inews"
#define POSTER         "news"

デフォルトでは dbz ライブラリを使うようになっているのを、dbm ライブラリを使うよ うに変更しています。dbz ライブラリのある人は、そのままで構いません。変更した場合 は、Makefile も変更します。

デフォルトでは /etc/uucpname を参照してホストの名前を解決するようになっ ていますから、gethostname() を使って解決するように変更しました。

編集が終ったら、make server を実行して nntpd を生成して下さい。私のとこ ろでは nntp.1.5.11t/server/timer.c に変更が必要でした。124行目の select() 関数がおかしいといわれたので、


#if 1 /* Was EXECLAN */
    n = select(fileno(stdin) + 1,&readfds, (fd_set*)0, (fd_set*)0, timeout);
#else

と変更しました。

次に、root になって /usr/sbin/ に nntpd をコピーします。

5.2 ニュースを読むための設定

/etc/inetd.conf を修正して、nntpd が起動されるようにします。次の1行を付 け加えるか、修正して下さい。


nntp    stream  tcp     nowait  news    /usr/sbin/tcpd  nntpd

次に、/usr/lib/news/nntp_access を作成します。このファイルで、nntp によ るアクセスを許可するホストを設定しています。とりあえずは、次のような設定でよいで しょう。


default      no    no
localhost    read  post

ここまでの設定でニュースを読めるようになっているはずです。環境変数 NNTPSERVER を localhost に設定して mnews などで読んでみましょう。

読めなかった場合は、telnet localhost nntpとして、反応を見て下さい。 "Can't talk to you" といわれた場合は nntp_access の設定が間違っています。 /var/log/messages/var/log/syslog にエラーの情報が残ってい ると思いますので、参考にして下さい。

5.3 ニュースを投稿するための設定

次のような内容のスクリプト /usr/lib/news/inews を作成します。


#!/bin/sh
/usr/lib/news/bin/gninews

これだけで、投稿できるようになっているはずです。ニュースリーダーから投稿のテスト をして下さい。すると、/var/spool/news/news.out/gn?????? というファイル に投稿した記事がスプールされているはずです。次に、


su news -c "gnspool -py -h news.server"

を実行すれば、実際にニュースサーバーに記事が投稿されます。(この場合も、NNTP Server は明示的に指定して下さい。)

5.4 From: 行について

gnspool で記事を投稿する場合、スプール時の From: は無視され、.gnrc の設定 を用いて次のように変更されます。
[注. gn-1.40 からスプール時の From: を使うように gnspool に強制することが出 来るようになりました。gn(1) のオプション SUBSTITUTE_HEADER についての説明を参照 してください。このオプションを適切に設定すると、後述の impost に頼らずに From: を使い分けることができます。]


From: news@mydomain.or.jp (Hoge Hoge)

名前とドメイン名は .gnrc の設定が使われ、gnspool を実行しているアカウン ト (news) と組み合わせて、From: が生成されるようになっています。従って、送信者を 明示したい場合は、Sender: や Reply-To: などのヘッダを利用して下さい。

news@mydomain.or.jp が、自分とは関係ない人のメールアドレスとなって都合が悪い場合 には、環境変数 LOGINNAME が利用できます。例えば、次のようなスクリプトを用いると、


#!/bin/bash
export NEWSLIB=/usr/lib/news
export NEWSSPOOL=/var/spool/news
export LOGINNAME=hogehoge
gnrc=$NEWSLIB/.gnrc
export NNTPSERVER=$(/usr/bin/awk '/^NNTPSERVER/ {print $2}' $gnrc)
/usr/lib/news/bin/gnspool -py

アカウント名の代わりに環境変数 LOGINNAME が使われ、
From: hogehoge@mydomain.or.jp (Hoge Hoge)

とすることができます。

5.5 impost の利用

どうしても From: を使い分けたい場合には、impost という Perl のスクリプトがありま す。gnspool の代わりに投稿用のスクリプトとして使えば、スプールした時の From: を 使って投稿することが出来ます。最新バージョンは 0.99i で、 ftp://falcon.econ.kyoto-u.ac.jp/pub/dist/impost/ で手に入ります。
[ この項は fj.os.linux に投稿された次の記事を参考として書かれました。

おおつかさんに感謝します。 ]

実際に impost を使う手順について解説します。impost を /usr/lib/news/bin/ にコピーして下さい。その時、先頭行の perl のパスをシ ステムに合わせて変更し、実行許可属性を与えておきます。次に、環境設定ファイル /usr/lib/news/.impostrc を用意します。私は次のような内容にしました。


config: default
option: -SMTPservers mail.server
option: -NNTPservers news.server
option: -noESMTP
option: -NewsPost
option: -User hogehoge
option: -Name Hoge Hoge
option: -NameInComment
option: -Org dokoka
option: -FromDomain mydomain.or.jp
option: -noMsgId
option: -noDate
option: -noNScmpl
option: -noMIMEbcc
option: -noNewsCheck
option: -Lines 3000
option: -JustQueuing
option: -ObeyHeader
option: -h
config: post
option: -noVerbose
option: -ProcessQueue

/usr/lib/news/inews を変更して、gninews の代わりに impost が起動される ようにしておきます。

ニュースリーダーとして mnews を利用している場合、メッセージに Path: ヘッダが付加 されますが、impost は Path: のついているメッセージを invalid なものと見なします。 これを回避するため、impost の275行目付近の


 && !&header_value("Path")

という行をコメントアウトしておきます。

これで準備できたはずです。テスト投稿をしてみましょう。オフラインの状態で投稿する と、/usr/lib/news/.imqueue/ というディレクトリに記事がスプールされます。 その後、


su news -c "/usr/lib/news/bin/impost -config post"

というコマンドを発行すると、実際に記事が送信されます。

上記の設定で impost を利用した場合、ヘッダは次のようになります。


Newsgroups: test
Subject: test
From: someone@myhost.mydomain.or.jp (Someone)
Path: someone
X-Newsreader: mnews [version 1.19] 1995-07/21(Fri)
Organization: dokoka
Originator: hogehoge@mydomain.or.jp (Hoge Hoge)
X-Dispatcher: impost version 0.99i (Apr. 6, 1997)
Lines: 1

この内、Organization:, Originator:, X-Dispatcher:, Lines: の各ヘッダが impost に よって付加されたヘッダです。From: には記事で指定した From: が使われ、Originator: によって投稿した人が確定されます。


次のページ 前のページ 目次へ