Linux
 Computer >> コンピューター >  >> システム >> Linux

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

USENETを頻繁に利用する方にとって、リモートのニュースサーバーとのやり取りは悩みの種になりがちです。多くの場合、これらのサーバーは動作が遅く、安定性にも欠けます。さらに、AIOEのような無料プロバイダに頻繁にアクセスすると、接続を制限されたり、IPアドレスを禁止されたりすることもあります。こうした要因が、USENET体験を快適とは言えないものにしているのです。

Leafnodeとは?

Leafnodeは、USENETサーバー向けのオフラインプロキシです。リモートのニュースサーバーから投稿記事をダウンロードし、自分のシステム上でローカルサービスとして提供します。複数のUSENETサーバーをアップストリーム(上位ソース)として登録し、それらを統合して単一のソースとして配信することも可能です。異なるプロバイダが提供する複数のニュースグループを購読したい場合に非常に便利な機能です。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

さらにLeafnodeを使えば、購読しているニュースグループのオフラインコピーを持つことができます。インターネット接続が常時確保できない環境や、購読中のニュースグループをアーカイブしたい場合に重要なポイントです。そして何より、Leafnodeはシンプルで導入が簡単、しかも最新のUSENETリーダーすべてと互換性があります。

USENETプロキシの仕組み

前述のとおり、Leafnodeはプロキシ型のUSENETサーバーであり、ニュースリーダーに対してはニュースサーバーとして振る舞います。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

ただし、従来のUSENETサーバーとは異なり、Leafnodeは他のサーバーから全階層の完全なコピーを取得するわけではありません。ユーザーが指定した条件に基づいて、指示された投稿だけを取得します。

Leafnodeはfetchnewsとtexpireという2つのプログラムと連携して動作します。

  • fetchnews:どのニュースグループを購読し、何件取得するかをLeafnodeに指示するプログラムです。自分の投稿や返信のアップロードも担当します。
  • texpire:古い投稿をニュースグループから削除するメンテナンス用プログラムです。重複メッセージや破損したメッセージの修復、ニュースサーバーのデータ全体の更新も行います。

この2つのプログラムにより、Leafnodeはほぼ無人で運用できます。初期設定さえ完了すれば、あたかもリモートUSENETサーバーのように動作するのです。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

また、小規模なネットワーク内にLeafnodeを設置すれば、複数のユーザーがそこに接続してニュースを読むことも可能になります。その結果、USENETアクセスに使われるネットワーク帯域を大幅に削減できるでしょう。

Leafnodeのインストール

Leafnodeはできる限りシンプルであるよう設計されており、インストールもメンテナンスも手間いらずです。インストールは、お使いのディストリビューションのリポジトリから取得するだけで完了します。

例えばDebianやUbuntu 21.10では、aptコマンドで次のようにインストールできます。

sudo apt install leafnode
LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

Leafnodeの初期設定

インストール中、Leafnodeは接続先となるリモートサーバーについていくつかの情報を尋ねてきます。最初の画面ではリモートサーバーのアドレスを入力します。例えばAIOEに接続したい場合は「nntp.aioe.org」を指定します。

筆者の場合はEternal September経由で接続するため、そのアドレスを入力しました。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

自動ダウンロードの設定

続いて、インストーラーはニュース記事の取得方法を選択するよう求めてきます。選択肢は「PPP」「Permanent」「None」の3つです。

  • PPP:インターネットに接続するたびに自動的に新着記事をダウンロードします。
  • Permanent:1時間ごとに自動的にニュース記事をダウンロードします。
  • None:自動取得を無効にします。リモートサーバーと同期するには、fetchnewsコマンドを手動で実行する必要があります。

筆者は、Leafnodeが自分の知らないうちにニュースサーバーへ勝手に接続するのを避けたいので、「None」を選択しました。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

アクセス制御の有効化

次に、サーバーへのアクセス制御(Access Controls)を有効にするかどうかを尋ねられます。

この設定は、Leafnodeを複数ユーザー向けのローカルニュースサーバーとして運用する場合に関係してきます。「/etc/hosts」ファイルを使って、どのクライアントにアクセスを許可し、どのクライアントを拒否するかを制御できます。

例えば、社内LANなど各クライアントからのアクセスが前提の環境でLeafnodeを使用するなら、アクセス制御を有効にする必要はありません。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

とはいえ、すべての外部からの接続をブロックし、許可したいものだけを通すのは一般的に良い習慣です。また、自分のマシン専用のローカルプロキシとしてLeafnodeを使う場合は、必ずこのオプションを有効にしてください。

