IRCで席をはずしている時に、自分のニックネームを自動的に xxxxx_away のように変えるのってどうやってるの?と聞いたところ、@ikasam_a 先生に znc を使ってるよ!と教えていただいたので自分でも試してみました。

zncとは: IRC Bouncer (IRC Proxy) です。どこかのサーバーにインストールしておくと、proxy が IRC サーバに接続し続けてくれます。手元の IRC クライアントから proxy に接続すると、自分が退席した間のログも取得することができます。複数のクライアントから接続した場合でも、IRCサーバには1人と見せることもできます。

znc のインストール

自分は tar ball からいれました。じゃないと simple_away がデフォで入っていなかったので。

$ wget http://znc.in/releases/znc-1.0.tar.gz
$ tar zxvf znc-1.0.tar.gz
$ cd znc-1.0
$ ./configure
$ make all
$ sudo make install

znc の初期設定

$ znc --makeconf

以下、入力例(ちょっと見づらい)。基本的にはデフォルト通りですが、管理画面があったら便利かなあと webadmin を入れたのと、本来の目的用の simple_away プラグインを入れる?という設問があったので、yes にしました。

[ ** ] Building new config
[ ** ] 
[ ** ] First let's start with some global settings...
[ ** ] 
[ ?? ] What port would you like ZNC to listen on? (1025 to 65535): 6667
[ ?? ] Would you like ZNC to listen using SSL? (yes/no) [no]: 
[ ?? ] Would you like ZNC to listen using ipv6? (yes/no) [yes]: 
[ ?? ] Listen Host (Blank for all ips): 
[ ok ] Verifying the listener... 
[ ** ] 
[ ** ] -- Global Modules --
[ ** ] 
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] | Name      | Description                                              |
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] | partyline | Internal channels and queries for users connected to znc |
[ ** ] | webadmin  | Web based administration module                          |
[ ** ] +-----------+----------------------------------------------------------+
[ ** ] And 10 other (uncommon) modules. You can enable those later.
[ ** ] 
[ ?? ] Load global module ? (yes/no) [no]: 
[ ?? ] Load global module ? (yes/no) [no]: yes                                                                                                                                                                                                               [45/1850]
[ ** ] 
[ ** ] Now we need to set up a user...
[ ** ] ZNC needs one user per IRC network.
[ ** ] 
[ ?? ] Username (AlphaNumeric): sonots
[ ?? ] Enter Password: 
[ ?? ] Confirm Password: 
[ ?? ] Would you like this user to be an admin? (yes/no) [yes]: 
[ ?? ] Nick [sonots]: 
[ ?? ] Alt Nick [sonots_]: 
[ ?? ] Ident [sonots]: 
[ ?? ] Real Name [Got ZNC?]: Naotoshi Seo
[ ?? ] Bind Host (optional): 
[ ?? ] Number of lines to buffer per channel [50]: 
[ ?? ] Would you like to keep buffers after replay? (yes/no) [no]: 
[ ?? ] Default channel modes [+stn]: 
[ ** ] 
[ ** ] -- User Modules --
[ ** ] 
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] | Name        | Description                                                                                                |
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] | admin       | Dynamic configuration of users/settings through IRC. Allows editing only yourself if you're not ZNC admin. |
[ ** ] | chansaver   | Keep config up-to-date when user joins/parts                                                               |
[ ** ] | keepnick    | Keep trying for your primary nick                                                                          |
[ ** ] | kickrejoin  | Autorejoin on kick                                                                                         |
[ ** ] | nickserv    | Auths you with NickServ                                                                                    |
[ ** ] | perform     | Keeps a list of commands to be executed when ZNC connects to IRC.                                          |
[ ** ] | simple_away | Auto away when last client disconnects                                                                     |
[ ** ] +-------------+------------------------------------------------------------------------------------------------------------+
[ ** ] And 35 other (uncommon) modules. You can enable those later.
[ ** ] 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: 
[ ?? ] Load module ? (yes/no) [no]: yes
[ ** ] 
[ ** ] -- IRC Servers --
[ ** ] Only add servers from the same IRC network.
[ ** ] If a server from the list can't be reached, another server will be used.
[ ** ] 
[ ?? ] IRC server (host only): xxx.xxx.xxx.xxx
[ ?? ] [xxx.xxx.xxx.xxx] Port (1 to 65535) [6667]: 
[ ?? ] [xxx.xxx.xxx.xxx] Password (probably empty): 
[ ?? ] Does this server use SSL? (yes/no) [no]: 
[ ** ] 
[ ?? ] Would you like to add another server for this IRC network? (yes/no) [no]: 
[ ** ] 
[ ** ] -- Channels --
[ ** ] 
[ ?? ] Would you like to add a channel for ZNC to automatically join? (yes/no) [yes]: 
[ ?? ] Channel name: #test
[ ?? ] Would you like to add another channel? (yes/no) [no]: 
[ ** ] 
[ ?? ] Would you like to set up another user (e.g. for connecting to another network)? (yes/no) [no]: 
[ ok ] Writing config [/Users/seo.naotoshi/.znc/configs/znc.conf]... 
[ ** ] 
[ ** ] To connect to this ZNC you need to connect to it as your IRC server
[ ** ] using the port that you supplied.  You have to supply your login info
[ ** ] as the IRC server password like this: user:pass.
[ ** ] 
[ ** ] Try something like this in your IRC client...
[ ** ] /server  6667 sonots:
[ ** ] And this in your browser...
[ ** ] http://:6667/
[ ** ] 
[ ?? ] Launch ZNC now? (yes/no) [yes]: 
[ ok ] Opening Config [/Users/seo.naotoshi/.znc/configs/znc.conf]... 
[ ok ] Loading Global Module [webadmin]... [/usr/local/Cellar/znc/0.206/lib/znc/webadmin.so]
[ ok ] Binding to port [6667]... 
[ ** ] Loading user [sonots]
[ ok ] Adding Server [xxx.xxx.xxx.xxx 6667 ]... 
[ ok ] Loading Module [simple_away]... [/usr/local/Cellar/znc/0.206/lib/znc/simple_away.so]
[ ok ] Forking into the background... [pid: 25354]
[ ** ] ZNC 0.206 - http://znc.in

