INN-2.3.3 インストール & 設定ガイド


インストール手順


記事の保存方法について

INN-2.3 では、記事の保存方法に以下の 4種類の方法を選ぶことができる。

tradspool INN-1.x の頃から使用されている形式で、 ~news/spool/article の下に news/software/nntp/12345 という形式で記事を保存する。 古いバージョンとスプールの互換性はあるので移行は容易だが、 スピードが遅いのがデメリット。
timehash 1 article 1 file は traditional と同じだが、 hash 関数を用いて保存するディレクトリを決定する。 スピードは中程度。
timecaf ディレクトリ構造は timehash と似ているが、 複数の article を 1つのファイルにまとめて保存する。 スピードは速い。
cnfs article 用の buffer を確保して、 そこに連続的に cyclic に書き込みを行う。 buffer が溢れると古い記事が自動的に上書きされるため スプールが溢れることはないが、 記事の保存期間を設定することはできない。 スピードは最も速い。

フルフィードを行なっているサイトでは性能を重視して cnfs を使用するのがいいだろうが、 ごく一部のニュースグループしか講読していないサイトだとスピードはそれほど問題にはならないので、 管理の容易さを重視して traditional を使用するのがいいだろう。

なお、このドキュメントでは tradspool を使用する場合について説明するに留める。 timehash, timecaf または cnfs を使用する場合は INSTALL 等、 他のドキュメントを参照のこと。


設定方法

