UTF-8のhttpd.confでエラー

本日Apacheをいじっていたら、こんな Syntax error に遭遇しました。
少し調べたのでメモ。

# /usr/local/httpd-2.2/bin/apachectl configtest
Syntax error on line 1 of /usr/local/httpd-2.2.15/conf/httpd.conf:
Invalid command '\xef\xbb\xbfServerRoot', perhaps misspelled or defined by a module not included in the server configuration


diffを取ると確かに違います。
でも見た目上は分かりません。

# diff httpd.conf httpd.conf.org
1c1
< ServerRoot "/usr/local/httpd-2.2"
---
> ServerRoot "/usr/local/httpd-2.2"


ハッシュを取るとやはり違う。

 # md5sum httpd.conf httpd.conf.org
 2c22e20a73866507ecdef7f3a8916d2b  httpd.conf
 4c542941ede3dbf3914d2100a68b83e0  httpd.conf.org


ということで、問題のファイルに対して cat -v をすると、先頭に怪しい記号が。これか。

 # cat -v httpd.conf | head -2
 M-oM-;M-?ServerRoot "/usr/local/httpd-2.2"


原因はUTF-8の符号「EF BB BF」が含まれていたこと。
(BOMっていうようで。)


おもむろにfileコマンドで調べると一目了然。

 # file httpd.conf httpd.conf.org
 httpd.conf:     UTF-8 Unicode text
 httpd.conf.org: ASCII text


16進ということでついでに hexdump してみます。

 # hexdump -C /usr/local/httpd-2.2/conf/httpd.conf | head -2
 00000000  ef bb bf 53 65 72 76 65  72 52 6f 6f 74 20 22 2f  |...ServerRoot "/|
 00000010  75 73 72 2f 6c 6f 63 61  6c 2f 68 74 74 70 64 2d  |usr/local/httpd-|

 # hexdump -C /usr/local/httpd-2.2/conf/httpd.conf.org | head -2
 00000000  53 65 72 76 65 72 52 6f  6f 74 20 22 2f 75 73 72  |ServerRoot "/usr|
 00000010  2f 6c 6f 63 61 6c 2f 68  74 74 70 64 2d 32 2e 32  |/local/httpd-2.2|


確かに先頭に「EF BB BF」が入っている。。
原因がわかったので設定ファイルのBOMを取り除いて無事終了。

スクリプトファイルも同じことが起きると動かなくなるような気がします。
今度確認してみることにします。

今日はこんな所で。