筆者の場合、このLeafnodeインスタンスはこのマシンだけで使用する予定なので、アクセス制御を有効にしました。

ニュースグループの初回同期

その後、インストーラーは今すぐリモートUSENETサーバーに接続するかどうかを確認してきます。ここで「はい」と答えると、Leafnodeがサーバー上の利用可能なニュースグループ一覧を取得します。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

ただし、Eternal Septemberのように認証が必要なサービスを利用している場合は、このオプションでニュースグループを取得しないでください。まだLeafnodeにアカウント情報を登録していないため、このタイミングで更新しても完全なニュースグループ一覧が取得できないからです。

筆者はEternal September経由で接続しているため、「いいえ」を選択しました。

Leafnodeの詳細設定

ここからは、設定ファイルを編集してLeafnodeの動作を細かく調整できます。

例えば、ニュース取得にUSENETアカウントを使用するための設定項目があります。また、どの投稿をダウンロードし、どれくらいの期間保存するかを指定するパラメータも設定可能です。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

設定ファイルの場所はLinuxディストリビューションによって異なります。DebianおよびUbuntuでは「/etc/news/leafnode/config」にあります。

sudo vim /etc/news/leafnode/config

デフォルトのユーザー名とパスワードの設定

Leafnodeの設定ファイルは充実しており、ドキュメントも整備されています。各オプションには簡単な説明が付いており、正しい設定方法を示す例が記載されているものもあります。

LeafnodeでUSENETアカウントを使うには、usernameとpassword変数のコメントを解除し、自分のアカウント情報を入力します。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

筆者の場合は、Eternal Septemberアカウントの情報を追加しました。

投稿フィルターの作成方法

Leafnodeの重要な機能の一つが、ダウンロード時の投稿の扱いを操作できる点です。投稿をフィルタリングしたり、特定のニュースグループを一定日数経過後も削除されないように設定したりできます。

投稿のフィルタリングには2つの方法があります。

  • 投稿の一般的な属性による絞り込み。例えば、行数や投稿サイズでフィルタリングできます。
  • 投稿ヘッダー内の特定の語句による絞り込み。フィルターファイルに正規表現のリストを作成して実現します。

一般的な属性でフィルタリングするには、設定ファイルから直接該当オプションを有効にします。例えばminlines変数を3に設定すると、3行未満の短い投稿をLeafnodeが取得しなくなります。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

一方、特定の語句でフィルタリングするには、filterfileオプションを有効にします。filterfile変数のコメントを解除し、フィルターファイルへのパスを指定してください。

筆者はフィルターファイルのデフォルトパスを使用しています。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

フィルターファイルの基本構文は以下のとおりです。

Header-Property:^/regex/$

フィルターファイルの各行は、投稿の特定のヘッダー属性を指すように記述します。例えば、Gmail(Google Mail)発の投稿をすべて除外したい場合は、次のように記述します。

^From:.*[A-Za-z0-9]*\.*[A-Za-z0-9]*\@gmail\.com$
LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

ニュースグループのアーカイブ方法

デフォルトでは、Leafnodeは20日より古い投稿をすべてのグループから削除(prune)します。これによりファイルサイズの肥大化を抑えられるため、1日に100〜200件の投稿があるグループを購読している場合に便利です。

しかし、特定のニュースグループの投稿をすべてアーカイブ保存したいケースもあるでしょう。その場合はgroupexpire変数を有効にします。

例えばcomp.unix.miscニュースグループをアーカイブしたい場合は、設定ファイルに次の行を追加します。

groupexpire comp.unix.misc = -1
LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

さらに、この変数を使えば特定のニュースグループの削除期限を変更することもできます。例えばmisc.internet.news.discussのような大量投稿グループを5日ごとに削除したい場合は、次の行を追加します。

groupexpire misc.news.internet.discuss = 5
LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

複数のUSENETサーバーの設定方法

前述のとおり、Leafnodeでは複数のリモートサーバーから投稿を取得できます。一度に1台のサーバーにしか接続できないUSENETリーダーを使っている場合に特に便利な機能です。

さらに、追加のリモートサーバーの動作を変更するオプションも複数用意されています。nopost変数を1に設定すると、そのリモートサーバーは投稿の取得のみを行い、投稿の送信はしなくなります。

逆に、noread変数を設定すると、その逆の動作になります。

LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

例えば、AIOEを読み取り専用のサブサーバーとしてLeafnodeに追加したい場合は、設定ファイルに次のように記述します。

server = news.aioe.org
nopost = 1

