MIRACLE

メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報



Samba 国際化プロジェクト > Samba 2 日本語版の日本語ファイル名の Samba 3 への移行方法

Samba 2 日本語版の日本語ファイル名の Samba 3 への移行方法

目次

  1. smb.conf のパラメータ変更
  2. Samba 2 日本語版と Samba 3 での文字コード名の対応関係
  3. 機種依存文字の互換性
  4. SMBCHARTOOL のセットアップ
  5. Samba 2 日本語版で作成したファイルの Samba 3 への移行方法

1. smb.conf のパラメータ変更

Samba 3 では smb.conf での文字コード指定方法が変更になった事により、Samba 2 日本語版から移行に関しては、smb.conf の書き換えが必要になります。

次のパラメータの変更が必要です。

表1 smb.conf パラメータの違い
Samba 2 Samba 3
coding system unix charset
client code page dos charset
- display charset


各々のパラメータの意味は次の通りです。

表2 文字コード関連パラメータ
unix charset UNIX上のファイルシステムに用いられている文字
コード(符号化方式)を指定
dos charset Windows側で利用されている文字コードを指定
日本語を利用する場合は、「cp932」にする
display charset SWATの画面に表示される文字コードを指定
日本語を利用する場合は「cp932」にする


各パラメータで指定する値は、iconv() 関数で使用できる文字コード名(codeset名) が指定可能です。

ただし、日本語文字コードの場合、Windows の機種依存文字の有無および一部の JIS 文字の Unicode とのマッピングがマイクロソフト独自になっているものがあるため、 一般的な名称ではなく、次の文字コード名を指定する必要があります。

表3 Samba 3 で unix charset に指定可能な文字コード
シフトJIS符号化方式 CP932
日本語EUC符号化方式 eucJP-ms
UTF-8符号化方式 UTF-8

オープングループ/日本ベンダ協議会策定した iconv() 関数用の文字コード名(codeset名)。日本語EUC (euc-JP) の拡張で、ユーザー定義文字を含むマイクロソフト標準キャラクタセットの全文字を日本語EUC符号化方式に変換可能。

2. Samba 2 日本語版と Samba 3 での文字コード名の対応関係

Samba 2 日本語版で使用していた文字コード名と Samba 3 での文字コード名の対応 は次のようになります。cap, hex に関しては、iconv() による文字コード変換では なく vfsモジュールによる対応になります。

表4 文字コード名の対応関係
Samba2 Samba3
codingsystem unixcharset vfsモジュール
sjis cp932 -
euc - -
euc3 eucjp-ms -
utf8 utf-8 -
hex cp932 hexモジュール(予定)
cap cp932 capモジュール


Samba 3 での hex および cap は、unix charset で cp932 を指定し、次のパラメー タを追加指定します。

    vfs object = hex もしくは cap 

注意事項: hex, cap は小文字で記述する必要があります。

3. 機種依存文字の互換性

Windows の機種依存文字には、複数のコードポイントに重複して定義されている文字があります。

Windows のファイルシステムでは、それら重複符号文字に関して複数あるコードポイントのうち決まった 1 つのコードポイントを用いる事で、使用するコードポイントの異なった同じファイル名のファイルが作成されてしまう事を防いでいます。

Samba 2 日本語版や Samba 3 でも同様の処理が行われていますが、Samba 2 日本語版と Samba 3 では一部の重複符号文字に関して異なるコードポイントが使用されてる文字があり以下に示すように、Samba 3 への移行に関してはファイル名に使用されている重複符号文字の一部に関してコードポイントの置換が必要となります。

Samba 2 日本語版では、次の 13 文字に関して 表5 に示すように IBM拡張文字のコードポイントが用いられています。

