2010-01-05 20:42 | tag: apache, linux
RHEL/CentOS 5では、AapacheはCロケールで起動します。 /etc/sysconfig/i18n 内のLANG変数の値は使用されません。変更するには、/etc/sysconfig/httpdファイルでHTTPD_LANG変数を設定します。
Cロケールで起動するデフォルトの状態では、Apache上で実行するアプリケーションにおいて日本語の処理に問題が発生する場合があります。
ja_JP.utf8に設定するには、 /etc/sysconfig/httpd に以下の行を追加します。
HTTPD_LANG=ja_JP.utf8
/usr/local/apache2/bin/envvars に以下の行を追加します。このファイルは apachectl 実行時に読み込まれます。
LANG=ja_JP.utf8 export LANG
Apacheの起動スクリプト /etc/rc.d/init.d/httpd は、 /etc/sysconfig/httpd が存在すれば読み込みます。
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
/etc/rc.d/init.d/httpd start を実行すると、LANG変数にHTTPD_LANGの値をセットした上でApacheを起動します。
start() {
echo -n $"Starting $prog: "
check13 || exit 1
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
Apache+Passengerの構成で実行している Redmine でSubversionリポジトリに格納されているファイルの差分を見ようとしたとき、日本語ファイル名が使われていると「リポジトリに、エントリ/リビジョンが存在しません」というエラーが表示されます。

これは、Redmineが内部でsvnコマンドを実行したときにエンコーディング変換関係のエラーが発生していることが原因です。エラーはApacheのログで確認できます。
svn: Can't convert string from 'UTF-8' to native encoding: svn: Index: ?\227?\129?\181?\227?\129?\134.rb
/etc/sysconfig/httpd 内で HTTPD_LANG=ja_JP.utf8 と設定すると、正しく差分表示が行えるようになります。
