INN のコンパイル前に次のソフトをインストールする必要がある
INN-2.3.3 は以下のところから入手できる。
また INN は日々改良が続けられており、snapshot として入手できるようになっている。 snapshots ディレクトリに置かれているファイルのうち inn-STABLE で始まるものは、 バグフィックス等小規模な変更のみが行なわれたもので、 将来 INN-2.3.x としてリリースされる。 一方、inn-CURRENT で始まるものは機能追加等が行われたもので、将来 INN-2.4.x としてリリースされる。
まず、あらかじめ GNU の grep, sed をインストールしたディレクトリにパ スを通しておいて、OS に付属のコマンドよりも先に見付かるようにしておく。
次にソースの展開して configure を実行する。
(例)
% env CC=gcc CFLAGS=-O2 \
LDFLAGS="-s -R/usr/local/lib -R/usr/local/BerkeleyDB.3.3/lib" \
./configure --with-perl --with-sendmail=/usr/lib/sendmail \
--with-berkeleydb=/usr/local/BerkeleyDB.3.3 \
--mandir=/usr/local/man
configure 時に指定できるオプションに以下のようなものがある。
これ以外のオプションについては、INSTALL や configure --help の出力等を 参照のこと。
オプション以外でも、 CC や CFLAGS のような configure 標準の環境変数を設定することで、 コンパイル環境を制御することも可能である。
configure 後、make を実行してエラーにならなければコンパイルは完了である。
root になって make install (新規インストール時) または make update (アップデート時) を行えばインストールが完了する。
| tradspool | INN-1.x の頃から使用されている形式で、 ~news/spool/article の下に news/software/nntp/12345 という形式で記事を保存する。 古いバージョンとスプールの互換性はあるので移行は容易だが、 スピードが遅いのがデメリット。 |
| timehash | 1 article 1 file は traditional と同じだが、 hash 関数を用いて保存するディレクトリを決定する。 スピードは中程度。 |
| timecaf | ディレクトリ構造は timehash と似ているが、 複数の article を 1つのファイルにまとめて保存する。 スピードは速い。 |
| cnfs | article 用の buffer を確保して、 そこに連続的に cyclic に書き込みを行う。 buffer が溢れると古い記事が自動的に上書きされるため スプールが溢れることはないが、 記事の保存期間を設定することはできない。 スピードは最も速い。 |
フルフィードを行なっているサイトでは性能を重視して cnfs を使用するのがいいだろうが、 ごく一部のニュースグループしか講読していないサイトだとスピードはそれほど問題にはならないので、 管理の容易さを重視して traditional を使用するのがいいだろう。
なお、このドキュメントでは tradspool を使用する場合について説明するに留める。 timehash, timecaf または cnfs を使用する場合は INSTALL 等、 他のドキュメントを参照のこと。
もし /etc/passwd, /etc/group に news というユーザー、news というグルー プが存在しない場合はあらかじめ作成しておく。
news ユーザーのホームディレクトリは configure 時に --prefix で指定し たディレクト (デフォルトは /usr/local/news)、シェルは sh か csh に 設定するのがいいだろう。
~news/etc/inn.conf をサイトの環境に合うように修正する必要がある。 最低限設定が必要と思われるエントリーは以下の通り。
~news/etc/newsfeeds を、デフォルトで設定されている ME 行をコメントア ウトして、以下のように記述する。
ME:*,!control*,!junk::
host/alias:*,!local.*,!control*,!junk/!local:Tf,Wnm:
host には上位ホストの nickname で、nntpsend ファイルで参照される。
また、alias には、feed 元で Path に記述される名前を書く。
alias が host に一致する場合は省略可。次に、innd は自分自身で overview データベースを作成する機能があるが、 外部ブログラムに実行させることによって性能を向上させることができる。 これを行うためには、
#overview!:*:Tc,WnteO:/usr/local/news/bin/overchan
のコメントを外し、~news/etc/inn.conf に
useoverchan: true
を入れる。
さらに、
#controlchan!\
# :!*,control,control.*,!control.cancel\
# :Tc,Wnsm:/usr/local/news/bin/controlchan
のコメントを外すとコントロールメッセージの処理速度を向上させる
ことができる。使用する場合は ~news/etc/inn.conf に
usecontrolchan: true
の設定もあわせて行なう。
スプールに保存する形式をこのファイルで指定する。 tradspool を使用するのであれば、以下の設定を入れればよい。
method tradspool {
newsgroups: *
class: 0
}
~news/etc/incoming.conf ファイルに、自分にニュースをフィードするサイ トを FQDN または IP address で記述する。
(例)
peer hostname {
hostname: hostname.domain.name
}
このファイルは、INN-1.x の hosts.nntp に相当する。
~news/etc/readers.conf に接続を許すホストを以下の形式で記述する。
(例)
auth "local" {
hosts: "10.0.0.0/8, 192.168.0.0/16"
default: "<local>@host.domain"
}
access "local" {
users: "<local>@host.domain"
newsgroups: "*"
}
このファイルは、INN-2.2 までの nnrp.access に相当する。
~news/etc/nntpsend.ctl に以下のように記述する。
host:FQDN:1m:-T1800 -t300ここで、host には newsfeeds に書いた host と同じ文字列を使用する。
デフォルトでは
*:%s@moderators.isc.org
となっていて、moderator group に投稿された記事は ISC にある
moderators データベースに飛んでいくようになっているので特に設定する
必要はないが、自力で設定したい場合や local に moderator group を
作成する場合は、上の行の前に以下のような設定を moderators ファイルに
追加する。
(例)
gnu.*:%s@prep.ai.mit.edu
jp.inet.*:%s@utsun.s.u-tokyo.ac.jp
fj.*:%s@creamy.ics.es.osaka-u.ac.jp
tnn.*:%s@news.iij-mc.co.jp
iij.*:%s@news.iij.ad.jp
*:%s@uunet.uu.net
講読していないニュースグループのコントロールメッセージが、クロスポスト 等を通して流れ込んでくる場合には、そのグループのコントロールメッセージが 自動的に処理されないように、コメントアウトしておく。 また、今後アドレスの変更のアナウンスがあった場合にも 修正の必要が出てくるので、注意しておく。
これらのファイルは、ユーザーに情報を与えるためだけに使用されるので、 特に作成する必要はないが、ユーザーに便宜を与えたい場合には作成する。
~news/etc/motd.news に、そのニュースサーバーに関する情報を記述する。
以下のような内容で ~news/etc/distribution を作成する。
world Everywhere on Usenet in the world (same as net)
fj Everywhere in Japan
jp Everywhere in jp
iij Everywhere in iij
tnn Everywhere in The Net News
local Local to this site
必要に応じてローカルの内容を追加する。なお、distribution を正しく使えるようにするためには、その範囲にある すべてのサーバーが正しく設定されている必要があるため、現在は local (これは自サーバーの設定さえ正しければ使える) 以外は実質的に機能して いないという意見もあることも付記しておく。
expire の期間をデフォルトの設定から変更した場合は、 expire.ctl の中身を修正する。
上位サーバーの active ファイルを入手して、以下の sed script によって カウンターをリセットし、~news/db/active として置く。
% sed -e "s/\([^ ]*\).*\(.\)/\1 0000000000 0000000001 \2/"
なお、上位サーバーの active ファイルを入手するにはメールで送ってもら
う方法もあるが、上位サーバーに接続できるのであれば、
% script
% telnet news.domain.name nntp
list active
quit
を実行して、typescript ファイルを編集する方法もある。また、閉じた環境で運用する場合など、 active ファイルを送ってもらうことのない場合には、
control 0000000000 0000000001 y
junk 0000000000 0000000001 y
という内容で、最低でも control と junk だけは作成しておく。
% ~news/bin/makehistoryを実行して、history database を作成し、
% ~news/bin/makedbz -s `wc -l < history` -f historyを実行して db 化する。
古いバージョンから history データベースをアップデートするときは、 makehistory を実行する代わりに古い history ファイルをコピーして、 makedbz を実行すればよい。
/etc/syslog.conf に以下の設定を追加する。
news.crit /dev/console
news.crit /usr/local/news/log/news.crit
news.err /usr/local/news/log/news.err
news.notice /usr/local/news/log/news.notice
/usr/local/news/log の部分は、inn.conf の pathlog の設定に置き換える。
なお、左右の区切りは TAB を用いること。スペースを用いると正しくログ
を出力されないので注意する。変更したら
# touch /usr/local/news/log/news.crit
# touch /usr/local/news/log/news.err
# touch /usr/local/news/log/news.notice
でファイルを作成した後、
# kill -HUP `cat /etc/syslog.pid`
を実行して、実行中の syslogd に設定変更を反映させる。
/etc/aliases を変更して news と usenet の alias を定義し、 newaliases を実行する。
例)
news: postmaster
usenet: news
pgpverify を使いたい場合は、inn.conf で
pgpverify: true
が設定されていることを確認した上で、以下の作業を行なう。
なお、以下の作業はすべて news ユーザー権限で実行する必要がある。
そのため、GnuPG もインストールされているが PGP を使いたいユーザは、 インストール後 /usr/local/news/lib/innshellvars.pl の
$gpgv = "/usr/local/bin/gpgv" ;という行を
$gpgv = "" ;と修正する必要がある。
以上の設定が終了したら、~news/bin/inncheck を実行して、設定が正しい かどうかを確認する。
news ユーザーで ~news/bin/rc.news を実行し、ps を実行して news のプ ロセスが動いているかどうかを確認する。
以下のプロセスが動いていればよい。
% ps -ef | grep news
news 17870 1 0 15:01:56 ? 0:00 /usr/local/news/bin/innd -p4
もし、動いていない場合は、/var/adm/messages および ~news/log 以
下にあるログファイルを見て、エラーを特定し、修正後、再度 rc.news を
実行する。
news ユーザーの cron を
0,10,20,30,40,50 * * * * /usr/local/news/bin/nntpsend
45 4 * * * /usr/local/news/bin/news.daily expireover lowmark
のように設定して、
を行うようにする。
news.daily に指定するオプションは "expireover lowmarkl" が最も一般的 だが、他のオプションを指定することも可能。 どのようなオプションを指定できるかは news.daily のマニュアルを 参照すること。
SunOS 4.1.4 では、以下の行を /etc/local に追加して、boot 時に news が起動するようにする。
#
# start up INN
#
if [ -f /usr/local/etc/rc.news ]; then
/bin/su - news -c /usr/local/news/bin/rc.news > /dev/null & echo -n ' innd'
fi
Solaris 2.x の場合は /etc/rc2.d/S95inn として以下のファイルを置いて、
boot 時に news が起動するようにする。
#!/sbin/sh
#
# start up INN 2.3.3
#
PATH=/usr/bin; export PATH
case "$1" in
'start')
if [ -f /usr/local/news/bin/rc.news ]; then
/bin/su - news -c /usr/local/news/bin/rc.news
echo "Start up INN 2.3.3"
fi
;;
'stop')
/bin/su - news -c '/usr/local/news/bin/ctlinnd shutdown ""'
;;
*)
echo "Usage: /etc/init.d/news {start|stop}"
;;
esac
また、~news/bin/inndstart と ~news/bin/startinnfeed は root の setuid bit が、~news/bin/rnews は news の setuid bit が立っ ている必要があるが、そうなっているか?。
なお、filter_innd.pl は隣接のニュースサーバーから配送される記事に対して 機能するが、ローカルにポストされた記事に対して filter の機能を有効にしたい 場合は、filter_nnrpd.pl を置き換える filter を利用する。
INN には update インストールというものが用意されており、config の内容 を変更して再コンパイルを行った場合には、
# make updateによって、すでに設定した設定ファイルを書き換えずに binary の update を 行なうことができる。
しかし、INN-2.0 → INN-2.1 や INN-2.1 → INN-2.2 などのバージョンアッ プ時には、ディレクトリ構成が大きく変わることが多いため、update インス トールでは正しく動作しないことも多いので、
# make installで新規インストールを行ない、インストール後 .OLD ファイルと比較しながら 各設定ファイルを再設定することを強くお勧めする。
INN-2.0 からは X-Trace ヘッダに投稿したホストの情報が記録されるように なったが、ニュースサーバーが Firewall の内側にあるなど、IP address を 記録したくない場合は以下の箇所を修正する。
--- nnrpd/post.c 1998/07/27 01:04:03 1.1
+++ nnrpd/post.c 1998/07/27 01:04:27
@@ -513,8 +513,8 @@
return "Can't get the time";
if ((p = GetFQDN()) == NULL)
p = "unknown";
- sprintf(tracebuff, "%s %ld %ld %s (%d %3.3s %d %02d:%02d:%02d GMT)",
- GetFQDN(), (long) t, (long) pid, ClientIp,
+ sprintf(tracebuff, "%s %ld %ld (%d %3.3s %d %02d:%02d:%02d GMT)",
+ GetFQDN(), (long) t, (long) pid,
gmt->tm_mday, &MONTHS[3 * gmt->tm_mon], 1900 + gmt->tm_year,
gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
HDR (_xtrace) = tracebuff ;
従来のバージョンでは inews は 2555 というモードでイントールされていたが、 INN-2.2.3 から 0550 というモードでインストールされるようになった。
INSTALL には
--enable-setgid-inews If this option is given to configure, inews will be
installed setgid news and world-executable so that
non-privileged users on the news server machine can
use inews to post articles locally (somewhat faster
than opening a new network connection). For
standalone news servers, by far the most common
configuration now, there's no need to use this
option; even if you have regular login accounts on
your news server, INN's inews can post fine via a
network connection to your running news server and
doesn't need to use the local socket (which is what
setgid enables it to do). Installing inews setgid
was the default prior to INN 2.2.3.
と書かれていて、
という説明がされているが、同時に内部で inews を起動している mailpost もそのままでは動作しなくなった。
そのため、mailpost を使用する必要のあるサイトでは、 configure 時に上の --enable-setgid-inews オプションを指定するか、 インストール後に
# chmod 555 /usr/local/news/bin/inewsを実行するかのいずれかの方法を取る必要がある。
% /usr/local/news/bin/ctlinnd shutdown ""innwatch を使っている場合は、innwatch のプロセスも手動で kill し ておいた方がいいでしょう。
mail/remote-path-host:*:Tp:\
sm %s | innmail -s "Posted news at xxx" news@domain.name
sendsys:*:*:log=sendsys
version:*:*:log=version
また、それ以外の control message に対しては、
controlchan! を使って 1つのプロセスで処理するようにする。
なお、GD-1.20 から特許問題の影響で gif のサポートが外されたため、 innreport では png で出力する。どうしても gif を出力したい場合には GD-1.19 を使用する必要がある。
例: % foreach g (`cat file`)
? ctlinnd newgroup $f
? end
% ctlinnd pause "Edit active"
% vi active
(active ファイルを編集)
% ctlinnd reload active "Edit active"
% ctlinnd go "Edit active"
% ctlinnd shutdown ""
% vi active
(active ファイルを編集)
% su - news -c /usr/local/news/bin/rc.news
# auth : password list member
auth "authuser" {
auth: "ckpasswd -f /usr/local/news/user/member"
auth: "ckpasswd -s"
default: ""
}
access "trusted_member" {
users: "*,!"
newsgroups: "*"
access: RPA
}