smbmount/cifs を用いた UTF8EUC のファイル名変換

  • うちの鯖は未だにeucを使ってます。諸所の事情があって、、、ネットを色々探索しましたが、webdavSJIS<->EUC 変換は、ソースにパッチを当てる作業からやらんとどうも無理くさい。しかし、セキュリティアップデートを機敏に察知して、tar玉からコンパイルなんて面倒な作業私には無理。
  • てなわけで UTF8<->EUC のファイル名変換なわけですが、ファイルを書き換えずに動的にやるには、smbmount でUTF8を使っているディレクトリをマウントしてしまうのが一番お手軽そうだと言うことで採用。
  • smb.conf の文字コード設定は、unix charset = UTF-8, dos charset = CP932, display charset = CP932 で問題ない.ここで問題は dos charset だが、クライアント側がeucでもCP932(sjis)と設定して問題ないっぽい.
  • 以下が重要.cifs のマウントオプション.

mount -t cifs //192.168.x.x/utf8_dir /mnt/euc_dir -o username=hoge,codepage=utf8,iocharset=euc-jp,rw

  • 192.168.x.x はUTF8のディレクトリを持つ鯖のIP、このとき cifs の仕様によりnetbios名は使えない。フザケンナ。
  • 結局重要なのは、codepage=utf8,iocharset=euc-jpの設定。iocharsetだけの設定だと、全角チルダが文字化けする*1
  • ちょっと前のバージョンでは「codepageなんてオプションはありません」と怒られていたような気もするのだが、忘れよう。yumで勝手にバージョンが上がって動かなくなることはないように祈りつつ。
  • パーミッションもちゃんとしなくちゃいけないが、それはまた今度。

*1:下記の脚注に示すようにウチの環境でこの問題はeuc<->sjisの変換で発生していた、ただし上記設定自体は間違いではない