■国際化(日本語対応)機能の変更
われわれ日本人にとって最も影響の大きい点として、日本語を含む文字コード関連パラメータの変更が挙げられます。Samba 2.2系列までは、いわゆる文字コード(符号化形式)の変換をSamba自身が行っていました。Samba 3.0系列では、Unicode(UCS-2、UTF-8)やCP850など一部の文字コードを除き、標準的なiconv()関数を利用するように実装が大幅に変更されています。
Samba 2.2系列までは日本語を正しく扱うため、
[global] |
という2つのパラメータを適切に設定する必要がありました。一方、Samba 3.0系列では従来のパラメータは廃止され、代わって新しく追加された、
[global] |
という3つのパラメータを使って文字コードを制御します。これはそれぞれ表2のような意味を持っています。
unix charset | UNIX上のファイルシステムに用いられている文字コード(符号化形式)。ただし、Sambaが内部的に使用する文字コードやsmb.confをはじめとする各種設定ファイルの文字コードも同時に変更される |
dos charset | Windows側で利用されている文字コードを指定。日本語を利用する場合は、CP932または同等の文字コードを設定する |
display charset | SWATの画面に表示される文字コードを指定。日本語を使用する場合に指定する文字コードは、Sambaのバージョンによって異なる |
表2 文字コード関連パラメータ |
各パラメータの値には、iconv()関数がサポートする各種ロケール名を指定してください(注)。
注:iconv()関数の実装により、サポートされているロケール名は異なります。本稿では、GNU libiconvおよびglibc付属のiconv()に前述した日本語対応パッチを適用したものを例に説明します。
日本語ファイル名を用いる場合の典型的な設定は、以下のようになります。
[global] |
日本語ファイル名を用いる際の典型的な設定 |
(1) | それぞれSamba 2.2系列においてcoding systemパラメータの値がEUC(EUC3を含む)、SJIS、UTF8の場合に対応。 | |
(2) | Samba 3.0.2以降の場合は、unix charsetと同じ値に設定する必要がある。 |
■CAPとHEXのサポート
Samba 2.2系列まではcoding systemパラメータにCAPやHEXといった値があり、広く用いられています。しかし、これらはその性格上iconv()関数ではサポートされないため、Samba 3.0系列のVFS機能を使用してサポートするようにしました。
CAPについては、
[global] |
|||
Samba 3.0系列におけるCAP(およびHEX)のサポート
|
のように、unix charsetとしてCP932を指定したうえで共有単位にvfs_capというVFSモジュールを併用することにより実現します。
HEXについては、Samba本体に同梱されていないため、Samba 3.0国際化プロジェクトの成果物に同梱されているHEXモジュールを使用する必要があります。設定方法などは、CAPと同様です。
■移行の際の注意点
技術的な理由により、Samba 2.2系列とSamba 3.0系列とでは、一部の機種依存文字でマッピングされる位置が異なります(注)。
注:ただし、これはあくまでglibcやGNU libiconvに含まれるiconv()関数の実装についての話です。理論上は、すべてのiconv()関数が該当するとは限りません。
単純にSambaをバージョンアップした場合、表3に該当する機種依存文字を使っているファイル名があると、ファイルにアクセスできなくなるといった問題が発生する可能性があります。
これらの文字を使用している場合は、移行に際してファイル名の移行作業を行う必要があります。移行方法の1つは、一度問題のファイルをWindows上にコピーし、Sambaのバージョンアップ後に、再度Samba上の共有に書き戻すというものです。
サーバ側でファイル名の変換を行う場合は、Samba 3.0国際化プロジェクトが提供しているSMBCHARTOOL 3.0を用いるか、同等の機能を持つスクリプトを作成して、ファイル名の移行を行ってください。
SMBCHARTOOL 3.0を用いる場合は、
$ smbfnconv -f euc3 -t eucjp-ms |
||||||
SMBCHARTOOLの使用例
|
のようにすることで、サーバ上のファイル名を移行可能です。
SMBCHARTOOLの詳細な使用方法は、
を参照してください。
■SWATの国際化
Samba 3.0系列では、Samba日本語版で実装されたSWATの国際化機能が統合されました。これにより、Samba 3.0.1以降では標準で画面1のようにSWAT画面の日本語表示が実現されています。
日本語が適切に表示されるようにするためには、前述したとおりdisplay charsetパラメータの値を
に設定する必要があります。
Samba 3.0.2以降の変更は、Samba Teamがこの機能を十分に理解していないことが原因であり、筆者としてはバグだと考えています。また、本来この機能はWebブラウザが送出するAccept-Languageヘッダの値(のみ)を参照して、動的に表示する言語を変更するべきものでした。しかし、当時の筆者の誤解などもあり、現状はdisplay charsetパラメータを静的に設定する必要があるので、結果として中途半端な実装になっています。そのため、今後もバージョンアップに伴って設定方法を変更する可能性が高いと考えています。
この機能を使用したくない場合は、デフォルトでsmb.confと同じディレクトリにインストールされる*.msgファイルを削除してください。また、このファイルから生成されるlang_<言語名>.tdbファイル(日本語の場合はlang_ja.tdb)がある場合は(注)、それも削除してください。
注:このファイルは、デフォルトでは/usr/local/samba/var/locksディレクトリに生成されます。
なお、SWAT国際化とは直接関係ありませんが、Samba 3.0.3まではSWATのPASSWORD画面からのアカウント作成やパスワード変更などが正しく機能していませんでした。この点については、Samba 3.0.4で修正されていることを確認しています。
■通信路上でのUnicodeサポート
地味ながら大きな変更点として、ネットワーク上を流れる文字コードが、Windows 9x系列と同じシフトJISなどの各国の文字コードから、Windows NT系列と同じくUnicode(UCS-2)になったことが挙げられます(図1)。
Samba 2.2系列まではシフトJISで送信が行われていましたが、Windows 9x系とWindows NT系とで一部の文字について送信される文字コードが異なるという問題がありました。そのため、Samba日本語版では非常にトリッキーな手段を使ってSamba側で対応せざるを得ませんでした。
今回のUnicode化により、この問題は自然消滅するはずです。また、ASCII以外のファイル名はUnicodeでの通信のみで対応しているSMBクライアント(Mac OS XのSMB機能など)からの日本語利用も可能になります。
Copyright © ITmedia, Inc. All Rights Reserved.