※ コメントは、適当なニュースグループか、乾燥板かメールで。(2007年4月07日)
このページで解説してる改造やスクリプトは、自由に使っていただいてかまいま せんし、自由に改変していただいてかまいません。その際、特に私に断わる必要 はありません。でも、ナイスな改良を思いついたら、教えてくれるとうれしいか も。
ニュースサーバを本格的に運用するのは、結構大変です。が、欲張らなければ、 結構なんとかなりそうです。
というわけで、このページでは、固定IPじゃなくても、Windowsでも、簡易ニュー スサーバを立ち上げられる方法を簡単に説明します。もちろん、固定IPでも大丈 夫だし、大抵のOSで可能な方法です。ただし、以下の内容の全てを試したわけで はありませんので、自己責任で試してください。
ちなみに、自分でニュースサーバを立ち上げると何がうれしいかというと、
といったところかな?
parでexe化しといたんで、かなり簡単になってます。
だけで基本的にはいけるはず。
perlソースもつけてますが、そっちの詳細はperl版の ページに任せて、ここではexe版の説明のみします。exeなんでWindowsに特 化してます。他のOSの人はperl版を使ってください。スクリプト改造したい人も そちらへ。
何かの事情で古いバージョンがいい人は、更新履歴か らリンク張ってます。
nnml+0.05をダウンロードして、 適当なディレクトリに展開するだけです。複数の人が使うコンピュータだったり、 公開サーバや相互配送を考えていたりするのなら、セキュリティ的に安全な場所 に置いてください。(nntpサーバ用のパスワードを生書きしたりするから。)
ちなみに上のzipファイルは2MB強、展開すると4MBぐらい。実行時に4MB強の一時 ファイルを作る。この一時ファイルはキャッシュになってるので、取っておくと 次から立ち上がりが若干早くなるはずです。不要になったら消してください。ユー ザ環境変数のTMPかTEMPで指定したところのようです。コントロールパネルのシ ステムの詳細設定の環境変数で場所のチェックや変更ができるはず。
スプールに必要な容量は、fj.*3ヶ月分で数十MB程度、nihon.*3ヶ月分で数百KB 程度かな。最近では。
etc/config.plを編集してください。テキストファイルです。
# config.pl $Config->{pathhost} = q[myhome-news]; $site{film} = { host => "film.rlss.okayama-u.ac.jp", mode => rw, group => 'kgk.*,asataku.*,jape-n.*,feedmania.*,woyadi.*,japon.*,tsukuba.*,null.*,kansai.*,kanto.*,japan.*,fj.*,nihon.*', }; 1; # end of file
みたいな内容です。「#」で始まる行はコメントです。 「$Config->{pathhost}」の行の「myhome-news」の部分は、自分のサイトを表わ す文字列です。他のサイトとかぶるとまずいので、かぶりにくいように設定しま しょう。いくつかのニュース記事のPath:を見て、どんなのがよいか考えるのが よいでしょう。自分のサイトのドメイン名なんかが無難かも。例文通りなのは論 外。
以下の変更は、必要に応じて行なってください。
$site{}の括弧の中は、そのサーバを表わす適当な文字列です。複数のサーバを 登録するときは、それぞれに、「$site{hoge}=」で始まる定義を書いてください。 (中の文字列は適当に変えて。) hostには、相手のサーバのドメイン名(またはIP アドレス)を書きます。modeはr, w, rw, のいずれかで、それぞれ、読み込み用、 書き込み用、読み書き用です。groupは、やりとりするニュースグループを表現 する文字列です。それぞれのグループに対する表現を「,」でつないでください。 余分な空白が入るとだめです。「*」はワイルドカードです。欲しくないグルー プを表現するときには「!」を使ってください。(「fj.*,!fj.soc.*」みたいな感 じ。)
ユーザ名foo、パスワードbarでアカウントを持ってる場合は、userとpassを次の ような感じで設定します。
# config.pl $Config->{pathhost} = q[myhome-news]; $site{film} = { host => "film.rlss.okayama-u.ac.jp", mode => rw, user => foo, pass => bar, group => 'kgk.*,asataku.*,jape-n.*,feedmania.*,woyadi.*,japon.*,tsukuba.*,null.*,kansai.*,kanto.*,japan.*,fj.*,nihon.*', }; 1; # end of file
portというキーワードでポートを指定することもできます。デフォルトは119。
ニュースの記事を収める場所(base)をetc/base.txtに書いてください。デフォル トはC:/netnewsになってます。0.02以前のバージョンを使ってた人は、該当する ディレクトリを指定するか、適当に改名すれば、続けて使えるはず。
次に、etc/users_templ.txtを編集します。#で始まる行はコメントです。ユーザ 名、パスワード、パーミッションを空白で区切って書きます。パスワードを「*」 にすると、適当なパスワードを自動生成します。パーミッションはread, write, adminの中から複数選べます。adminのパーミッションを与えたユーザを少なくと も一つは作ってください。また、feedという名前のユーザも作ってください。 他に人に読み書き(または読むだけ)をさせたい場合は、ゲストユーザみたいなの を作っとくとよいでしょう。
# user pass permitions (read, write, admin) admin * read write admin feed * read write guest guest read write # end
etc/expire.txtを編集します。
*:90 kgk.*:never
みたいな内容です。グループにマッチするパターンと記事の保存日数をコロンで 区切ってます。保存日数が「never」の場合はexpireしません。パターンは後の 行の方が優先されます。上の例では、「kgk.*」にマッチするグループはexpire せず、その他のグループは90日でexpireします。「#」で始まる行はコメントで す。
sample/date.txtを参考に、var/date.txtを設定することができます。0.02を使っ てる人は、書式が変わってるので要注意。いつの記事からやりとりするかを表わ すファイルで、送出サイト:受取サイト 年月日を4桁2桁2桁で表したもの 時分秒 を2桁ずつで表わしたものという構造です。このファイルが無ければ、最初の実 行時に、相手サーバの一番古い記事から持って来ます。
film.rlss.okayama-u.ac.jp:localhost 20070101 000000 localhost:film.rlss.okayama-u.ac.jp 20070101 000000
sample/expiretime.txtを参考に、var/expiretime.txtを設定することができま す。実行時に、この日時から24時間以上経っていれば、expireを実行します。こ のファイルが無ければ、最初の実行時にexpireを実行します。(意味無いけど)
ここまでできれば、NNmirror.pmを使って、自分の読めるサーバから記事を持っ てきたり、自分とこの記事を送ったりできます。この方法は、24時間体制じゃな くてもへっちゃらなので、なんちゃって度が高い。
まず、nn_users.exeを実行してください。
といったあたりのことが出きます。
次に、nn_server.exeをオプションなしで立ち上げてください。(結構時間かかる かも。) 何か訳分からんうちに終ってしまう場合はコマンドプロンプトで立ち上 げるとよいかも。うまくいけば、サーバ立ち上げてvar/date.txtで指定した日時 以降の記事を取ってきて、配る必要のある記事は配って、var/date.txtを1時間 前の日時に変えて終わるはずです。(1時間前にしたのは、安全性を考えて。) そ の際、var/expiretime.txtの時間から24時間以上経っていれば、expireを実行し ます。
このとき、base/newsgroupsというファイルが無ければ、グループ名とグループ の説明をtabで区切った行からなるファイルを作ります。
nn_server.exeに数字の引数を与えて立ち上げると、その秒数の間隔で上の動作 を繰り返すはずです。expireは24時間ごとに行ないます。例えば、10分ごとにや りとりしたい場合は、コマンドプロンプトで、
nn_server.exe 600
エンタキー押すと、きりのいいところで止まります。
いちいちコマンドプロンプトを使うのが面倒であれば、ショートカットリンクを 利用するのがよいかも。プロパティでリンク先のところが 「c:\hoge\nn_server.exe」みたいになってるのを 「c:\hoge\nn_server.exe 600」みたいに変えればOK。
自分のニュースリーダの見るサーバをlocalhostに設定すれば、自分で読み書き できるはず。
スプールを直接読む機能がニュースリーダにあれば、それを使うもよし。
今のところ、サーバのつけるMessage-IDは、あんまりよろしくないので、ニュー スリーダ側でつけた方が、まだましかも。
これをやろうとすると、24時間体制に準ずる程度にはサーバを立ち上げっぱなし にする必要があります。
他人に読み書きさせるには、ドメイン名か固定IPが必要です。後者が手に入って ない場合は、ダイナミックDNSで大丈夫でしょう。日本にも無料のダイナミッ クDNSのサービスがいくつかあるみたいですから、調べて使ってください。 DiCEとか使えると ころが便利かも。
取り敢えず、自分のサイトのドメイン名(ポートが標準の119でないときはポート も)とゲストユーザのユーザ名・パスワードを公表(なり使って欲しい人に伝える なり)すればOK。
上の方法でも実用上問題ないでしょうが、ちゃんと相互配送した方が配送網が広 がりやすいでしょう。それに、相手が普通のサーバなら、記事を即時送ってくれ るかもしれません。
相互配送しようとすると、24時間体制に準ずる程度にはサーバを立ち上げっぱな しにする必要があります。まあ、相手が普通のサーバなら、数日程度は平気で待っ てくれますが。
相互配送するには、ドメイン名か固定IPが必要です。後者が手に入ってない場合 は、ダイナミックDNSで大丈夫でしょう。日本にも無料のダイナミックDNSのサー ビスがいくつかあるみたいですから、調べて使ってください。
あと、特に、上の「Pathの設定」が重要になります。
配送先を見つけるのは、知合いに頼むなり、どっかのグループで募集するなり、 NewsFeed ML - NetNews の相互配送などのための Mailing listで募集する なり、いろいろ方法があります。
配送してくれるところが決まったら、前項に準じてconfig.plを編集します。た だし、modeはwにしてください。向こうが記事を送ってくれるので、こちらから 読みにいく必要はありません。
先方には、自分のドメイン名とpathhostと欲しいグループと配送用のユーザ名と パスワード(ゲストのでもよい)を伝えれば、設定してくれます。相手がinnだっ たら、ユーザ名とパスワードはpasswd.nntpに設定してくれってことになるのか な? 試してないけど。このページで解説してるなんちゃってサーバだってことも 伝えた方がいいかも。なんちゃってサーバ同士の相互配送もできるはず。多分。
所詮、なんちゃってサーバなので、いろいろ問題点はあります。取り敢えず分かっ てることは、
ぐらい。1番目については、日本語の解説は皆無と言っていいほどありません。 英語にしても附属のドキュメント以外は見かけない。まあ、小さいプログラムな んでソースを読めってか? それとも、自分で解説書け? 誰かお願い(ぉぃ)。
2番目は、見つけ次第修正するしかないか。ニュースサーバとしての運用は、ちゃ んとやってないんじゃないかな?
3番目は、記事を受けとった時点で何かアクションを起すようにハックしないと 無理そう。
4番目は、3番目と同様。記事を受け取ったらスパムフィルターを通してから、配 送に渡すのがいいんでしょうね。
最後の二つは、今後の課題かな。
ちなみに、0.03まで、「記事が多くなると遅い」ってのを挙げてたんですが、 NNMLのバグで送出がうまくいってなくて、タイムアウトになってただけのような 気がします。0.03までだと、記事が送出できないかも。0.05で記事が送出できる ことは、確認しています。
というわけで、いろいろ問題はありますが、それでもよければ、使ってみてくだ さい。
おわり