===== !== !== Japanese-HOWTO.txt for Samba release 2.2.2 !== Contributor: TAKAHASHI Motonobu Date: 26 Nov 2001 Status: Current Samba 2.0.x/2.2.x で日本語を利用する方法 ======================================== この文書は、Samba で日本語のファイル名や共有名を利用する方法や注意点に ついて説明したものです。日本国内では、日本 Samba ユーザ会が提供してい る Samba 日本語版が広く用いられていますが、明示的に指定がない限り、以 下の説明はオリジナル版の Samba を対象として記述されています。 なお、UNIX自身が「日本語に対応」していなくても、Sambaで日本語のファイ ル名を扱うことは可能です。 日本語を利用するための設定 ========================== 日本語を利用するためには、client code page と coding system という二 つのパラメータを適切に設定することが必要です。このパラメータで、「日 本語の利用」と「日本語を表現するエンコード形式」を定義します。 client code page と coding system パラメータは、smb.confの先頭に書く 必要があります。これらのパラメータは smb.conf 自体のエンコード形式も決 定しているので、smb.conf の最初にこれらを設定していないと、日本語で記 述された設定が現れたときに、正しく文字を認識できなくなるからです。SWAT で smb.conf を設定している場合、これらは自動的に先頭で設定されますが、 手作業でsmb.conf を編集している場合は注意してください。 client code page は、必ず日本語を表す 932 に設定します。 coding system は日本語環境での利用を想定したパラメータで、Samba サーバ 上における日本語のファイル名のエンコード形式を決定します。 主に歴史的な経緯により日本語には互いに完全な互換性はない複数のエンコー ド形式が存在します。また Samba では日本語ファイル名を利用できない UNIX との親和性を高めるために独自のエンコード形式も提供しています。 これらのエンコード形式の中のどれを利用するのかを定義するのが coding system です。 coding system 選択の指針 ======================== coding system パラメータに何を選択するかは難しい問題です。 現在主に利用されているものだけでも、SJIS、EUC、CAP、HEX、UTF8(Samba 2.2 系列のみ)の5種類があり、どれも1長1短があります。 Windows 上で標準的に利用されているエンコード形式は、SJIS に相当する Shift_JIS という形式です(Windows NT 系列の場合、内部的には UCS-2 エン コーディングの Unicode 2.0 が用いられていますが、表面的には英語版 Windows NT で ASCII が利用されているように、日本語版 Windows では Shift_JIS が利用されています)。しかし、以下に記述するように Samba の設 定を Windows 側と同じ SJIS に設定するのが最良の選択とは限りません。 以下の説明を読んで、自分の使い方にあったものを選択してください。なお、 ここで説明する以外にも設定可能な値は存在しますが、利用されることはまず ありません。 coding system は次の判定順序に従って決定すると良いでしょう。各 coding system の値に関する詳細な説明は後述します。 1. 2 以降の条件が成立しない限り HEX に設定する HEX は [0-9a-f:] の ASCII 文字のみを使って日本語ファイル名を生成する ため、「安全」です。 2. Samba で共有するディレクトリを CAP や Netatalk でも共有する場合は、 CAP に設定する CAP や Netatalk は通常 CAP という形式でファイル名を書き込むため、 Samba の設定もそれに合わせる必要があります。 ただし、EUC-JP Patch の適用された Netatalk の場合、ファイル名が EUC-JP 形式で書き込まれるため、Samba 側も EUC に設定する必要がありま す。 3. UNIX 上でファイル名に日本語を利用する必要がある場合、 その文字コードが EUC-JP の場合は EUC 、Shift_JIS の場合は SJIS 、 UTF-8 の場合は UTF8 に設定する 通常、Linux、FreeBSD、Solaris、IRIX、Tru64 UNIX などでは EUC-JP 、 HP-UX や AIX などでは Shift_JIS が利用されています。商用 UNIX の多く は、利用するロケールを変更することで、どちらにでも対応できます。 ただし、フリーソフトウェアの場合は、UNIXの設定とは無関係に EUC-JP に しか対応していない場合が多いので、こうしたソフトウェアを中心に利用す る場合は、 EUC-JP の利用も考えられます。 すべての条件を満たす万能の設定はありません。これらの条件が衝突する場合 は、残念ながらいずれかの条件をあきらめる必要があります。 各 coding system の説明 ======================= 以下、各 coding system の長所、短所について詳細に解説します。 o HEX HEX 形式の場合、例えば Windows 上から 0x8ba4, 0x974c という 4 バイト の日本語文字列(「共有」を意味します)に拡張子「.txt」を加えたファイル 名を Samba 経由で書き込むと、UNIX 上でのファイル名は 「:8b:a4:97:4c.txt」(16バイトの ASCII 文字列)になります。これは Samba 独自の仕様です。 HEX 形式の最大の長所は、英語環境との親和性です。HEX 形式の場合、全て の日本語のファイル名が ASCII 文字だけを使った独自の形式で UNIX 上に 書き込まれますので、利用している UNIX が日本語に対応していない場合で も、ファイル名に文字化けが発生したり、ファイル名を扱うコマンドが異常 動作をしたりといった問題が発生することがなく非常に安全です。 一方、2バイトの文字を表すのに6バイトが使われますので、長いファイル名 を多用するとSamba 2.0系列のファイル名長の制限である128バイトを越えて しまう可能性があります。 また、UNIX 上で Windows から書き込んだ日本語ファイルのファイルを利用 するユーザにとっては、ファイル名が ASCII 文字の羅列にしか見えないた め、非常に不便です。 o CAP CAP 形式の場合、0x8ba4, 0x974c という 4 バイトの日本語文字列に拡張子 「.txt」を加えたファイル名を Samba 経由で設定すると、UNIX 上でのファ イル名は「:8b:a4:97L.txt」(14バイト)になります。これは CAP や Netatalk といった Macintosh 用のファイルサーバソフトウェアで用いられ ている仕様です。 HEX 形式との違いは 2バイトの日本語文字を1バイトずつ分割して扱った際 に、ASCII 文字として認識できるバイトについては「:xx」という形式を利 用せず、ASCII 文字のまま書き込む点です。 UNIX 上のファイル名として許容はされているものの、普通は利用しない文 字がファイル名として利用されてしまう可能性があります。ファイル名に 「\(0x5c)」が含まれる可能性があるため、扱いに注意が必要となります。 CAPの最大の長所は、CAP や Netatalk といった Macintosh 用のファイルサー バソフトウェアとのファイル名の互換性にあります。これらのソフトウェア では、通常ファイル名を CAP 形式で UNIX 上に書き込みますので、Samba と Netatalk とで同じUNIX上のディレクトリを公開する場合は、CAP にしな いと日本語のファイル名が文字化けしてしまいます。 ただし、最近では EUC でファイル名を書き込むパッチが適用された Netatalk がインストールされたシステム(日本独自の Vine Linux など)も ありますので、その場合は CAP ではなく EUC を選択する必要が生じます。 その他の CAP の長所や短所は、基本的に HEX と同等です。ただし HEX の 方がより安全ですので、特にCAPを利用する必然性がない限りは、HEX や、 その他の形式を利用した方がよいでしょう。 o EUC EUC 形式の場合、0x8ba4, 0x974c という 4 バイトの日本語文字列に拡張子 「.txt」を付加したファイル名を Samba 経由で設定すると、UNIX 上でのファ イル名は「0xb6a6, 0xcdad, ".txt"」(8バイト)のバイナリ文字列になりま す。EUC 形式は日本語 UNIX で広く用いられている EUC-JP と呼ばれる業界 標準を実装したものです(EUC には EUC-KR など日本語以外の言語に対応し ているものもありますが、Samba の EUC は、EUC-JP しか対応していません)。 EUC の最大の長所は、「日本語化された」 UNIX との親和性です。オープン ソースの Linux、FreeBSD や、Solaris、IRIX、Tru64 UNIX といった商用 UNIX では、日本語の文字コードとして通常 EUC-JP を利用していますので (ただし、Solaris では Shift_JIS、UTF-8 を利用することも可能です。 Tru64 UNIX でも Shift_JIS の利用が可能です)、EUC を選択しておけば Windows 上で作成した日本語のファイル名を UNIX からも参照できます。更 に多くのフリーソフトウェアの日本語対応も、主に EUC-JP に対応する形で 行なわれています。これらの UNIX 上で日本語ファイル名を利用する場合は、 EUC を選択するとよいでしょう。 ただし、利用しているロケールが EUC-JP に対応していない場合は、ファイ ル名に表示できない文字が含まれます。「\(0x5c)」のような UNIX 上で扱 いに注意する必要がある文字はありませんが、表示の際に文字化けが発生し たり、一部の UNIX 上のツールで問題が発生する可能性があります。 また、Windows との互換性も完全ではありません。Windows で利用可能な外 字について、 EUC では仕様上の問題で利用することができません。 従って、EUC で運用する場合は、互換性のない文字をファイル名に利用しな いように運用で回避する必要があります。 o SJIS SJIS 形式は、日本語 Windows で標準的に利用されている Shift_JIS を意 味します。0x8ba4, 0x974c という 4 バイトの日本語文字列に拡張子「.txt」 を付加したファイル名を Samba 経由で設定すると、UNIX 上でのファイル名 は Windows と同じ「0x8ba4, 0x974c, ".txt"」(8バイト)のバイナリ文字列 になります。 SJISの最大の長所は、EUC と逆で Windows との親和性になります。基本的 にエンコード形式などの変換がないので互換性は完全で、外字や機種依存文 字など、後述する日本語の利用に関して問題となる文字についても比較的安 心して利用できます。 ただし、EUC と同様、表示の際に文字化けが発生したり、一部の UNIX 上の ツールで問題が発生する可能性があります。特に EUC とは異なり、ファイ ル名に「\(0x5c)」が含まれる可能性があるため、扱いに注意が必要となり ます。 HP-UX、 AIX といった商用 UNIX では、日本語の文字コードとして通常 Shift_JIS を利用していますので(ただし、EUC-JP を利用することも可能で す)、SJIS を選択しておけば Windows 上で作成した日本語のファイル名を UNIX 上からも参照できます。ただし、EUC の説明で述べたように日本語対 応といわれているフリーソフトウェアの場合、実際には EUC-JP にしか対応 していない場合も多いため、そのフリーソフトウェアが Shift_JIS 環境で 動作するかどうかの確認をした方がよいでしょう。 これらの UNIX 上ですでに Shift_JIS で運用を行なっており、日本語ファ イル名を利用するユーザがいる場合は、基本的に SJIS を検討するとよいで しょう。 一方利用している UNIX が Shift_JIS に対応していない場合に、Windows との互換性を最優先にするなどの理由で SJIS を利用する場合は、極力 UNIX 側で Windows から書き込んだファイルにアクセスしないような運用に した方がよいでしょう。 o UTF8 UTF8 形式は、Unicode.org の定めた国際規格の UTF-8 エンコード形式です。 1*文字*を1〜3バイトで表しますが、日本語の場合は基本的に3バイトで表記 されます。Windows で利用されている Shift_JIS ではもともと1文字を2バ イトで表現しているため、基本的には Shift_JIS のバイト数の1.5倍のバイ ト数になります。例えば0x8ba4, 0x974c という 4バイト(2文字)の日本語文 字列に拡張子「.txt」を付加したファイル名を Samba 経由で設定すると、 UNIX 上でのファイル名は「0xe585, 0xb1e6, 0x9c89, ".txt"」(10バイト) のバイナリ文字列になります。 現状、日本語処理だけについていうと、日本語の文字コードとして UTF-8 を利用している場合に日本語ファイル名を扱うことができるという点以外に UTF8の長所は特にありません。 EUC と同様、利用しているロケールが UTF-8 に対応していない場合は、ファ イル名に表示できない文字が含まれますので、文字化けが発生したり、一部 の UNIX 上のツールで問題が発生する可能性があります。ファイル名に 「\(0x5c)」が含まれる可能性もあるため、扱いに注意が必要となります。 Solaris、 HP-UX といった商用 UNIX では、日本語の文字コードとして UTF-8 を利用することも可能です。ただし、EUC の説明で述べたように日本 語対応といわれているフリーソフトウェアの場合、実際には EUC-JP にしか 対応していない場合も多く、UTF-8 に対応しているものは Shift_JIS 以上 に少ないため、フリーソフトウェアの日本語対応機能を利用する場合は、注 意が必要です。 こうした理由もあって、現状 UTF-8 をファイルシステムの文字コードとし て利用している実績もほとんどありません。 なお、Samba とは直接関係しませんが、Shift_JIS と Unicode との変換テー ブルについても、 UNIX で一般的な iconv() 関数と、Windows また Java などプラットフォームによって微妙な違いがあるため利用に際して注意が必 要です。 このため、Samba としては、現状 UTF-8 を考慮する必要はないと考えられ ます。なお、Mac OS X ではファイル名のエンコード形式として UTF-8 を利 用していますが、文字集合としては Samba の UTF8 パラメータが想定して いる Unicode 2.0 ではなく、Unicode 3.1 を利用しているため、一部の文 字で不具合が発生してしまい、現状利用を勧められません。 coding system を変更する際の注意点 ================================== 一度設定した coding system を変更する場合、すでにファイルシステム 上に存在する日本語ファイル名のエンコード形式も一緒に変換する必要が あります。 最も簡単な方法は coding system の変更前に一度 Windows 上にファイル のバックアップを取得し、変更後に書き戻す方式です。 後述する Samba 日本語版では smbchartool というこの作業を支援する perl スクリプトを添付していますので、この作業を UNIX 上で簡単に行 なうことも可能になっています。 smb.conf 中に日本語を記述する方法およびその際の注意点 ===================================================== Samba 2.0.7 以降では、coding system と client code page パラメータを 適切に設定することで、smb.conf 中に日本語を記述することが可能になり ます。この際、日本語文字列は、coding system パラメータで設定した文字 コードで記述する必要があることに注意して下さい。 例えば、coding system = HEX の時に、0x8ba4, 0x974c という 4バイトの 日本語文字列からなる「共有」という意味のセクションを作成する場合は、 以下のように記述する必要があります。 ----- [global] client code page = 932 coding system = HEX ... [:8b:a4:97:4c] path = /tmp ----- 日本 Samba ユーザ会では、共有名以外にも - サーバの説明(server string) - コメント(comment パラメータ) - username map ファイル中での記述 などにおいて、日本語の使用が可能なことを確認しています。 その他文字列を値にとるほぼ全てのパラメータで日本語の利用が可能な筈で すが、あまり日本語が利用されないパラメータにおいては様々な問題が見つ かっている状態ですので、利用しないことを推奨します。 日本語利用の問題点と Samba 日本語版 =================================== 文字コードとして何を用いるかという問題とは別に、Samba の日本語処理に は幾つかの問題があります。最大の問題は、歴史的な理由で Shift_JIS で は、Windows が独自に実装している幾つかの文字について、Windows 9x 系 (Windows 95/98/Me)と Windows NT 系(Windows NT/2000/XP)とでは異なるコー ドを利用しているという点です。 このため、Samba では、これらの文字を同一とみなして処理を行なう必要が ありますが、現状の Samba ではこの処理が正しく実装されていないため、 例えば、Windows 9x で書き込んだファイル名が Windows NT で読めないな どの問題が発生することがあります。 UNIX で一般的に利用されている EUC-JP では外字を利用することができな いという問題もあります。インターネットの普及にともない外字の利用は減 少していますが、名前などに多くの漢字を扱うことが必要な一部の商用シス テムでは、外字の利用は依然必須です。 これらの文字は、Windows の独自実装ですが、業界標準として広く用いられ ているため、業務で日本語を扱う上では対応が必須です。 また、Windows NT 系では、特殊な漢字として扱われているローマ数字を表 す文字など(他に全角アルファベット、キリル文字、ギリシア文字が該当し ます)について、ASCII 文字と同様に大文字と小文字を同一視する処理を行 なっていますが、Windows 9x 系ではこの処理を行なっていません。これに ついても、現在の Samba は Windows NT/9x 系いずれにも合致しない実装に なっています。 現在の Samba には日本語の使用が考慮されていない実装箇所も多く、 Windows サーバと同様に日本語を利用していると、思わぬところでトラブル が発生することがあります。 Sambaユーザ会で開発している Samba日本語版では、これらの問題を解決す るために開発され、Samba 2.0.7-ja-2.2 以降のバージョンでは、ファイル 名、共有名を中心にこれらの問題点についての対処、対応が行なわれていま す。ただし、全面的にソースファイルに手を入れてしまっていることもあっ て、オリジナルの Samba にはこうした対処の一部しか反映されていません。 Samba 日本語版では、日本語処理に関して以下のような機能拡張を行なって います。 1. 「Shift_JIS の正規化」 Samba 2.0.7-ja-2.2 以降では、Windows 9x 系と Windows NT 系とで大文 字と小文字の同一視処理が異なっている点や、特定の文字に対応する文字 コードが違っているといった問題に対応しています。 2. EUC-JP における外字利用の実現 Samba 2.0.7-ja-2.2 以降では、エンコード形式として EUC-JP を利用す る際に外字を利用可能にするため、eucJP-open という業界標準をベース にした独自の拡張を行なっています。この拡張は、coding system とし て EUC3 という Samba 日本語版独自の値を設定することで利用可能です。 3. UTF-8 の実装 Samba 2.0.7-ja-2.0 以降では、coding system として UTF8 を指定する ことで、ファイル名を Unicode 2.0 ベースの UTF-8 で書き込むことが可 能になっています。この実装は、Samba 2.2系列に取り込まれています。 4. Mac OS X への対応 Samba 2.0.10-ja-1.0 以降では、coding system として UTF8-MAC を指 定することで、UTF-8 と Unicode 3.1 を利用した Mac OS X のファイル システムの実装に対応することが可能になっています。 現在、日本 Samba ユーザ会では、Samba 2.2 系列にこれらの修正を取り込 んだ Samba 2.2 系列の日本語版を開発しています。 なお、これらの成果は Samba 3.0 となる予定の HEAD ブランチに統合する 予定です。