zncでISO-2022-JPなサーバーに接続する方法
経緯
IRC BouncerであるところのzncでISO-2022-JPなwide等のネットワークに接続出来るようになったので、手順を雑に記しておく。
zncの内部エンコーディングはUTF-8に統一されている。 このため当然wideにつなぐにはエンコーディング変換をする必要があるのだけど、現行のznc 1.2にはcharsetモジュールが入っていて一見これでISO-2022-JPなサーバーにも接続出来るように思える。
しかし使ってるライブラリがiconvな為、UTF-8 => ISO-2022-JPの変換でよく化ける。おまけにマルチバイトのチャンネル名を正しく扱えず、あんまり使い物にはならない。
何とかならないかとzncの実装を追っかけてたら、数ヶ月前にICUを使ったエンコーディング変換が実装されていたことがわかった。
https://github.com/znc/znc/commit/c0a5ecb40b65072a051fa29412142f9eeff9a9f6
znc 1.3がリリースされれば使えるとは思うが、とりあえずソースビルドして試してみることにした。
とりあえず個人的にznc専用に飼っているさくらVPS上のCentOS6に構築した。
手順
ICU
まずICUを入れる。zncからはpkg-config経由でicu-ucが要求されるので、yumから入れたりするとバージョンが古いのかpkg-configからはicuしか見つからずICUが有効にならない。 これも怠惰にソースビルドすることにした。
curl -O http://download.icu-project.org/files/icu4c/52.1/icu4c-52_1-src.tgz
tar xzvf icu4c-52_1-src.tgz
cd icu/source
./configure
make
make install
問題なく入る。ビルドはわりと長い時間かかる。 文字を扱うということが単純なようでいて業が深いのだなと思っていたら終わった。
znc
ICUをソースビルドしたので/usr/local/lib/pkgconfigをpkg-configのconfig pathにしておく。
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
やっとzncをビルドする。
git clone git@github.com:znc/znc.git
cd znc
./autogen.sh
./configure
configureの結果からICUが有効になっていることを確認する。
charset: yes
makeする
make && make install
あとは一旦他のznc導入記事でも見て設定していく。
エンコーディング設定
charsetモジュールは廃絶されたので、設定方法も微妙に変わった。webadminからまだ弄れないようす。 まずは対象ユーザーにcontrolpanelモジュールを入れておくこと。 usernameというユーザーにwideという名前でネットワークを作成したなら、
/privmsg *controlpanel SetNetwork encoding username wide JIS8
/privmsg *controlpanel Reconnect username wide
すれば設定は完了する。IRCクライアントの文字コード指定はUTF-8で接続する。
使ってみた結果
割りと使える。適当だけど以上。