FreeBSD:inn
提供: Configure.sh
目次 |
innって何?
innはニュースサーバになるソフトです。 ニュースシステムにはいろいろなソフトが存在しますが、その中でもinnはもっとも良く利用されているものの一つでしょう。
はじめに
さて、innの導入に必要な作業を簡単に示しましょう。といってもinnにはportsが存在しますので、コンパイルにはそちらを使うのが楽でしょう。 ここでは、なにかと面倒なコンパイルしたあとの実際の運用に向けての設定方法に関して説明します。なお、対象とするinnのバージョンは、2.4です。
導入
前提条件
ここでは、inn-2.2をportsからインストールした状態を前提に説明します。したがって,ニュースシステムのインストール先は,/usr/local/news以下であるとします。
設定
設定ファイルは,以下のディレクトリにインストールされます.
/usr/local/news/etc
このディレクトリにある設定ファイルとその役割は以下の通りです.
設定ファイル 意味 hosts.nntp ニュースの配送先のホスト設定 nnrp.access ニュースの購読を許可するホストの設定 newsfeeds 配送するニュースグループの設定 inn.conf ニュースサーバ自体のpathhostなどの設定 expire.ctl ニュースのexpireの設定 moderators モデレータの設定 control.ctl コントロールメッセージ処理の設定 innfeed.conf innfeedによる配送設定
それぞれのファイルの設定方法は以下の通りです.
hosts.nntp
記事を配送するホストを記述します.ここには,上流のサーバや下流のサーバを設定します.もちろん,自宅内などローカルのみで,どこにも配送を行なわないというのであれば,このファイルの中身は空になります.以下に設定例を示します.
newsserver.hogehoge:
単に配送先のホスト名+:(コロン)を書いておくだけです.:の右にはパスワードが必要な場合にパスワードを記述しますが,普通は不要でしょうから,なにも書きません.なお,ここでの注意として,ホスト名にワイルドカードは使用できません.
nnrp.access
ニュースの購読を許可するホストを記述します.いわゆるクライアントです.以下に設定例を示します.
## Default is no access, no way to authentication, and no groups. *:: -no- : -no- :!* ## Foo, Incorporated, hosts have no password, can read anything. 192.168.1.*:RP:::* 192.168.2.*:R:::*
この場合であると,192.168.1.0/24からは読み書き可能で,192.168.2.0/24からはリードオンリーという設定です.それ以外からは,読むこともできません.このファイルのフォーマットは,1行が以下のようになっています.
host:perm:user:pass:groups
それぞれの意味は以下の通りです.
- host
ホスト名(IPアドレス)を記述します.ワイルドカードも使えます. - perm
読み書きの許可不許可を指定します.Rは読みだし,Pは書き込み(Post)を許可する設定になります. - user
ユーザー名を記述します.普通はなにも書かなくてOKです. - pass
パスワードを記述します.普通はなにも書かなくてOKです. - groups
hostで指定したホストからどのニュースグループが読み書きできるかというパターンを設定します.例えば、以下のような設定では、groupのフィールドが、*,!compとなっているので、compグループ以外はすべて読み書き可能(compは不可)になります。
hogehoge:RP:::*,!comp
newsfeeds
このファイルでは,配送するニュースグループの設定をします.このファイルのフォーマットは,以下のようになっています.
site[/exclude,exclude...]\ ## :pattern,pattern...[/distrib,distrib...]\ ## :flag,flag...\ ## :param
まずは,ローカルのみでどこにも配送しない場合の設定例です.
ME:*::
と,これだけです.ローカルでニュースサーバを運用する時はこれで十分でしょう.また,実際に他のサーバとの配送を行なうニュースサーバでも,最初は設定を確認するためにも,一旦この設定でローカルで運用し,動作を確認する方が良いでしょう.ここで,MEというのは自分自身を表しています.つまり,自分自身にポストされたものはすべて受けとるというものです.
他のサーバへ配送を行なうようにする場合には,そのための設定を行います。 なお、innにはポストされたnewsの処理を制御できるようになっており、他のサイトへの配送処理についても、nntpsendによるものおよびinnfeedによるものの2種類が一般的です。 前者の場合、nntpsendというプログラムjが定期的にcronから起動されるタイミングで配送される仕組みであるのに対し、後者は新しいnewsがポストされたのを認識したタイミングで配送されます。 どちらの配送方法を使うかは、newsfeedsファイルのflag設定にて決まります。
それぞれの設定は次の通りです。
- nntpsendを利用する場合
ME:*::
newsserver.other\
:*,!localnews/!local\
:Tf,Wnm:
- innfeedを利用する場合
ME:*::
newsserver.other\
:*,!localnews/!local\
:Tm:innfeed!
ここで,newsserver.otherは,配送先(上流)のサーバであるとします.次の *,!localnews/!local となっている部分ですが,まず,/の前の前半部分で,localnewsというニュースグループ以外はすべて配送するということを意味します.つまり,ローカルなニュースグループがある場合は,ここで配送を禁止する設定をします.後半の !local となっている部分は,配送してはいけないDisgtributionを設定しています.つまり,どんなニュースグループにポストされたメッセージでも,Distributionが local のものは配送しないという設定です.
inn.conf
このファイルでは,ニュースシステム自体の設定を行ないます.以下に私のうちのローカルなニュースサーバでの設定例を示します.
pathhost: news.mqhnet organization: mqhnet server: mqh-host.mqhnet
この設定は,見れば直感的にわかると思います.といっても,pathhostだけはわかりにくいと思いますので,多少説明します. pathhostというのは,ホスト名ではありません.もちろん,ホスト名と同じでもかまわないのですが...ニュースのヘッダーを御覧になるとわかると思いますが,そのニュースがどこで投稿され,どのようなニュースサーバを通って来たかがずらずらと記録に残っていると思います.ここに入るのがpathhost名です.
expire.ctl
このファイルでは,古くなったニュースを,expireする設定を行ないます.例を以下に示します.
*:A:14:14:14 ## Some particular groups stay forever. mqhnet.*:A:never:never:never
この場合,mqhnetというニュースグループはexpireしない.それ以外は,14日保存するという設定です.
このファイルは,以下のフォーマットになっています.
patterns:modflag:keep:default:purge
それぞれの意味は以下の通りです.
- patterns
ニュースグループのパターン - modflag
M,U,Aの3種類が指定できます.Aはすべてのグループ,Mはモデレータあり,Uはそれ以外を示します. - keep
ニュースを保存する最低限の日数 - default
ニュースを保存するデフォルト日数 - purge
ニュースを保存する最大限の日数
moderators
モデレータつきのグループに投稿すると,直接は投稿されないで,一旦モデレータにメールで送られます.このファイルでは,モデレータつきのニュースグループに記事が投稿された場合に,その記事を誰にメールするかという設定をします.このファイルのフォーマットは,1行が以下のようになっています.なお,newsgroupにはワイルドカードが使用可能です.また,pathnameは特殊な例として,%sが使用可能です(以下で説明).
newsgroup:pathname
具体的なサンプルを示します。これは、innに付属のmoderatorsで定義されている内容です。通常はこれをそのまま使えば良いでしょう。ローカルでモデレータ付きのニュースグループを運用する場合は、そのアドレスを設定します。
*:%s@moderators.isc.org
fjを例にとると,fjの中でモデレータつきのグループに投稿された場合は,:(コロン)以降のメールアドレスにメールとして送るという設定を意味します.%sは,ニュースグループ名が入ります.たとえば,
fj.1st-readme
に投稿したニュースのメールの宛先は,
fj-1st-readme@moderators.isc.org
として処理されます.もちろん,%sを使わずに,静的に定義することも可能です.
control.ctl
ローカル以外のニュースグループの作成および削除に関しては,それぞれのニュースグループで決定され,そのニュースグループの管理者から,作成や削除などを行なうためのコントロールメッセージが送られてきます.このコントロールメッセージをどう処理するかをこのファイルで設定します.すべて自動で処理するように設定したり,一旦ローカルのニュースサーバ管理者がチェックしてから管理者が処理するという設定もあります. このファイルは,1行が以下のフォーマットになっています.
message:from:newsgroups:action
それぞれのフィールドは以下の通りです.
- message
ここは,コントロールメッセージの種類を記述します. - from
コントロールメッセージの発信元を記述します.これを設定することにより,特定の発信元からのメッセージのみ受け付けるということができます.ワイルドカードも使えます. - newsgroups
ニュースグループを指定します.ワイルドカードも使えます. - action
コントロールメッセージを受けとった時の動作を定義します.以下に設定可能なパラメータとその意味を示します.
パラメータ 意味 doit 命令実行し,news宛にメール送信 doifarg 引数があれば命令実行 doit=xxx 命令実行し,ログをxxxに書く drop 命令を無視する log error logに書く log=xxx ログをxxxに書く mail news宛にメール送信
たとえば,次のような設定であれば,gnu.*のニュースグループに関して,rmgroup(ニュースグループ削除)要求が,usenet@*ohio-state.eduから来たら,ローカルのnews当てにメールするということを意味します.
rmgroup:usenet@*ohio-state.edu:gnu.*:mail
このファイルは,本格運用する時に,上流サーバの管理者からもらうといいでしょう.
さて,設定が終ったら,設定ファイルのチェックをしてみましょう.以下のコマンドを実行することにより設定ファイルのチェックができます.なにかしらのエラーが出たらそれにしたがって修正してください.
% perl /usr/local/lib/news/bin/inncheck
もちろん,上記のコマンドの実行のためには,これに先だってinnのインストールは終ってないとだめですよ.
設定の反映
設定を変更したら反映させなくてはいけません。反映させるには、/usr/local/news/bin/ctlinnd コマンドを次のように利用します。
% /usr/local/news/bin/ctlinnd reload WHAT 'REASON'
ここで、WHAT にはどの設定を際読み込みさせるかを指定します。 'REASON'には、コメントなどを書きます。これは何でも構いません。 たとえば、すべての設定ファイルを読み込ませるには、
% /usr/local/news/bin/ctlinnd reload all
というように実行します。
innの起動
設定が終れば,いよいよinnを立ちあげてみましょう.まずは、起動用スクリプトを用意します。 /usr/local/etc/rc.d に innd.sh.sample として、起動スクリプトのサンプルがインストールされているので、それをそのまま innd.sh として利用します。
# cd /usr/local/etc/rc.d # cp innd.sh.sample innd.sh
その後rootで以下のように実行するか、マシンをrebootすれば起動します.
# /usr/local/etc/rc.d/innd.sh
簡単ですね。なお,ローカルで運用していたりで,配送先がない場合には,
ME bad_newsfeeds no feeding sites
と表示されますが,気にしなくて大丈夫です.
ローカルのニュースグループ
ニュースシステムの通常のメンテナンスは,すべて以下のコマンドで行なうことができます.
/usr/local/news/bin/ctlinnd
ここでは,まず,hogehogeというニュースグループを作ってみましょう.普通のニュースグループなら,
% /usr/local/news/bin/ctlinnd newgroup hogehoge y
で作成できます.モデレータつきであれば,
% /usr/local/news/bin/ctlinnd newgroup hogehoge m
で作成できます.最後のフラグが違うだけです.
削除するのなら,
% /usr/local/news/bin/ctlinnd rmgroup hogehoge
だけです.これで自由にニュースグループを作ったり消したりができます.
この状態で,実際にニュースリーダなどを使って,正常に動作しているかチェックしてみましょう.
本格運用のための設定
innを立ちあげたから,それでもうOKだってわけではありません.不用になったニュースのexpireが必要ですし、上流サーバとの配送プログラムの立ちあげをやってあげなくてはいけません。そのためには、cronの設定を行ないます。 rootで以下のコマンドを実行します。
# crontab -e -u news
ここではまず、以下の1行を設定します。これは、1日のアクセスログをまとめたり不用になったニュースをexpireするプログラムです。
40 23 * * * /usr/local/news/bin/news.daily delayrm
時間は好きなように設定して結構です。
次に、ニュースの配送の設定です。以下のようにすると10分おきに配送するようになります。もちろん、ローカルでの運用では配送先はないですから設定は不用です。
0,10,20,30,40,50 * * * * /usr/local/news/bin/nntpsend
なお,これはあくまでもこちらから他のサーバへの配送時間です。ニュースシステムでは他のサーバから自分に取り込む時間の設定はできません。送信側の設定にゆだねられます。
さて、始めて上流サーバと接続しニュースをもらうという場合には、上流サーバの管理者からactiveというファイルをもらうと思います。これは現在その上流サーバが扱っているニュースグループ一覧を示したファイルです。このファイルをローカルのサーバにも反映させておかないと、いくら上流からニュースが送り込まれてきても受けとることができません。不用なニュースグループがあったらそれを削除しておき、以下のように実行します.
% ctlinnd pause 'edit active' % cp active /usr/local/news/etc % ctlinnd reload active 'new active' % ctlinnd go 'edit active'
簡単に説明すると、現在動作中のニュースシステムを一旦止め、activeファイルを置き換え、activeをニュースシステムに読み込ませシステムの動作を再開するという手順です。
ここまで設定が終れば、あとは上流サーバの管理者に頼んでニュースの配送を開始してもらって下さい。あとは順調に動くことを期待しましょう。
なお、上流サーバと接続して本格運用を開始する時に上流サーバの管理者からもらっておくと良い(またはもらわないといけない)ファイルをまとめると以下のとおりです。
- active
- newsgroups
本格運用開始後の日常のメンテナンス
無事上流サーバからニュースの配送が受けられるようになっても、あとはほっとけばいいというものではありません。ニュースシステムは日常のメンテナンスが重要です。
普段必要なチェックとしては以下のようなことがあげられます。
- ディスクの空き容量のチェック
ニュースの流用は変化するものです。普通は、最初に十分余裕のあるディスクをニュースのスプールとして用意するでしょうが、毎日のニュースシステムからのレポートメールを参照してチェックしておきましょう。もし足りなかったり余りすぎているようなら、保存期間を調節するのもいいでしょう。 - 新しいニュースグループの作成
ローカルのニュースグループ以外の新たなニュースグループ作成に関してはコントロールメッセージにしたがって行ないます。 control.ctlにより自動的に作成するように設定している場合は問題ないのですが、手動で作成するという設定にしてある場合にはローカルニュースグループを作るのと同じ要領で作成します。
- 不用になったニュースグループの削除
新しいニュースグループの作成と同様に、ローカルのニュースグループ以外の新たなニュースグループ作成に関してはコントロールメッセージにしたがって行ないます。 control.ctlにより,自動的に削除するように設定している場合は問題ないのですが、手動で削除するという設定にしてある場合にはローカルニュースグループを削除するのと同じ要領で削除します.
- ニュースグループがそろっているかどうかのチェック
途中の配送過程においてサーバーが落ちていたりした場合には,ニュースグループの作成や削除の連絡が届かない場合があります。そこで、時々ニュースグループが正しく揃っているかチェックするためのコントロールメッセージが送られてきます。送られてくる間隔はそのニュースグループによって異なります。通常は、control.ctlにより自動的にチェックするように設定します。