設定がおわると

~/.znc/configs/znc.conf

にファイルが作られているはず。

クライアントからの接続

znc を入れたマシンへ、指定したポート番号と指定したサーバパスワードで接続。

すると、znc でつないだチャンネル一覧が勝手に出るはず。

管理画面へのアクセス

セットアップ時に webadmin を入れたので、http://localhost:6667 で管理画面が表示されて、設定を変更できます。#Chrome だと変なポートが塞がれているかもしれないので Firefox で。

800px-Webadmin-settings-dark-clouds

自動 away 設定

管理画面 > webadmin > Your Settings > Edit `Networks` からモジュールを選択できます。ここで、

  • awaynick
  • simple_away

にチェックを入れて save します。これで時間が立ったり、ZNC から接続が切れた場合に自動的に away になります。

away 時のニックネームはデフォルトでは zz_元の名前 となるので変更したい場合、ドキュメント に書いてあるように、IRC クライアントから

/msg *awaynick set sonots_away

のようにして awaynick モジュールにメッセージを送って設定します。

複数クライアントから接続した場合でも Buffer Playback できるようにする。

znc を使うとデフォルトでチャンネルに再Joinしたときに不在中のチャットログが表示(Buffer Playback)されますが、第二クライアントから接続した場合、その Playback 済みの Buffer が消えてしまって、見る事ができません。第二クライアントから接続した場合でも、Buffer Playback できるようにするには、

管理画面 > List Users > Edit (an user) > Edit (a network) > Edit (a channel) から

  • Auto Clear Chan Buffer

のチェックをはずします。

  • Buffer Count

の値もデフォルトの 50 だと少ない気がするので、1000 などそれなりの数字に変えるとよさそうです。これを全チャネルに対して実施すればOKです。後記:1000だとでかすぎてバッファ読み込みおそ過ぎでした。100ぐらいですかね。

ちょっと面倒くさいので、.znc/configs/znc.conf で直接編集したい場合は、

    <Chan #ruby>
        AutoClearChanBuffer = false
        Buffer = 1000
    </Chan>

こんなかんじの設定になります。一括置換して znc を再起動すればよいでしょう。

znc の再起動方法

http://wiki.znc.in/Configuration にありますが、znc.conf を直接いじって再起動したい場合は

$ pkill -SIGUSR1 znc # to save current runtime configuration to znc.conf
$ pkill znc # to shutdown running ZNC instance
Edit znc.conf
$ znc

こんなかんじにコマンドを打ちます。

IRCログのファイル書き出し

Buffer Playback の機能もありますが、znc サーバのディスクにIRCログを書き出しておくこともできます。デフォルトだと Buffer はメモリ上のみに保存されるので簡単に消えてしまいます。

管理画面 > webadmin > Your Settings から

  • log

にチェックを入れて save します。これで、

~/.znc/users/{nickname}/moddata/log

ディレクトリにチャンネル毎のログファイルがディスク書き出しされるようになりあす。

とりあえずここまで!何かあったら追記します!