cronジョブでLeafnodeを自動更新する

自動ダウンロードスクリプト以外にも、Leafnodeはcronジョブ経由で更新できます。こちらの方が、ニュースグループの更新タイミングを柔軟に制御できるのが利点です。例えば、12時間ごとに更新し、さらにコンピュータ起動時にも更新させるといった設定が可能です。

そのためには、newsユーザーのcrontabを編集します。newsユーザーは「/var/spool/news」フォルダとLeafnodeサーバーの実行を直接管理するシステムアカウントです。

newsユーザーのcrontabを編集するには、次のコマンドを実行します。

sudo crontab -e -u news
LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】

ここで、newsユーザーに定期的に実行させたいコマンドを挿入します。Leafnodeのcrontabの例は次のとおりです。

* 3 * * 0 /usr/sbin/texpire
* 2,14 * * * /usr/sbin/fetchnews
@reboot /usr/sbin/fetchnews

このcrontabでは、毎週日曜日の午前3時にメンテナンスプログラムtexpireを実行すると同時に、12時間ごとにfetchnewsプログラムが走るようになります。

おめでとうございます!これでLeafnodeをUSENETサーバープロキシとして活用する基礎知識は身につきました。Leafnodeと組み合わせて使えるUSENETリーダーをお探しの方は、おすすめの5つの選択肢をご覧ください。

よくある質問

1. DebianでLeafnodeをダウンロードしましたが、初期インストールスクリプトでミスをしてしまいました。どうすればやり直せますか?

dpkg-reconfigureプログラムを使えば、Leafnodeのインストールスクリプトを再実行できます。ただし、このプログラムはデフォルトのPATH変数には含まれていません。

実行するには、次のコマンドを入力します。

sudo /usr/sbin/dpkg-reconfigure leafnode

2. LAN内でLeafnodeを運用したいのですが、どうすればよいですか?

「/etc/hosts.deny」と「/etc/hosts.allow」の両ファイルを編集しましょう。これにより、Leafnodeサーバーへのすべての着信接続をフィルタリングできます。

hosts.denyファイルの記述例は次のとおりです。

leafnode: ALL

一方、192.168.254.* のローカル接続を許可するhosts.allowファイルは次のようになります。

leafnode: 127.0.0.1 192.168.254.0/255.255.255.0

さらに、allowstrangers変数をallowSTRANGERSに変更し、値を42に設定する必要があります。

3. 初回接続時に大量の投稿をダウンロードしたいのですが、ディスク容量を圧迫したくありません。何か方法はありますか?

はい、あります!この目的には、initialfetchとdelaybodyという2つの変数を把握しておくだけで十分です。

特定のニュースグループの投稿をすべてダウンロードしたい場合は、initialfetch変数をコメントアウトします。そうすると、そのニュースグループについてリモートサーバー上の利用可能な投稿をすべて取得するようLeafnodeに指示できます。

ただし、投稿全体をダウンロードするとディスクスペースを大量に消費します。これを軽減するには、ヘッダーだけをダウンロードし、関心のある投稿の本文のみを後から取得する方式を採用します。そのために、delaybody変数を1に設定してください。


  1. Raspberry Pi OSのセットアップ方法を徹底解説!ImagerとNOOBSの2つの手順

    DebianベースのRaspberry Pi OS(旧称:Raspbian)は、Raspberry Piのハードウェアに最適化された公式OSです。すぐに使い始められる便利なソフトウェアが多数同梱されており、初心者から上級者まで、あらゆるユーザーにとって理想的な選択肢となっています。 Raspberry Pi OSのインストールは以前から比較的簡単でしたが、2020年にRaspberry Pi Imagerが登場してからは、さらに手軽になりました。この記事では、Raspberry PiにRaspberry Pi OSをセットアップする方法を、画像付きの手順でわかりやすく解説します。 なお、以下の

  2. 初心者向けDiscordサーバーの作り方と基本設定ガイド

    Discordサーバーをセットアップして、友人や家族を招待すれば、休暇シーズン中も手軽につながりを保てます。このチュートリアルでは、アカウントの作成からサーバーとクライアントの導入、さまざまなチャンネルの設定、メンバーの招待まで、一連の手順をわかりやすく解説します。最後に、権限システムの基本についてもご紹介します。 Discordアカウントを作成する まずはwww.discord.comにアクセスして、アカウントを作成しましょう。サイト右上の「ログイン」ボタンを選択し、ログインフォームの下にある「登録(Register)」リンクをクリックします。メールアドレス、ユーザー名、パスワードを入力し、