17.10 addgroup グループ名 Y 新一 m ー = 真のグループ名 管理用のツールと仕事・ 361 2 番目の引数は、 act ⅳ e ファイル中のフラグと同じ意味を持ちます。 y は誰もがそ のグループに投稿できること、 n は誰も投稿できないこと、 m は議長のいるグループ、 「 = 真のグループ名」は別のグループに対するェイリアスであることを意味します。 新しく作成されたグループの最初の記事が、そのグループを生成するためのコント ロールメッセージ newgroup よりも早く到着した場合にも、 addgroup が使用でき さらに delgroup groupname ローカルにグループを削除します。起動法は次のとおりです。 ・ delgroup ます。 ニュースグループのスプールディレクトリの中に残っている記事を削除し なければいけません。あるいは、それらが期限切れによって自然に除去されるまで放 ・ newsboot るときは、このスクリプトを実行してください。 失われた記事をⅲ story ファイルに追加します。いつまでも残っている記事があ ・ addmissing っておくこともできます。 に起動することによって、バッチ解凍処理をオフにすることができます。 禁止する ( たとえば、一般業務時間の間 ) ために使用することができます。次のよう これは /usr/lib/news/bin/input の中にあり、着信ニュースのバッチ解凍処理を ・ newsrunning しまったバッチを一旦閉じてから実行します。 削除し、システムがシャットダウンされて NNTP 接続が打ち切られたときに残って ースプロセスがシャットダウンでキルされたときに残ってしまったロックファイルを このスクリプトは、システムプート時に実行しなければいけません。これは、ニュ off のところを on にすれば、バッチ解凍処理をオンにすることができます。 /usr/lib/news/bin/input/newsrunning off
346 ・ C News トにはフォワードされます。 INN のいずれも同一の形式を使います。 このグループの着信記事はローカルには格納されませんが、それらを要求するサイ これは議長のいるグループを示します。ューザがこのグループに投稿しようとする 御メッセージによって作成されたかローカルに作成されたかの区別、および作成した れると、 C News は、作成されたグループの名前、作成された日付、 newgroup 制 active と密接に関連するファイルは、 active. times です。あるグループが作成さ 月投稿される記事を読んでください。 ださい。ニュースグループの作成方法については、 news. announce. newusers に毎 は 1 つのグループを削除します。そのようなメッセージを決して勝手に送らないでく は、 Usenet 全体に対して 1 つのグループを追加します。一方、 rmgroup メッセージ ( 「 17.10 管理用のツールと仕事」を参照してください ) 。 newgroup 制御メッセージ ープは、 addgroup と delgroup を使用して、ローカルに追加または削除できます C News では、一般にこのファイルを直接アクセスする必要はありません。グル リダイレクトされるでしよう。 カルエイリアスと見なされます。 newsgroup に投稿されたすべての記事は、それに これによって、 newsgroup は別のグループ、すなわち real-group に対するロー ・ =real-group す。 議長のアドレスは、 /usr/lib/news の中にある moderators ファイルからとられま とき、賢いニュースリーダなら、それをユーザに知らせ、記事を議長に送るでしよう。 GROUPS コマンドによっても使用されます。 ーダが新設グループをユーザに知らせるのに使用されます。また、 NNTP の NEW- 人を記述した、 1 つのメッセージをこのファイルに記録します。 これは、ニュースリ 各記事は次のような行のあとに置かれます。 ニュースパッチは、 B News 、 C News 、 17.5 記事のバッチ処理
336 ・ C News 17.1 ニュースを配信する 記事を C News に供給するには、いくつかのやり方があります。ローカルューザ が記事を投稿したとき、通常ニュースリーダはそれを inews コマンドに渡し、ヘッ ダ情報を完全なものにします。リモートサイトからのニュースは、単一の記事でも、 ひとまとまりのバッチでも、 rnews コマンドに渡されます。 rnews は、それを /var /spool/news/in. coming ディレクトリの中に格納します。そして、あとで newsrun がそこからニュースを取り出します。しかし、これら 2 つの手法のどちらにおいても、 記事は最終的に relaynews コマンドに渡されます。 各記事に対して、 relaynews コマンドは、まず history ファイルの中のメッセー ジ ID を調べて、その記事がこのローカルサイトにすでにあるかどうかをチェックし こで、重複した記事は捨てられます。次に、 relaynews は Newsgroups : ます。 ヘッダ行を見て、このローカルサイトがそれらのグループから記事をリクエストして いるかどうかを検査します。リクエストしていて、そのニュースグループが active ファイルの中にリストされている場合、 relaynews はニューススプール領域の対応 するディレクトリの中にその記事を格納しようとします。もしそのディレクトリが存 在しなければ、作成されます。そして、その記事のメッセージ ID は、 history ファ イルに記録されます。そうでない場合、 relaynews はその記事を捨てます。 投稿されたグループが act ⅳ e ファイルにリストされていないため、 relaynews が 着信記事を格納しなかった場合、その記事は junk グループに移されます注 1 。また re- laynews は、古いか日付の間違った記事もチェックして、拒絶します。そのほかの 理由で失敗した着信バッチは、 /var/spool/news/in. coming/bad に移され、エラー メッセージが記録されます。 このあと記事は、これらのグループからニュースをリクエストしているすべてのサ 注 1 あなたのサイトに存在するグループとあなたのサイトが受け取りたいグループとが異なってい るかもしれません。たとえば、予約購読リストには、 comp 以下のすべてのニュースグループ を意味する comp. all が指定されているが、あなたのサイトで、多くの comp グループが active ファイルにリストされていないような場合があります。それらのグループに投稿された記事は、 junk グループに移されるでしよう。
active ファイルは /usr/lib/news の中にあり、それには、あなたのサイトで知ら れているすべてのグループと現在オンラインになっている記事がリストアップされて います。これをいじる必要はめったにありませんが、完全を期するために説明してお きます。ェントリーは次の形です。 newsgroup high 10W perm newsgroup は、グループの名前です。 10W と high は、現在利用できる記事のも っとも低い ( 古い ) 番号ともっとも高い ( 新しい ) 番号です。その時点で利用できる 記事がないとき、 10W は high + 1 と等しくなります。 少なくとも、それが 10W フィールドの本来の目的です。しかし、効率をよくする ために、 C News はこのフィールドを更新しません。これは大した問題ではないの ですが、ただ困ったことにこのフィールドを使うニュースリーダも一部に存在します。 たとえば、 trn はスレッドデータベースから記事を削除してよいかどうかを見るため このフィールドをチェックします。そのため、 10W フィールドを更新するために 定期的に updatemin コマンド ( あるいは、 C News の旧バージョンでは、 upact ス クリプト ) を実行しなければいけません。 perm は、そのグループに対して許されるユーザアクセスを詳述するパラメータで す。それは以下の値の 1 つをとります。 17.4 17.4 active ファイル ューザはこのグループに投稿できます。 active ファイル・ 345 ューザはこのグループに投稿できません。その場合でも、 す。 は可能です。 このグループを読むこと このグループはローカルに使用禁止になります。これは、ニュース管理者 ( または 彼らの上司 ) が、あるグループに投稿された記事を不愉快に思ったときに使用されま
376 ・ 19 章 ニュースリーダの設定 こうしておくと、 active ファイルの中にあるすべてのニュースグループに対して、 スレッド化が行われます。 あるいは、スレッド化の対象となるグループのリストを与えて、 cron から定期的 に nnmaster を起動しても同じ結果が得られます。このリストは、 sys ファイルの 中に書く購読リストと非常に似ています。ただし、 nn の場合には、コンマの代わり にスペースで区切ってならべます。また、すべてのグループを表すには、グループ名 として a11 ではなく、空の引数 " を指定しなければいけません。次に示したのは、呼 び出しの例です。 # /usr/local/lib/nn/nnmaster !rec. games. go rec comp 順序が重要であるという点に注意してください。一致したもっとも左側のグループ 指定が、常に使用されます。したがって、 rec の後に !rec. games. go を置いたときは、 rec グループのすべての記事が (rec. games. go も含めて ) スレッド化されてしまい ます。 nn には、期限切れになった記事をデータベースから削除するための方法がいくつ かあります。方法 1 では、ニュースグループのディレクトリを走査して、もう利用し ない記事に対応するエントリーを削除することによってデータベースを更新します。 これは、 -E オプションを付けて nnmaster を起動した場合に行われるデフォルトの 操作です。 NNTP を介して行わないかぎり、かなり高速です。 方法 2 は、 mthreads がデフォルトで行う強制削除と非常によく似た方法です。 の場合には、 act ⅳ e ファイルに書かれた最低ラインよりも下の番号を持った記事を 参照するエントリーだけが削除されます。これを行うには、 -e オプションを使用し ます。 最後の方法 3 は、データベース全体を破棄して、すべての記事を再構築することで す。これは、 nnmaster に -E3 オプションを与えることによって行うことができます。 期限切れを調べるグループのリストは、一 F オプションを付けて指定します。しか し、デーモンとして nnmaster を走らせている場合には、 ( ー k オプションを使用して ) それをキルしてから、期限切れ処理を行いそのあとに元のオプションを付けてリスタ ートしなければいけません。以上をまとめると、方法 1 を使用してすべてのグループ に対して期限切れ処理を行うコマンドは、次のようになります。
17.6 grouplist perm times archive ニュースを期限切れにする・ 351 grouplist は、そのエントリーが適用されるニュースグループをコンマで区切った リストです。ある階層全体を指定するには、グループ名を指定します。オプションと して、 a11 を追加することもできます。たとえば、 comp. os の下のすべてのグループ に適用するエントリーには、 comp. os または comp. os. a11 と表します。 あるグループからニュースが期限切れになったとき、その名前は与えられた順序で explist 中のすべてのエントリーに対してチェックされます。最初に一致したエント リーが適用されます。たとえば、 1 週間は保存しておきたい comp. os. linux. announce を除いて、 comp の大多数を 4 日後に捨てるには、 7 日の有効期限を指定した前者に 対するエントリーのあとに、 4 日の有効期限を指定した comp に対するエントリーを 作成しておきます。 perm フィールドには、そのエントリーが議長のいる ( モデレーテッド ) グループ、 議長なしのグループ、もしくは任意のグループに適用されるかどうかを指定します。 これは値 m 、 u 、 x をとり、それぞれ、議長あり、議長なし、任意のタイプを意味し ます。 3 番目のフィールド times は、通常 1 つの数値だけを含みます。これは、記事へッ ダの Expires: フィールドの中に有効期限が指定されていなかった場合に、記事が 期限切れになる日数です。これは投稿の日からではなく、あなたのサイトに到着した 日から数えた日数であるという点に注意してください。 しかし、 times フィールドはもっと複雑な場合があります。それは、ダッシュ ( ー ) によって区切られた最高 3 個の数値の組合せでもかまいません。最初のフィールドは、 その記事が期限切れの候補とみなされる前に経過しなければならない日数を意味しま す。 0 以外の値を使用する意味はほとんどありません。 2 番目のフィールドは、上述 の期限切れになるデフォルトの日数です。 3 番目のフィールドは、 E xpires : フィー ルドの有無に関わらず、記事が無条件で期限切れになる日数です。真ん中の数値だけ が与えられたとき、ほかの 2 つはデフォルト値をとります。これらは、下で述べる特 別なエントリー / bounds / を使用して指定することもできます。 4 番目のフィールド archive には、そのニュースグループをアーカイプするかど うか、またどこにアーカイプするかを指定します。アーカイプ処理を行わないときは、
16.3 U senet がニュースを処理する方法・ 333 なく、ヘッダ情報を完全に書かなくても記事を投稿することができます。 各サイトでは、ニュースはディレクトリ階層 / var / SP001 / news の中に保存されま す。各ニュースグループごとに別々のディレクトリが作られ、各記事は別々のファイ ルに格納されます。そのディレクトリ名は、ニュースグループ名から作られます。パ スの構成要素がそのままディレクトリの構成要素になります。たとえば、 comp. os. linux. misc という記事は /var/spool/news/comp/os/linux/misc に格納されます。 ニュースグループ中の記事には、それらが到着した順に番号が割り当てられます。 この番号がファイル名の代わりをします。現在オンラインになっている記事の番号 は、 active という名前のファイルの中に格納されます。これは同時に、現在あなた のサイトで知られているニュースグループのリストの役目を果たします。 ディスク容量は有限なので注 3 、しばらくしたら記事を捨て始めなければいけません。 これは、ェクスパイア (expireing) と呼ばれています。通常あるグループや階層か らの記事は、それらが到着してから一定の日数がたっと捨てられます。これは、投稿 者が記事へッダの Expires : フィールドに期限切れ日付を指定した場合は変更され Usenet はモデムとハードディスクメーカによる陰謀だと主張する人もいます。 注 3 ます。
330 ・ 16 章ネットニュース Usenet サイトの間で交換されます。 2 つのサイトがニュースを交換することで合意 したら、どれでも好きなニュースグループを交換できますし、自分のローカルなニュ ース階層を追加することもできます。たとえば、 groucho.edu は、主要なニュース フィード ( 供給源 ) である barnyard.edu へのニュースリンクを持っています。ま た groucho.edu は、自分がニュースを供給しているマイナーサイトへのいくつかの こで、 Barnyard 大学はすべての Usenet グループを受け リンクを持っています。 取っていますが、 GMU (Groucho Marx 大学 ) は sci 、 comp 、 rec など、主要な 階層だけを持ちたいとします。下流のサイトのいくつか、たとえば brewhq という 名前の UUCP サイトは、ネットワークやハードウェアリソースが乏しいため、もっ と少ないグループしか持てません。他方、 brewhq は GMU が持っていない fj 階層 からニュースグループを受け取りたいとしましよう。そのため、 brewhq はすべての fj グループを受け取っている gargleblaster.com とも別の配送経路も維持していま す。この場合のニュースの流れを示したのが、図 16 ー 1 です。 brewhq から出ている矢印の上のラベルについては、少し説明が要るかもしれませ れ 流 の ス ュ る を 大 0 0 図 garglebaster.com barnyard.edu 。 comp, SCI, rec graucho.edu zcomp. OS, comp. periphs
17.2 インストール・ 339 すべてのニュースグループのリスト。それぞれのグループの目的について、一行の ・ newsgroups 説明がついています。ニュースリーダはあなたが購読しているニュ これらの記述をしばしば使用します。 ・ mailname ストを表示するとき、 ースグループのリ あなたのサイトのメール名、たとえば、 vbrew. como ・ whoami ニュース用のあなたのサイト名。 UUCP サイト名が使用されることが多いです。 たとえば、 vbrew など。 ・ explist ィレクトリとサプディレクトリを作成します。 最後に、着信ニュースおよび発信ニュースのために使用されるニューススプールデ OOOOOI で置換されます。 です。この呼び出しによって、数字の 2 つの文字列が文字列 000800000 と文字列 2 番目のコマンドは、私の大好きな UNIX コマンドの 1 つである sed の呼び出し # rm active. 01d # sed 's/ [ 0 ー 9 ] * [ 0 ー 9 ] * / 0000000000 00001 / ・ active. 01d > active # cp active active. 01d にあるすべての記事番号を書き換えます。 次に、以下のコマンドを使用して、 active ファイルの 2 番目と 3 番目のフィールド に使用されますが、 ihave/sendme を使わない場合にも作成しなければいけません。 trol を追加します。 to. * グループは通常 ihave/sendme メッセージを交換するため すべての to. * グループを削除し、 tO. my-site と t0. feed-site および junk と con- ールし、所有者を news 、ファイルモードを 644 に設定します。 active ファイルから イルと newsgroups ファイルを入手して、それらを /usr/lib/news の中にインスト ニュースグループの階層を新しく作成するには、フィードサイトから active ファ うがいいでしよう。その際には、ディスク容量が重要な決め手となります。 このファイルを編集して、特別なニュースグループに対する購読期限を指定したほ
そもそも Usenet とは何カ・ 329 16.2 16.2 そもそも lJsenet とは何か Usenet のもっとも驚くべき事実の 1 つは、それがいかなる組織にも属 さず、いかなる中心的な管理機構も持っていないことです。実際、技術的 文献目録い 7 〕 な記述を除けば、それが何であるかを定義できないというのが Usenet の 実態です。ただ、それが何でないのかを言うことだけができるのです。 馬鹿かと言われてしまいそうですが、 Usenet は、 Usenet ニュースを交換する個々 のサイトの共同作業であると定義できるかもしれません。 Usenet サイトになるには、 別の Usenet サイトをみつけて、その所有者と保守担当者にニュースをやりとりして くれるよう頼むだけです。別のサイトにニュースを供給するのは「フィードする」と こから Usenet 哲学のもう 1 つの共通原理「フィードを受ければ、 Usenet いわれ、 仲間」が生まれます。 Usenet ニュースの基本単位は記事です。 これは、ユーザが書いて、そ のネットに投稿したメッセージです。ニュースシステムで扱えるようにす るため、先頭には管理情報 ( いわゆる、記事へッダ ) が付けられます。 れは、インターネットメール規格 RFC 822 に規定されたメールヘッダ形式と非常に よく似ています。記事へッダはいくつかのテキスト行からなっており、各行はコロン で終わるフィールド名で始まり、その後にフィールドの値が続きます注 1 。 己事は、 1 つ以上のニュースグループに発送されます。ニュースグループというの ニュースグル は、共通の話題に関連した記事を集めた集会所と考えてよいでしよう。 ープは階層構造をなしており、各グループの名前がその階層構造における位置を表し ています。それを見るだけで、あるグループの性格が簡単にわかることがあります。 たとえば、 comp. os. linux. announce というニュースグループ名を見れば、それが Linux という名前のコンピュータオペレーティングシステムに関する広報であること は誰にでもわかるでしよう。 これらの記事は、そのグループのニュースを配信したいと思っているすべての RFC 822 一三ロ 注 1 Usenet ニュースメッセージの形式は、 RFC 1036 「 USENET メッセージの交換に関する規格」 の中に規定されています。