以下のようにファイルの作成・変更して設定を行う。 なお、以下で作成するファイルの owner はすべて news にする必要がある。 そのため、news ユーザーで作業を行うのも 1つの方法である。 また、設定時には INN-2.3.3 に付属の INSTALL ファイルも併せて読むのが望ましい。
  1. news ユーザー、news グループの作成

    もし /etc/passwd, /etc/group に news というユーザー、news というグルー プが存在しない場合はあらかじめ作成しておく。

    news ユーザーのホームディレクトリは configure 時に --prefix で指定し たディレクト (デフォルトは /usr/local/news)、シェルは sh か csh に 設定するのがいいだろう。

  2. inn.conf の修正

    ~news/etc/inn.conf をサイトの環境に合うように修正する必要がある。 最低限設定が必要と思われるエントリーは以下の通り。

  3. newsfeeds の設定

    ~news/etc/newsfeeds を、デフォルトで設定されている ME 行をコメントア ウトして、以下のように記述する。

        ME:*,!control*,!junk::
        host/alias:*,!local.*,!control*,!junk/!local:Tf,Wnm:
    host には上位ホストの nickname で、nntpsend ファイルで参照される。 また、alias には、feed 元で Path に記述される名前を書く。 alias が host に一致する場合は省略可。

    次に、innd は自分自身で overview データベースを作成する機能があるが、 外部ブログラムに実行させることによって性能を向上させることができる。 これを行うためには、

         #overview!:*:Tc,WnteO:/usr/local/news/bin/overchan 
    のコメントを外し、~news/etc/inn.conf に
         useoverchan: true 
    を入れる。 さらに、
         #controlchan!\
         #    :!*,control,control.*,!control.cancel\
         #    :Tc,Wnsm:/usr/local/news/bin/controlchan 
    のコメントを外すとコントロールメッセージの処理速度を向上させる ことができる。使用する場合は ~news/etc/inn.conf に
         usecontrolchan: true 
    の設定もあわせて行なう。

  4. storage.conf の設定

    スプールに保存する形式をこのファイルで指定する。 tradspool を使用するのであれば、以下の設定を入れればよい。

         method tradspool {
             newsgroups: *
             class: 0
         } 
  5. incoming.conf の設定

    ~news/etc/incoming.conf ファイルに、自分にニュースをフィードするサイ トを FQDN または IP address で記述する。

        (例)
        peer hostname {
          hostname: hostname.domain.name
        } 
    このファイルは、INN-1.x の hosts.nntp に相当する。

  6. readers.conf の設定

    ~news/etc/readers.conf に接続を許すホストを以下の形式で記述する。

        (例)
        auth "local" {
            hosts: "10.0.0.0/8, 192.168.0.0/16" 
            default: "<local>@host.domain"
        }
    
        access "local" {
            users: "<local>@host.domain"
            newsgroups: "*"
        } 
    このファイルは、INN-2.2 までの nnrp.access に相当する。
  7. nntpsend.ctl の設定

    ~news/etc/nntpsend.ctl に以下のように記述する。

        host:FQDN:1m:-T1800 -t300  
    ここで、host には newsfeeds に書いた host と同じ文字列を使用する。

  8. moderators ファイルの設定

    デフォルトでは

        *:%s@moderators.isc.org 
    となっていて、moderator group に投稿された記事は ISC にある moderators データベースに飛んでいくようになっているので特に設定する 必要はないが、自力で設定したい場合や local に moderator group を 作成する場合は、上の行の前に以下のような設定を moderators ファイルに 追加する。
        (例)
        gnu.*:%s@prep.ai.mit.edu
        jp.inet.*:%s@utsun.s.u-tokyo.ac.jp
        fj.*:%s@creamy.ics.es.osaka-u.ac.jp
        tnn.*:%s@news.iij-mc.co.jp
        iij.*:%s@news.iij.ad.jp
        *:%s@uunet.uu.net 
  9. control.ctl の設定

    講読していないニュースグループのコントロールメッセージが、クロスポスト 等を通して流れ込んでくる場合には、そのグループのコントロールメッセージが 自動的に処理されないように、コメントアウトしておく。 また、今後アドレスの変更のアナウンスがあった場合にも 修正の必要が出てくるので、注意しておく。

  10. motd.news, distributions ファイルの作成

    これらのファイルは、ユーザーに情報を与えるためだけに使用されるので、 特に作成する必要はないが、ユーザーに便宜を与えたい場合には作成する。

  11. expire.clt の設定

    expire の期間をデフォルトの設定から変更した場合は、 expire.ctl の中身を修正する。

  12. active file の作成

    上位サーバーの active ファイルを入手して、以下の sed script によって カウンターをリセットし、~news/db/active として置く。

        % sed -e "s/\([^ ]*\).*\(.\)/\1 0000000000 0000000001 \2/" 
    なお、上位サーバーの active ファイルを入手するにはメールで送ってもら う方法もあるが、上位サーバーに接続できるのであれば、
        % script
        % telnet news.domain.name nntp
        list active
        quit 
    を実行して、typescript ファイルを編集する方法もある。

    また、閉じた環境で運用する場合など、 active ファイルを送ってもらうことのない場合には、

        control 0000000000 0000000001 y
        junk 0000000000 0000000001 y 
    という内容で、最低でも control と junk だけは作成しておく。

  13. history file の作成 ~news/db に移って、
       % ~news/bin/makehistory
    を実行して、history database を作成し、
       % ~news/bin/makedbz -s `wc -l < history` -f history
    を実行して db 化する。

    古いバージョンから history データベースをアップデートするときは、 makehistory を実行する代わりに古い history ファイルをコピーして、 makedbz を実行すればよい。

  14. syslog.conf の設定

    /etc/syslog.conf に以下の設定を追加する。

         news.crit                       /dev/console
         news.crit                       /usr/local/news/log/news.crit
         news.err                        /usr/local/news/log/news.err
         news.notice                     /usr/local/news/log/news.notice
    /usr/local/news/log の部分は、inn.conf の pathlog の設定に置き換える。 なお、左右の区切りは TAB を用いること。スペースを用いると正しくログ を出力されないので注意する。

    変更したら

        # touch /usr/local/news/log/news.crit
        # touch /usr/local/news/log/news.err
        # touch /usr/local/news/log/news.notice 
    でファイルを作成した後、
        # kill -HUP `cat /etc/syslog.pid` 
    を実行して、実行中の syslogd に設定変更を反映させる。

  15. /etc/aliases の変更

    /etc/aliases を変更して news と usenet の alias を定義し、 newaliases を実行する。

        例)
        news:       postmaster
        usenet:     news 
  16. pgp の設定

    pgpverify を使いたい場合は、inn.conf で

        pgpverify: true 
    が設定されていることを確認した上で、以下の作業を行なう。 なお、以下の作業はすべて news ユーザー権限で実行する必要がある。

    GnuPG を使う場合

    1. まず 1回だけ gpg を実行する。これにより ~news/.gnupg ディレクトリとその下に options ファイルが作られる。
    2. 次に gpg --gen-key を実行して鍵を作る。
      • 鍵の種類 … 「(1) DSA and ElGamal (default)」を選択
      • ELG-E keypair の鍵長 … 2048
      • 鍵の有効期間は … 0 (無期限)
      • 本名 … INN news
      • 電子メールアドレス … news@host.domain の形式で入力する
      • コメント … なし (何も入れないでリターンキーを押す)
      • パスフレーズ … パスワードを入れる。
    3. PGPKEYS ファイルを ftp://ftp.isc.org/pub/pgpcontrol/PGPKEYS から入手する。
    4. 入手した PGPKEYS ファイルから、エディタを使って講読している ニュースグループだけを取り出す。
    5. gpg -import /tmp/PGPKEYS を実行する。
    6. gpg --list-keys で鍵が登録されたかどうか確認できる。

    PGP を使う場合

    1. ~news/.pgp ディレクトリを作成する。mode は 700 にする。
    2. pgp -kg で pgp の初期化を実行。
      • PGP key size … 1024 bit を選択
      • user ID … "news <news@host.domain>" の形式で入力する
      • pass phrase … password を入力
      • random bits … 適当にキー入力する
    3. PGPKEYS ファイルを ftp://ftp.isc.org/pub/pgpcontrol/PGPKEYS から入手する。
    4. 入手した PGPKEYS ファイルから、エディタを使って講読している ニュースグループだけを取り出す。
    5. pgp -ka /tmp/PGPKEYS を実行する。このとき、
      • "y/N" と聞かれるところはすべて "y" と答える。
      • pass phrase には、初期化するときに入力したパスワードを入力する。
      • trust するかどうかには、"3=Usually" を答える。
    6. pgp -kv で鍵が登録されたかどうか確認できる。

    [注意]

    INN-2.3.3 から GnuPG がサポートされたが、これは configure 時に GnuPG がインストールされているかどうかを自動的に検出して、インストールされ ていれば GnuPG を使うようになっている。

    そのため、GnuPG もインストールされているが PGP を使いたいユーザは、 インストール後 /usr/local/news/lib/innshellvars.pl の

    $gpgv = "/usr/local/bin/gpgv" ;
    という行を
    $gpgv = "" ;
    と修正する必要がある。

  17. 設定の確認

    以上の設定が終了したら、~news/bin/inncheck を実行して、設定が正しい かどうかを確認する。

  18. INN の起動

    news ユーザーで ~news/bin/rc.news を実行し、ps を実行して news のプ ロセスが動いているかどうかを確認する。

    以下のプロセスが動いていればよい。

        % ps -ef | grep news
        news 17870     1  0 15:01:56 ?        0:00 /usr/local/news/bin/innd -p4
    もし、動いていない場合は、/var/adm/messages および ~news/log 以 下にあるログファイルを見て、エラーを特定し、修正後、再度 rc.news を 実行する。

  19. cron の設定

    news ユーザーの cron を

        0,10,20,30,40,50 * * * * /usr/local/news/bin/nntpsend
        45 4 * * * /usr/local/news/bin/news.daily expireover lowmark 
    のように設定して、

    1. 10分おきに配送先へニュースの配送
    2. 毎日1回、expire の実行

    を行うようにする。

    news.daily に指定するオプションは "expireover lowmarkl" が最も一般的 だが、他のオプションを指定することも可能。 どのようなオプションを指定できるかは news.daily のマニュアルを 参照すること。

  20. /etc/rc.local の変更

    SunOS 4.1.4 では、以下の行を /etc/local に追加して、boot 時に news が起動するようにする。

        #
        # start up INN
        #
        if [ -f /usr/local/etc/rc.news ]; then
    	/bin/su - news -c /usr/local/news/bin/rc.news > /dev/null & echo -n ' innd'
        fi
    Solaris 2.x の場合は /etc/rc2.d/S95inn として以下のファイルを置いて、 boot 時に news が起動するようにする。

        #!/sbin/sh
        #
        # start up INN 2.3.3
        #
    
        PATH=/usr/bin; export PATH
    
        case "$1" in
    
        'start')
    	    if [ -f /usr/local/news/bin/rc.news ]; then
    		    /bin/su - news -c /usr/local/news/bin/rc.news
    		    echo "Start up INN 2.3.3"
    	    fi
    	    ;;
        'stop')
    	    /bin/su - news -c '/usr/local/news/bin/ctlinnd shutdown ""'
    	    ;;
        *)
    	    echo "Usage: /etc/init.d/news {start|stop}"
    	    ;;
        esac