表5 Samba 2 日本語版で使用するコードポイント
文字 sjis euc3 hex cap
ローマ数字1 0xFA4A 0x8FF3FD :fa:4a :faJ
ローマ数字2 0xFA4B 0x8FF3FE :fa:4b :faK
ローマ数字3 0xFA4C 0x8FF4A1 :fa:4c :faL
ローマ数字4 0xFA4D 0x8FF4A2 :fa:4d :faM
ローマ数字5 0xFA4E 0x8FF4A3 :fa:4e :faN
ローマ数字6 0xFA4F 0x8FF4A4 :fa:4f :faO
ローマ数字7 0xFA50 0x8FF4A5 :fa:50 :faP
ローマ数字8 0xFA51 0x8FF4A6 :fa:51 :faQ
ローマ数字9 0xFA52 0x8FF4A7 :fa:52 :faR
ローマ数字10 0xFA53 0x8FF4A8 :fa:53 :faS
No. 0xFA59 0x8FF4AC :fa:59 :faY
Tel 0xFA5A 0x8FF4AD :fa:5a :faZ
(株) 0xFA58 0x8FF4AB :fa:58 :faX

Samba 3 では、文字コード変換に iconv() 関数を使用している為、これら 13 文字は、表6 に示すように NEC特殊文字のコードポイントを用いるようになります。

表6 Samba 3 で使用するコードポイント
文字 cp932 eucjp-ms cp932+hex cp932+cap
ローマ数字1 0x8754 0xADB5 :87:54 :87T
ローマ数字2 0x8755 0xADB6 :87:55 :87U
ローマ数字3 0x8756 0xADB7 :87:56 :87V
ローマ数字4 0x8757 0xADB8 :87:57 :87W
ローマ数字5 0x8758 0xADB9 :87:58 :87X
ローマ数字6 0x8759 0xADBA :87:59 :87Y
ローマ数字7 0x875A 0xADBB :87:5a :87Z
ローマ数字8 0x875B 0xADBC :87:5b :87[
ローマ数字9 0x875C 0xADBD :87:5c :87\
ローマ数字10 0x875D 0xADBE :87:5d :87]
No. 0x8782 0xADE0 :87:82 :87:82
Tel 0x8784 0xADE4 :87:84 :87:84
(株) 0x878A 0xADEA :87:8a :87:8a


この為、Samba 2 日本語版で作成された日本語ファイル名で、上記 13 文字を含むものを Samba 3 で読み書きすると、読み込んだ時のファイル名とは異なるコードポイントを用いたファイル名でファイルが作成されてしまう事になります。

Linux 等では、それぞれのファイル名を別のものとして扱いますが、Windows とSamba は同一のものとして扱おうとするために、ファイルに正しくアクセス出来ないという問題が生じます。

このような問題がある為、Samba 2 日本語版で運用していた共有ディレクトリをSamba 3 で引き継いで利用する際には文字コードの変更が無い場合でも、上記13文字のコードポイントの置換が必要となります。

4. SMBCHARTOOL のセットアップ

smbfnconv の文字コード変換に Text::Iconv モジュールを使用するようにし、なおかつ Samba 2 日本語版 / Samba3 両方のファイル名文字コードを扱えるようにしました。

iconv コマンド同様に -f, -t オプションで任意の組み合わせで指定可能です。

-t に cap/hex を指定した場合は、デフォルトで Samba 3 用のファイル名に変換するので、Samba 2 日本語版用の cap/hex へ変換する場合は、-2 オプションを追加指定するようにしてあります。

インストールに必要なもの

SMBCHARTOOL インストール方法

  1. jcode.pl を /usr/lib/perl5/site_perl などにコピー

  2. libiconv + cp932/eucJP-ms パッチをインストール

  3. Text::Iconv モジュールをインストール

    任意のディレクトリにインストールした libiconv を Text::Iconv モ ジュールにリンクする方法

    libiconv を /opt/libiconv-1.8 にインストールしてある場合

      $ perl Makefile.PL CCFLAGS=-I/opt/libiconv-1.8/include \
      LDDLFLAGS="-shared -Wl,-rpath,/opt/libiconv-1.8/lib \
      -L/opt/libiconv-1.8/lib -liconv"
  4. SMBCHARTOOL Ver.2.3a の展開

      $ tar zxvf smbchartool-2.3a.tar.gz
  5. SMBCHARTOOL へのパッチ適用

      $ zcat smbchartool-2.3a_3.0a.diff.gz | patch -p0
      $ cd smbchartool
      
    ダウンロード
       smbchartool-2.3a_3.0a.diff.gz (2005年1月11日)
     SMBCHARTOOL 変更履歴
     3.0→3.0a: -p オプション指定時に作成されるサブディレクトリのオーナーが元のディレクトリのオーナーと同じになるように修正。

  6. smbfnconv などの Perl スクリプトの perl コマンドのパス指定、INSTALL.sh のインストール先を環境に合わせて修正

  7. スーパーユーザーになって INSTALL.sh 実行

