LeafnodeでオフラインUSENETサーバーを構築する方法【初心者向け完全ガイド】
USENETを頻繁に利用する方にとって、リモートのニュースサーバーとのやり取りは悩みの種になりがちです。多くの場合、これらのサーバーは動作が遅く、安定性にも欠けます。さらに、AIOEのような無料プロバイダに頻繁にアクセスすると、接続を制限されたり、IPアドレスを禁止されたりすることもあります。こうした要因が、USENET体験を快適とは言えないものにしているのです。
Leafnodeとは?
Leafnodeは、USENETサーバー向けのオフラインプロキシです。リモートのニュースサーバーから投稿記事をダウンロードし、自分のシステム上でローカルサービスとして提供します。複数のUSENETサーバーをアップストリーム(上位ソース)として登録し、それらを統合して単一のソースとして配信することも可能です。異なるプロバイダが提供する複数のニュースグループを購読したい場合に非常に便利な機能です。
さらにLeafnodeを使えば、購読しているニュースグループのオフラインコピーを持つことができます。インターネット接続が常時確保できない環境や、購読中のニュースグループをアーカイブしたい場合に重要なポイントです。そして何より、Leafnodeはシンプルで導入が簡単、しかも最新のUSENETリーダーすべてと互換性があります。
USENETプロキシの仕組み
前述のとおり、Leafnodeはプロキシ型のUSENETサーバーであり、ニュースリーダーに対してはニュースサーバーとして振る舞います。
ただし、従来のUSENETサーバーとは異なり、Leafnodeは他のサーバーから全階層の完全なコピーを取得するわけではありません。ユーザーが指定した条件に基づいて、指示された投稿だけを取得します。
Leafnodeはfetchnewsとtexpireという2つのプログラムと連携して動作します。
- fetchnews:どのニュースグループを購読し、何件取得するかをLeafnodeに指示するプログラムです。自分の投稿や返信のアップロードも担当します。
- texpire:古い投稿をニュースグループから削除するメンテナンス用プログラムです。重複メッセージや破損したメッセージの修復、ニュースサーバーのデータ全体の更新も行います。
この2つのプログラムにより、Leafnodeはほぼ無人で運用できます。初期設定さえ完了すれば、あたかもリモートUSENETサーバーのように動作するのです。
また、小規模なネットワーク内にLeafnodeを設置すれば、複数のユーザーがそこに接続してニュースを読むことも可能になります。その結果、USENETアクセスに使われるネットワーク帯域を大幅に削減できるでしょう。
Leafnodeのインストール
Leafnodeはできる限りシンプルであるよう設計されており、インストールもメンテナンスも手間いらずです。インストールは、お使いのディストリビューションのリポジトリから取得するだけで完了します。
例えばDebianやUbuntu 21.10では、aptコマンドで次のようにインストールできます。
sudo apt install leafnode
Leafnodeの初期設定
インストール中、Leafnodeは接続先となるリモートサーバーについていくつかの情報を尋ねてきます。最初の画面ではリモートサーバーのアドレスを入力します。例えばAIOEに接続したい場合は「nntp.aioe.org」を指定します。
筆者の場合はEternal September経由で接続するため、そのアドレスを入力しました。
自動ダウンロードの設定
続いて、インストーラーはニュース記事の取得方法を選択するよう求めてきます。選択肢は「PPP」「Permanent」「None」の3つです。
- PPP:インターネットに接続するたびに自動的に新着記事をダウンロードします。
- Permanent:1時間ごとに自動的にニュース記事をダウンロードします。
- None:自動取得を無効にします。リモートサーバーと同期するには、fetchnewsコマンドを手動で実行する必要があります。
筆者は、Leafnodeが自分の知らないうちにニュースサーバーへ勝手に接続するのを避けたいので、「None」を選択しました。
アクセス制御の有効化
次に、サーバーへのアクセス制御(Access Controls)を有効にするかどうかを尋ねられます。
この設定は、Leafnodeを複数ユーザー向けのローカルニュースサーバーとして運用する場合に関係してきます。「/etc/hosts」ファイルを使って、どのクライアントにアクセスを許可し、どのクライアントを拒否するかを制御できます。
例えば、社内LANなど各クライアントからのアクセスが前提の環境でLeafnodeを使用するなら、アクセス制御を有効にする必要はありません。
とはいえ、すべての外部からの接続をブロックし、許可したいものだけを通すのは一般的に良い習慣です。また、自分のマシン専用のローカルプロキシとしてLeafnodeを使う場合は、必ずこのオプションを有効にしてください。
筆者の場合、このLeafnodeインスタンスはこのマシンだけで使用する予定なので、アクセス制御を有効にしました。
ニュースグループの初回同期
その後、インストーラーは今すぐリモートUSENETサーバーに接続するかどうかを確認してきます。ここで「はい」と答えると、Leafnodeがサーバー上の利用可能なニュースグループ一覧を取得します。
ただし、Eternal Septemberのように認証が必要なサービスを利用している場合は、このオプションでニュースグループを取得しないでください。まだLeafnodeにアカウント情報を登録していないため、このタイミングで更新しても完全なニュースグループ一覧が取得できないからです。
筆者はEternal September経由で接続しているため、「いいえ」を選択しました。
Leafnodeの詳細設定
ここからは、設定ファイルを編集してLeafnodeの動作を細かく調整できます。
例えば、ニュース取得にUSENETアカウントを使用するための設定項目があります。また、どの投稿をダウンロードし、どれくらいの期間保存するかを指定するパラメータも設定可能です。
設定ファイルの場所はLinuxディストリビューションによって異なります。DebianおよびUbuntuでは「/etc/news/leafnode/config」にあります。
sudo vim /etc/news/leafnode/config
デフォルトのユーザー名とパスワードの設定
Leafnodeの設定ファイルは充実しており、ドキュメントも整備されています。各オプションには簡単な説明が付いており、正しい設定方法を示す例が記載されているものもあります。
LeafnodeでUSENETアカウントを使うには、usernameとpassword変数のコメントを解除し、自分のアカウント情報を入力します。
筆者の場合は、Eternal Septemberアカウントの情報を追加しました。
投稿フィルターの作成方法
Leafnodeの重要な機能の一つが、ダウンロード時の投稿の扱いを操作できる点です。投稿をフィルタリングしたり、特定のニュースグループを一定日数経過後も削除されないように設定したりできます。
投稿のフィルタリングには2つの方法があります。
- 投稿の一般的な属性による絞り込み。例えば、行数や投稿サイズでフィルタリングできます。
- 投稿ヘッダー内の特定の語句による絞り込み。フィルターファイルに正規表現のリストを作成して実現します。
一般的な属性でフィルタリングするには、設定ファイルから直接該当オプションを有効にします。例えばminlines変数を3に設定すると、3行未満の短い投稿をLeafnodeが取得しなくなります。
一方、特定の語句でフィルタリングするには、filterfileオプションを有効にします。filterfile変数のコメントを解除し、フィルターファイルへのパスを指定してください。
筆者はフィルターファイルのデフォルトパスを使用しています。
フィルターファイルの基本構文は以下のとおりです。
Header-Property:^/regex/$
フィルターファイルの各行は、投稿の特定のヘッダー属性を指すように記述します。例えば、Gmail(Google Mail)発の投稿をすべて除外したい場合は、次のように記述します。
^From:.*[A-Za-z0-9]*\.*[A-Za-z0-9]*\@gmail\.com$
ニュースグループのアーカイブ方法
デフォルトでは、Leafnodeは20日より古い投稿をすべてのグループから削除(prune)します。これによりファイルサイズの肥大化を抑えられるため、1日に100〜200件の投稿があるグループを購読している場合に便利です。
しかし、特定のニュースグループの投稿をすべてアーカイブ保存したいケースもあるでしょう。その場合はgroupexpire変数を有効にします。
例えばcomp.unix.miscニュースグループをアーカイブしたい場合は、設定ファイルに次の行を追加します。
groupexpire comp.unix.misc = -1
さらに、この変数を使えば特定のニュースグループの削除期限を変更することもできます。例えばmisc.internet.news.discussのような大量投稿グループを5日ごとに削除したい場合は、次の行を追加します。
groupexpire misc.news.internet.discuss = 5
複数のUSENETサーバーの設定方法
前述のとおり、Leafnodeでは複数のリモートサーバーから投稿を取得できます。一度に1台のサーバーにしか接続できないUSENETリーダーを使っている場合に特に便利な機能です。
さらに、追加のリモートサーバーの動作を変更するオプションも複数用意されています。nopost変数を1に設定すると、そのリモートサーバーは投稿の取得のみを行い、投稿の送信はしなくなります。
逆に、noread変数を設定すると、その逆の動作になります。
例えば、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
ここで、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に設定してください。
-
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をセットアップする方法を、画像付きの手順でわかりやすく解説します。 なお、以下の
-
初心者向けDiscordサーバーの作り方と基本設定ガイド
Discordサーバーをセットアップして、友人や家族を招待すれば、休暇シーズン中も手軽につながりを保てます。このチュートリアルでは、アカウントの作成からサーバーとクライアントの導入、さまざまなチャンネルの設定、メンバーの招待まで、一連の手順をわかりやすく解説します。最後に、権限システムの基本についてもご紹介します。 Discordアカウントを作成する まずはwww.discord.comにアクセスして、アカウントを作成しましょう。サイト右上の「ログイン」ボタンを選択し、ログインフォームの下にある「登録(Register)」リンクをクリックします。メールアドレス、ユーザー名、パスワードを入力し、