ツッコミの内容は検索サイトからの検索やサイトのレーティングに影響します。そのため問題があるキーワードを含むと思われるツッコミについては、当方の判断で削除することがあります。予めご了承ください。 なお、コメントspamと判断されたツッコミは自動的に消去されます。ご容赦ください。
【改訂新版】Samba [実践]入門 |
Linux教科書 LPICレベル3 300試験 |
マスタリング Nginx |
実践 パケット解析 第2版 |
改訂版 Sambaのすべて |
アンドキュメンテッド Microsoftネットワーク |
その他の書籍は だめだめ日記のおみせ@本店でどうぞ。
いまさらですが、2013年10月以降のFreeBSD 10以降で実装されたiconv(3)関数について確認してみました。
$ which iconv /usr/bin/iconv $ iconv -l | grep EUCJP-MS EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS
ということで、従来glibcもしくはパッチを適用したGNU libiconv以外で、はじめてEUCJP-MSが実装されたiconv関数になります。
ただ、Portsを最新化して確認してみましたが、最新のsamba43パッケージでも、GNU libiconvの依存関係が有効なままで、シンボル上も
root@fbsd10-1-1: # smbd -b | grep ICONV HAVE_ICONV_H HAVE_ICONV HAVE_ICONV_OPEN HAVE_LIBICONV HAVE_NATIVE_ICONV
のように、GNU libiconvも認識されています。
実際には、GNU libiconv由来のiconvコマンドでは、次のようにEUCJP-MSロケールが認識されていないにもかかわらず、
root@fbsd10-1-1: # /usr/local/bin/iconv -l | grep EUCJP-MS
後述する、文字コードとしてEUCJP-MSを指定したsmb.confを使用しても問題なく動作する(つまりEUCJP-MSロケールを認識している)ので、内蔵のiconv()関数が使用されているようです。
ただ、切り分けとしては気持ち悪いので、念のため、次のようにして、GNU libiconvを使用していない状態で確認してみました。
root@fbsd10-1-1: # smbd -b | grep ICONV HAVE_ICONV_H HAVE_ICONV HAVE_ICONV_OPEN HAVE_NATIVE_ICONV
のように、LIBICONVシンボルがなくなっており、/usr/local/bin/iconvもインストールされていないことを確認のうえ、次のような/usr/local/etc/smb4.confを作成して確認してみましたが、特に問題は発生せず、日本語ファイル名がEUC-JPの符号化形式で正しく保存されていました。
[global] dos charset = CP932 unix charset = EUCJP-MS [homes] writeable = yes browseable = no
ちなみに、iconv関数が認識できない文字コードを指定すると、log.smbdに次にようなログが出力されます。
[2016/01/01 09:49:54.241896, 0] ../lib/util/charset/convert_string.c:391(convert_string_talloc_handle) convert_string_talloc: Conversion not supported.
PortsからインストールしたSamba 4.3.3の場合は、最終的にsmbd自体の起動がアボートしました。
ためしに次のようなファイル名のファイルを作ってみましたが、
比較的文字化けしやすいと思われる、「てすとⅠⅰ.txt」と「てすと㈱¬」というファイル名について、Linux上に格納されているファイル名を次のようにしてダンプしてみると、
$ ls|tail -2|od -tx1 0000000 a4 c6 a4 b9 a4 c8 ad b5 8f f3 f3 2e 74 78 74 0a 0000020 a4 c6 a4 b9 a4 c8 ad ea a2 cc 2e 74 78 74 0a
に、おのおの適切に符号化されていることを確認できています。
網羅的な確認は行えていませんが、サンプリング的に確認した範囲では、結論としてFreeBSD 10以降であれば、本来的にSambaにGNU libiconv(libiconvパッケージ)は不要といえるように思います。
それにより、今まで面倒であった、FreeBSDのSambaでGNU libiconvを使用する場合にEUCJP-MSロケールなどに対応するための日本語パッチを適用するため、必ずPortsから作成する必要があるといったバッドノウハウも発展的に解消すると思われます。