トラブル・シューテング

ニュースがうまく動かないときは、特に以下を手掛りに設定の確認を行う。


SPAM filter について

configure 時に --with-perl を指定した場合は、SPAM filter を使う機能が 有効になる。デフォルトで設定される filter でもある程度は SPAM 記事を弾 くことができるが、効果的にこの機能を利用したい場合は、以下のような filter を手に入れて、~news/bin/filter/filter_innd.pl を置き換えて使用 する。

なお、filter_innd.pl は隣接のニュースサーバーから配送される記事に対して 機能するが、ローカルにポストされた記事に対して filter の機能を有効にしたい 場合は、filter_nnrpd.pl を置き換える filter を利用する。

その他のメモ


Q & A

  1. INN のプロセスを殺すには、どうしたらいいのでしょうか?
  2. 次のコマンドを実行して下さい。
      % /usr/local/news/bin/ctlinnd shutdown ""
    innwatch を使っている場合は、innwatch のプロセスも手動で kill し ておいた方がいいでしょう。

  3. 特定の Message-ID が history に残っているか、どうすれば調べられ るでしょうか?
  4. grephistory コマンドを使って下さい。

  5. ローカルに投稿された記事を管理者宛にメールで送信するには、 どうすればいいのでしょうか?
  6. 以下のようなエントリーを newsfeeds に追加するといいでしょう。
        mail/remote-path-host:*:Tp:\
         sm %s | innmail -s "Posted news at xxx" news@domain.name
  7. コントロールメッセージの処理で process full になってしまいました。
  8. 以下の設定を行なって、sendsys, version の control message は 無効にする。
            sendsys:*:*:log=sendsys
            version:*:*:log=version
    また、それ以外の control message に対しては、 controlchan! を使って 1つのプロセスで処理するようにする。

  9. 毎日送られてくるレポートを Web で表示するにはどうしたら いいのでしょうか?
  10. innreport.conf の html を true にして、inn.conf の pathhttp にデータを格納したいディレクトリを指定します。このディレクトリ は news 権限で書き込めるようにしておきます。 なお、perl のライブラリ GD をインストールするのを 忘れないようにしましょう。

    なお、GD-1.20 から特許問題の影響で gif のサポートが外されたため、 innreport では png で出力する。どうしても gif を出力したい場合には GD-1.19 を使用する必要がある。

  11. ニュースサーバーを二重化するにはどうしたらいいのでしょうか?
  12. slave 側の inn.conf に xrefslave を true にし、 nnrpdposthost に master news server を記述することで可能です。 これによって、
    1. xrefslave によって、slave 側では Xref ヘッダを見て 記事番号を master側に合わせる。
    2. nnrpdposthost によって、slave 側にポストされた記事は master 側へ丸投げされ、必ず master → slave という経路で 処理される。
    という処理が行われ、サーバー間で記事番号等の同期が 確保されます。

  13. 新規ニュースグループを追加するにはどうしたらいいのでしょうか?
  14. 以下のような方法があります。
  15. パスワードによりユーザーのアクセス制限を行いたい場合は どうすればいいでしょうか?
  16. 以下のような設定を readers.conf に入れればいいでしょう。
        # auth : password list member
        auth "authuser" {
          auth: "ckpasswd -f /usr/local/news/user/member"
          auth: "ckpasswd -s"
          default: ""
        }
    
        access "trusted_member" {
          users: "*,!"
          newsgroups: "*"
          access: RPA
        } 

INN に関する情報交換の場

INN に関して情報交換を行なっている場としては以下のようなものがある。 設定で自分でいろいろ試してみてもうまくいかないことがあれば、 以下の場所で質問してみると、適切な解答が得られることも多い。

関連ソフトウェア


関連情報

日本語の情報 英語の情報 ニュースグループに関する情報 その他 Last modified: Wed Nov 24 16:02:12 2004