先日、テストをしていて、「あら、文字化けしている」という出来事がありましたので、その時の事を少し。

私の環境ではなかったんですが、2-node cluster でテストをしていて、コマンドのメッセージが文字化けしているという報告を受けました。最初は気づかずに、マシンのメッセージファイルを調べていたんですが、原因はさにあらず。クラスターを組んでいる互いのマシンが、違うシステムロケールの設定を持っていたためでした。

ローカライズの際に、daemon のメッセージというのは、結構扱いが難しい所だと思うのですが、どうでしょう。/etc/default/init に従って init のロケールが設定されて、各 daemon で特別設定されていなければ、このロケール環境が引き継がれるわけですが、log に出るとコンソールで読めなかったりとか、しますよね。他のエンコードを使っているプログラムからログが書き込まれると、マルチリンガルなファイルになってしまったりして。メッセージを翻訳しない、と言う手もあるにはあるんですが、library に入っているものもあるし、どこまで翻訳しないのか、というのは難しい所です。本来は daemon の起動の際に、LC_MESSAGES をきちんと設定するのが、本当なのかもしれません。

今回の問題は、rgmd daemon のメッセージが、もう片方のクラスターノードから来てるためだと思うんですが、そのクラスターノードを落としたり、システムロケールを設定しなおせば、目の前でコマンドを叩いているマシンの daemon からメッセージが来て、表示は直ります。各クラスタノードは、同じシステムロケールを使わないといけないワケなんです。将来的には直したいですね。

投稿されたコメント:

コメント
  • HTML文法 不許可

This blog copyright 2008 by kazuhiko