あるいはUpstreamのZNCをコンパイル&&インストールする方法について。
zncには以前charsetというモジュールがあったのだが、チャンネル名の変換はできなかったため、設定ファイル内で文字化けが起きたり、ログファイル名が文字化けたりと、いまいちイケてない感があった。そこでTiarraですよ、というわけで、長いことTiarraを使っていた。そうこうしているうちに、UTF-8以外のチャンネル名には無力なcharsetモジュールは廃止になり、代わりにlibicuを使ったソケットレイヤーでの文字コード変換が導入された。
https://github.com/znc/znc/commit/6012cdee77c4e11879537c973177d138b9e66006
このFixにより、UTF-8以外のチャンネル名でも期待した通りの動作をするようになった。設定ファイル内での文字化けしなくなり、logモジュールで取得したログの内容やファイル名もUTF-8になる。
http://trapezoid.hatenablog.com/entry/2014/02/21/124314
v1.3辺りから使えるようなのだが、周辺でちょこちょこ更新が来るので、ソースをコンパイルして使用することにする。すべて/usr/local下に配置されるようなので、まぁあまり細かいことは気にしない。とか言ってたら、この前Webコンソールからユーザー追加したらsegfaultしたけど、git pull
したら直ってたし、やっぱり細かいことは気にしない。
文字コード変換を有効化するには、libicu-develを入れてconfigureする。リポジトリにあるパッケージで問題ない。今回はあまり関係無いけれど、PerlやPythonのモジュールが必要な場合にはswig, libperl-devel, libpython-devel等も必要になる。SSLを使いたい場合にはOpenSSLも必要。全機能をリンクしようとすると結構依存が多い。また、configureに--systemdsystemunitdir
オプションでUnitファイルの置き場所を指定しておくと、make install
でsystemdのUnitファイルを作成&配置してくれる。
sudo LANG=C yum group install 'Development tools'
sudo yum install libicu-devel
./configure --systemdsystemunitdir=/etc/systemd/system
make
sudo make install
Unitは作ってくれるのだが、プロセス起動用にzncユーザーが必要だったりちょっとめんどくさい:
getent group znc >/dev/null || groupadd -r znc
getent passwd znc >/dev/null || useradd -r -g znc -d /var/lib/znc -s /sbin/nologin -c "Account for ZNC to run as" znc
mkdir -p /var/lib/znc
chown znc:znc /var/lib/znc
主要ディストリビューションにはZNCがパッケージで用意されているので、この辺はパッケージに任せてしまうのもアリな気はする…。上述のユーザー追加スクリプトも、Fedora21のリポジトリのSRPMを展開して、それを拝借したもの。
配置されたsystemdのユニットファイルを編集して/usr/local下のzncを起動するように設定:
% diff znc.service /etc/systemd/system/znc.service
6c6
< ExecStart=/usr/bin/znc -f
---
> ExecStart=/usr/local/bin/znc -f
このまますぐに起動しても設定ファイルが無いと起動に失敗するため:
sudo -u znc /usr/local/bin/znc --makeconf
で設定ファイルを作成する必要がある。初期設定ではNickや接続先の設定を対話形式で行う。Encoding設定にはControlPanelモジュールを使用するため、これを有効にしておくこと。また、起動はsystemd経由で行いたいので、--makeconf
の最後に起動するか聞いてきた時にはNoを選択する。設定が終わったらsystemd経由で起動:
sudo systemctl enable znc
sudo systemctl start znc
エンコード設定はIRCクライアントでZNCに接続後、*controlpanelに話しかけることで行う。例えばIRCNetJPでISO-2022-jpを使いたいという場合は:
/msg *controlpanel SetNetwork encoding makisyu IRCNetJP JIS8
/msg *controlpanel Reconnect makisyu IRCNetJP
IRCクライアント側はUTF-8に設定しておく。これでログファイルも文字化けしない。