5. Samba 2 日本語版で作成したファイルの Samba 3 への移行方法

ここでは、Samba 2 日本語版で使用していた文字コード別に Samba 3 移行方法を説明します。

移行に際しては、smb.conf の文字コード関連パラメータの書き換えと、ファイル名の変換が必要となります。

ファイル名の変換は、SMBCHARTOOL Ver.3.0 以降の smbfnconv コマンドを使い、Samba 2 日本語版のファイル名を別ディレクトリに残しつつ、Samba 3 用のファイル名はそちらへのハードリンクとして作成します。

ハードリンクを使用する為、別パーティションへは Samba 3 用のファイル名を作成する事が出来ませんがディスク消費を抑える事が出来ます。また、万が一、Samba 3への移行で問題が生じた場合にも速やかに、以前の状態に戻す事が可能です。

coding system = sjis

Samba 3 のシフトJIS符号化方式 (cp932) への移行

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = cp932(※1)

(※1)ファイル名文字コード指定

ファイル名の変換手順
        $ mv 共有ディレクトリ 共有ディレクトリ.samba2
        $ mkdir 共有ディレクトリ
        $ cd 共有ディレクトリ.samba2
        $ smbfnconv -f sjis(※2) -t cp932(※3) -p ../共有ディレクトリ .

(※2)Samba 2 文字コード指定
(※3)Samba 3 文字コード指定

coding system = euc

Samba 3 の日本語EUC符号化方式 (eucJP-ms) への移行

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = eucjp-ms
ファイル名の変換手順
        $ mv 共有ディレクトリ 共有ディレクトリ.samba2
        $ mkdir 共有ディレクトリ
        $ cd 共有ディレクトリ.samba2
        $ smbfnconv -f euc -t eucjp-ms -p ../共有ディレクトリ .

coding system = euc3

Samba 3 の日本語EUC符号化方式 (eucJP-ms) への移行

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = eucjp-ms 
ファイル名の変換手順
        $ mv 共有ディレクトリ 共有ディレクトリ.samba2
        $ mkdir 共有ディレクトリ
        $ cd 共有ディレクトリ.samba2
        $ smbfnconv -f euc3 -t eucjp-ms -p ../共有ディレクトリ .

coding system = utf8

Samba 3 の UTF-8 符号化方式への移行

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = utf-8
ファイル名の変換手順

Samba 2 日本語版で作成されたファイル名をそのまま利用可能です。

coding system = hex

Samba 3 の hex (cp932+hexモジュール) への移行

hex は文字コード指定 (unix charset) ではなく、hex モジュールを組み込む形で実現します。unix charset は cp932 を指定する必要があります。

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = cp932
        vfs object = hex

注意事項: hex は小文字で記述する必要があります。

ファイル名の変換手順
        $ mv 共有ディレクトリ 共有ディレクトリ.samba2
        $ mkdir 共有ディレクトリ
        $ cd 共有ディレクトリ.samba2
        $ smbfnconv -f hex -t hex -p ../共有ディレクトリ .

coding system = cap

Samba 3 の cap (cp932+capモジュール) への移行

cap は文字コード指定 (unix charset) ではなく、cap モジュールを組み込む形で実現します。unix charset は cp932 を指定する必要があります。

smb.conf 設定
        dos charset = cp932
        display charset = cp932
        unix charset = cp932
        vfs object = cap

注意事項: cap は小文字で記述する必要があります。

ファイル名の変換手順
        $ mv 共有ディレクトリ 共有ディレクトリ.samba2
        $ mkdir 共有ディレクトリ
        $ cd 共有ディレクトリ.samba2
        $ smbfnconv -f cap -t cap -p ../共有ディレクトリ .


会社情報 採用情報 個人情報保護方針 情報セキュリティ基本方針 商標等取り扱い事項 English
Copyright(c)2000-2015 MIRACLE LINUX CORPORATION. All Rights Reserved.