LoginSignup
5
4

More than 5 years have passed since last update.

ISO-2022-JPなチャンネルでもZNCを使う

Posted at

あるいは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に設定しておく。これでログファイルも文字化けしない。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4