Samba 3.0の全貌 改訂版[前編]
 〜 Samba 3.0のインストールと国際化の現状 〜

たかはしもとのぶ <monyo@home.monyo.com>
2004/5/19

国際化機能と文字コードサポート

国際化(日本語対応)機能の変更

 われわれ日本人にとって最も影響の大きい点として、日本語を含む文字コード関連パラメータの変更が挙げられます。Samba 2.2系列までは、いわゆる文字コード(符号化形式)の変換をSamba自身が行っていました。Samba 3.0系列では、Unicode(UCS-2、UTF-8)やCP850など一部の文字コードを除き、標準的なiconv()関数を利用するように実装が大幅に変更されています。

 Samba 2.2系列までは日本語を正しく扱うため、

[global]
  client code page = 932
  coding system = SJIS/EUC/CAP/HEXなど

という2つのパラメータを適切に設定する必要がありました。一方、Samba 3.0系列では従来のパラメータは廃止され、代わって新しく追加された、

[global]
  unix charset = CP932/EUCJP-MS/UTF-8など
  dos charset = CP932
  display charset = CP932/EUCJP-MS/UTF-8など

という3つのパラメータを使って文字コードを制御します。これはそれぞれ表2のような意味を持っています。

unix charset UNIX上のファイルシステムに用いられている文字コード(符号化形式)。ただし、Sambaが内部的に使用する文字コードやsmb.confをはじめとする各種設定ファイルの文字コードも同時に変更される
dos charset Windows側で利用されている文字コードを指定。日本語を利用する場合は、CP932または同等の文字コードを設定する
display charset SWATの画面に表示される文字コードを指定。日本語を使用する場合に指定する文字コードは、Sambaのバージョンによって異なる
表2 文字コード関連パラメータ

 各パラメータの値には、iconv()関数がサポートする各種ロケール名を指定してください()。

注:iconv()関数の実装により、サポートされているロケール名は異なります。本稿では、GNU libiconvおよびglibc付属のiconv()に前述した日本語対応パッチを適用したものを例に説明します。

 日本語ファイル名を用いる場合の典型的な設定は、以下のようになります。

[global]
  unix charset = EUCJP-MS/CP932/UTF-8 
  dos charset = CP932
  display charset = CP932 
日本語ファイル名を用いる際の典型的な設定
  それぞれSamba 2.2系列においてcoding systemパラメータの値がEUC(EUC3を含む)、SJIS、UTF8の場合に対応。
  Samba 3.0.2以降の場合は、unix charsetと同じ値に設定する必要がある。

CAPとHEXのサポート

 Samba 2.2系列まではcoding systemパラメータにCAPやHEXといった値があり、広く用いられています。しかし、これらはその性格上iconv()関数ではサポートされないため、Samba 3.0系列のVFS機能を使用してサポートするようにしました。

 CAPについては、

[global]
  unix charset    = CP932
  …

[cap_share1]
  vfs objects = cap 
Samba 3.0系列におけるCAP(およびHEX)のサポート
  vfs_capモジュールを有効にする。capは必ず小文字で指定すること。なおHEXモジュールがインストールされた環境でHEXを有効にするには、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に該当する機種依存文字を使っているファイル名があると、ファイルにアクセスできなくなるといった問題が発生する可能性があります。

   
Samba 2.2系列
Samba 3.0系列
 
文字
SJIS
EUC
EUC3
CP932
EUCJP-MS
  0xFA4A 0xADB5 0x8FF3FD 0x8754 0xADB5
  0xFA4B 0xADB6 0x8FF3FE 0x8755 0xADB6
  0xFA4C 0xADB7 0x8FF4A1 0x8756 0xADB7
  0xFA4D 0xADB8 0x8FF4A2 0x8757 0xADB8
  0xFA4E 0xADB9 0x8FF4A3 0x8758 0xADB9
  0xFA4F 0xADBA 0x8FF4A4 0x8759 0xADBA
  0xFA50 0xADBB 0x8FF4A5 0x875A 0xADBB
  0xFA51 0xADBC 0x8FF4A6 0x875B 0xADBC
  0xFA52 0xADBD 0x8FF4A7 0x875C 0xADBD
  0xFA53 0xADBE 0x8FF4A8 0x875D 0xADBE
  0xFA59 0xADE0 0x8FF4AC 0x8782 0xADE0
  0xFA5A 0xADE4 0x8FF4AD 0x8784 0xADE4
  0xFA58 0xADEA 0x8FF4AB 0x878A 0xADEA
  表3 問題が発生する文字の一覧
  出典:Samba 2 日本語版の日本語ファイル名の Samba 3 への移行方法(http://www.miraclelinux.com/technet/samba30/migration.html

 これらの文字を使用している場合は、移行に際してファイル名の移行作業を行う必要があります。移行方法の1つは、一度問題のファイルをWindows上にコピーし、Sambaのバージョンアップ後に、再度Samba上の共有に書き戻すというものです。

 サーバ側でファイル名の変換を行う場合は、Samba 3.0国際化プロジェクトが提供しているSMBCHARTOOL 3.0を用いるか、同等の機能を持つスクリプトを作成して、ファイル名の移行を行ってください。

 ・SMBCHARTOOL 3.0
  http://www.miraclelinux.com/technet/samba30/migration.html#04

 SMBCHARTOOL 3.0を用いる場合は、

$ smbfnconv -f euc3 -t eucjp-ms
SMBCHARTOOLの使用例
euc3 Samba 2.2系列におけるcoding systemパラメータの値
eucjp-ms Samba 3.0系列におけるunix charsetパラメータの値

のようにすることで、サーバ上のファイル名を移行可能です。

 SMBCHARTOOLの詳細な使用方法は、

 ・Samba 2 日本語版の日本語ファイル名の Samba 3 への移行方法
  http://www.miraclelinux.com/technet/samba30/migration.html

を参照してください。

SWATの国際化

 Samba 3.0系列では、Samba日本語版で実装されたSWATの国際化機能が統合されました。これにより、Samba 3.0.1以降では標準で画面1のようにSWAT画面の日本語表示が実現されています。

画面1 SWATの日本語画面

 日本語が適切に表示されるようにするためには、前述したとおりdisplay charsetパラメータの値を

  • Samba 3.0.1まではCP932
  • Samba 3.0.2以降はunix 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機能など)からの日本語利用も可能になります。

図1 Sambaで用いられる文字コード

3/3

Index
Samba 3.0の全貌 改訂版[前編]
 〜 Samba 3.0のインストールと国際化の現状 〜
  Page 1
Samba 3.0系列の新機能と変更点
  Page 2
Samba 3.0系列のインストール
 非公式パッケージからのインストール
 ソースからのインストール
  Page 3
国際化機能と文字コードサポート
 国際化(日本語対応)機能の変更
 CAPとHEXのサポート
 移行の際の注意点
 SWATの国際化
 通信路上でのUnicodeサポート

Linux Square全記事インデックス


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH