unixで実現するインターネットサーバ(inn-1.5.1sec2編)
個人やイントラサイトでも,ニュースサーバを立ち上げてみると面白いかも知れない。
ISPにあるニュースサーバのような外部からの配信を受け付けるタイプではなく、閉じた世界でもニュースサーバは立ち上げることが出来る。
ここではFreeBSD2.2.1R(ちょっと古いが)にinn-1.5.1sec2(これも..)をインストールし運用する手順をご紹介しよう。
1.ハードウエア編
全くローカルなニュースサーバを構築する場合は、他の,例えばwwwサーバなどと同居させても問題はないが、上位サーバからニュース配信を受けるような場合はある程度以上のハードウエア性能が要求される。
これは、一日あたりのニュース配信量が5GB〜と言う膨大なデータのため、プアなマシンではパフォーマンスが上がらないのだ。
CPUとメモリだが、今の時代ならPentium(MMX)-200MHz以上のものを使用したい。
浮動小数点演算には縁がないからAMDのK6もパフォーマンスが高い。
メモリは128MB積もう。
もちろん多いに越したことはない。
マザーボードはALIチップセットのものが良いかも知れない(Socket7の場合),何故かというと、64MB以上の実装メモリに対してもL2(二次)キャッシュが効くからだ。
Intel製チップセットの場合は、64MBで制限されているものが多い。
ハードディスクは最低2台を用意したい。
1台はシステム用,もう一台はニューススプール用だ。
スプールディスクの容量は多い程良いのは当然だが、全ニュースグループの配信を受け、保存期間を2週間前後にまで伸ばすのであれば20GBクラスは必要になる。
不要なニュースグループを受け付けないように,或いは保存期間を短くすることによってディスク容量の節約?は可能だが、IDEタイプのハードディスクは避けたい。
IDE タイプのハードディスクの場合は、通常PIOモードでのアクセスとなりCPUがディスクアクセスに関する世話をしなければいけないのだ。
ただでさえ負荷の重いニュースサーバに、ハードディスクの世話までさせるのは忍びない。
是非SCSIのバスマスタインタフェースカードを入手しよう。
インストールが簡単なのはAdaptecの2940シリーズだ。
2.インストール編
最初に行うべき事はパーティションの設定だ。
DISK1(システム用)に3GBクラスのHDDが接続されているなら、/varと/usrに1GBずつ割り当てておこう。
/や/homeはテキトーでよい。
DISK2(ニューススプール用)は/var/newsに全容量を割り当てる。
SCSIカードをディスク毎に用意すればベストだが、1枚のカードでももちろん動作するし、DISK1はIDEでもガマンできないことはない。
innはportsにも用意されている,が、CD-ROMには入っていない場合もある。
その場合でも"/usr/ports/news/inn"は用意されているはずだから、そのディレクトリからFT
でftp
//ftp.freebsd.org/pub/FreeBSD/ports/news/inn に接続してスケルトンを入手しよう。
ダイアルアップ接続の方には酷なようだが、もっと過酷な?作業は後に待ちかまえている。
inn-1.5.1sec2のインストールにはPerl5.003とPerl5.00401が必要になる。
CD-ROMにはPerl5.003は入っているが、Perl5.00401は、やはり上記サイトから手に入れなければならない。
実はこれが過酷な?作業で、innよりだいぶ容量がデカいのだ。
何故Perl5.003ではいけないのか?私は調べていない。
Perl5.003をPerl5.00401にリネームしたら動くのか?も試していないが、Perl5.00401の代わりにPerl5.00404を使って動くことは確認した。
(参照名変更が必要)スケルトンが手に入り、Perlも準備できたところで"make install"を行う。
たったこれだけの作業でinn-1.5.1sec2はインストールされるのだ。
3.設定編
インストールが完了したからと言って、すぐに走らせて動くものでない事はお解りだと思う。
設定しなければいけないファイルは/usr/local/news/libにある。
では設定ファイルを順に説明しよう。
3−1:activ
これは上位サーバ管理者から供給して貰うのが一般的だ。
このファイルに書かれたニュースグループを受け取ることが出来,また参照することが出来る。
閉じたニュースサーバの場合はどのようなグループを作成しても良いが、controlとjunkだけは最低限必要になる。
エディタで以下のように作成してテストしてみよう。
control 00000000001 00000000001
junk 0000000001 0000000001
所有者は"news"にしなくてはいけない。
3−2:inn.con
これはニュースサーバの情報を設定するためのファイルである。
ニュース記事のヘッダ等に影響を与えるので、間違いなく設定しておこう。
organization
F&F-Network F&F.co.jpは架空(笑)server
news.F&F.co.jp
domain
F&F.co.jp
fromhost
news.F&F.co.jp
pathhost
news.F&F.co.j
簡単に説明しておくと、organization,server,fromhostは投稿記事のヘッダに存在しない場合に自動的に付けられる項目,pathhostは記事の逆流を防ぐために使用される。
3−3:newsfeed
これは4つのフィールドに分かれるのだが、設定例だけを見ていただくことにする。
ME
*,
foo.ad.jp/foo.ad.jp
*,!junk,!localnews/!local
Tf,Wnm
この例では、自分自身は全て受け取る[ME
*]配送先は[foo.ad.jp]で、[*]全てを配送するのだが、[!junk,!localnews/!local]は配送しないと言う意味だ。
分かりにくい日本語で申し訳ないが..( * は全て,! は否定を表している)!localnews/!localとなっている部分だが、!localnewsはローカルなニュースグループ,例えばF&F.localなどは外部に配送しないと言う意味。
!localはDistributionがlocalになっている記事は配送しないと言うことを示している。
最後のTf,WnmはTfで/var/spool/news/out.going以下にPathnameで指定したファイルを作成し、そこに配送する記事の情報を書き込むことを示し、Wnmはnntpsendで配送するための決まりのようなもの。
例えばjapanグループのみを購読したい場合には、newsfeedsを以下のように設定する。
ME
!*,japan
foo.ad.jp/foo.ad.jp
*,!junk,!localnews/!local
Tf,Wnm
[ME
!*,japan
]で、[!*]全てを受け取らないが、[japan]ジャパンのみは受け取る,設定だ。
ローカルなニュースサーバで、配送先がないような場合は単にME
*
だけ設定すればよい。
3−4:hosts.nnt
記事を流してくれる上流サイトのサーバ名を記述する。
ローカルで運用する場合には不要,上流サイトがある場合は、そこに問い合わせる必要がある。
3−5:nntpsend.ct
上流サイトに対する配送の指定を行う。
これも上流サイトに問い合わせて、設定値を教えて貰う必要がある。
3−6:nnrp.acces
ニュースクライアントに対する設定を行う。
特定のIPアドレスやドメイン名に対して記事の読み書きを制限する。
通常のプロバイダでは、ダイアルアップ接続を行ったときのみしかNews Serverに接続できないのはこの設定によるものである。
*
-no-
-no-
!* #全てアクセス禁止*.F&F.co.jp
Read Post
* #***.F&F.co.jpからは読み書き可能*.foo.co.jp
Read
*,alt #***.foo.co.jpからはalt以外を参照のみ可能3−7:moderator
Moderatedなニュースグループに投稿した際のメール配送先を指定する。
通常は上流サイトから情報を貰う。
3−8:control.ct
ニュースグループの追加や削除などのコントロールメッセージに対するアクションを規定する。
内容は4つのフォールドに分かれていて、最初のフィールドはコントロールコマンド,2番目のフィールドはコントロールコマンドを発行した人のメールアドレス,3番目のフィールドは該当するニュースグループ名,4番目のフィールドにはニュースサーバの動作を指定する。
all
*
*
mail #管理者にmailで報告する上記例では全て管理者にメールで知らせる設定だが、4番目のフィールドをdoitとすれば実行,dropとすれば無視することが出来る。
3−9:expire.ct
ニュースを削除しなければ、何テラバイトのディスクだろうが一杯になってしまう。
expire.ctlはニュース記事の保存期間を指定するために用いられる。
/remember/
30 #historyファイルには30日間記事情報を保存*
A
20
20
20 #デフォルトでは20日間記事を保存するjunk
A
1
1
1 #でもjunkはいらないから1日で消してしまうjapan*
A
60
60
60 #japanは60日間保存すると言った具合だ。
2番目のフィールドのAは、全ての該当するニュースグループを示す。
他にM,U等が指定できる。
3−10:passwd.nnt
上流サイトとの間の接続用パスワードを記述する。
3−11:histor
historyファイルを作成する。
/usr/local/news/libディレクトリから touch history でカラのファイルを作成し../bin/makehistory -f history とする。
なお、news/libディレクトリにある全てのファイルの所有者がnewsになっているだろうか?rootになっていると動作できないので確認しておくことが必要だ。
4.その他の設定
まずはsyslog.conの設定を変更する。
innが作成するlogを有効にするためだ。
−−syslog.confの中身*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/cron/log
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# uncomment these if you're running inn
news.crit /var/log/news/news.cri
news.err /var/log/news/news.er
news.notice /var/log/news/news.notic
!startslip
*.* /var/log/slip.log
newsの3行はコメントアウトされているハズなので、そこを外して有効にする。
さらに当該ファイルを作成しておかなければいけない。
/var/log/newsディレクトリでtouchコマンドにより各ファイルを作成する。
もちろん所有者はnewsだ。
次にusenet宛のmailが管理者に届くようにaliasesファイルを編集する。
usenet
roo
とでもしておけばよいだろう。
aliasesを変更したらnewaliasesコマンドを実行することを御忘れなく。
5.確認
設定する項目が多いから、それに間違いがないか?コーヒーの一杯でも飲みながら確認を行いたい。
ちなみにコーヒーをマシンに飲ませると、マシンの健康を害することがある。
要点は以下の通り*必要なファイルは設定したか?*ファイルの所有件はnewsになっているか?*/var/newsの所有権はnewsになっているか?*syslog.confやaliasesは設定したか?人間による確認が完了したら、/usr/local/news/bin/inncheckを実行してみよう。
コマンド自体が動かない場合は、perl5.00401が無いことが考えられる。
inncheckでエラーが出なければ、いよいよinndを動作させる。
6.動作
ニュースサーバをスタートさせるには、/usr/local/etc/rc.newsを実行する。
これでニュースサーバは完成というわけだ。
システムリスタート時に自動的にrc.newsが実行されるように、rc.localに変更を加えておいた方が良いかも知れない。
7.最後の設定
え?!まだ設定があるのかって?そう,cronの設定を行わなくてはいけない。
(ローカルサーバなら手動で行っても良い)crontab -e -u new
23 40 * * * /usr/local/news/bin/news.daily delayr
0,10,20,30,40,50 * * * * /usr/local/news/bin/nntpsen
これで終了だ。
後は毎日innから届くmailをチェックして、スプール容量などの監視を行えばいい。
...ご苦労様でした。
8.バージョンアップ
innもセキュリティホールが発見されている。
一度インストールして設定したら終わり,と言うのではなく、常に新しい(安定した)バージョンを追いかけるのも管理者の仕事だ。
ここれはinn-1.7にバージョンアップする手法を紹介(転載)しよう。
First, you should read the README and the Install.ms (yes, read them
both... again). Things change in new versions
Second, the README explains how to do an upgrade. This document is redundant,
but explains the procedure in more detail
STEP 1
Copy the values in the old config.data to your new config.data.
You can do this automatically with this trick
% cd config % make subst % cp config.dist config.data % ./subst -f {OLDFILE}
config.data where "{OLDFILE}" names your old config.data file
STEP 2
Edit the config.data to see if you want to change any of the
new settings that didn't exist in the old version's config.data file
STEP 3
Compile everything
% cd $INN % make all (you can run "make world", which also
runs "lint". If you don't know what "lint" is, just
ignore anything it outputs. If it bombs, run "make all" instead.)
STEP 4
When you feel you are ready to install the new files shut down
the old daemon
% ctlinnd shutdown 'upgrade in progress' [ kill innwatch by hand if
you need to ]
STEP 4
Install the new files
% cd $INN % make updat
STEP 5
Now update all your $INN/site files to be the same as they were
for your old software. "cd $INN/site ; make diff-installed" will
tell you what's different between the files in /usr/lib/news and $INN/site.
If you only make changes in the $INN/site directory and use "make
install" to copy them into place you'll save your self a lot of trouble.
Read $INN/site/Makefile for more interesting things that "make"
can do
STEP 6
When you feel you are ready to install the new $INN/site files
# cd $INN/site # make instal
STEP 7
Re-start the system
% sh /usr/lib/news/etc/rc.new
STEP 8
If everything was done right you should be up and running. Parts
3 and 4 of the FAQ gives tips on testing your configuration
If you're upgrading from 1.4, you'll need to change the call to rc.news
in your rc.local, /etc/init.d/INN or equivalent to "su news -c /path/to/rc.news"
since rc.news now gets run as news instead of root
DON'T FORGET to apply the appropriate security patches (even to 1.5.1!!)!!
例が載っているから読んで分からないことはないと思う。