2004年5月16日記

究極のファイルサーバ


はじめに

従来、WindowsとMacintosh(ClassicとMacOS X)が混在する環境で利用できるファイルサーバはありませんでした。WindowsからはSambaで、Macintoshからはnetatalkでアクセスするのが一般的ですが、WebDAVによるアクセスも考慮したいところです。 以下の表は、各ファイルサーバが扱える日本語エンコーディングをまとめたものです。表を見てみるとわかる通り、すべてのサーバで共通に使える日本語エンコーディングは存在しません。

WebDAVを考慮しないなら、EUCを選択するとSamba2とnetatalk1.x(EUC)を使用すればWindowsとMacintoshから日本語ファイルに文字化けせずにアクセスできるシステムを構築できます。CAPを選択するとSamba2とnetatalk1.xで同様に文字化けせしないシステムが構築可能です。しかし、文字化けはしないものの、MacOS Xから利用しようとすると、ファイル名の長さの制約から扱えないファイルがでてきます。

Macintoshを考慮しないなら、UTF-8を選択すればSamba2とWebDAVで文字化けせしないシステムが構築可能です。

ファイルサーバEUCSJISUTF-8CAP
Linux File Name
Samba2
netatalk1.x×××
netatalk1.x(with EUC patch)×××
Apache mod_dav×××

ところが、Samba3が公開され、さらに2004年になってβ版ながらnetatalk2がリリースされるようになり、状況は好転しました。Samba3とnetatalk2で、WindowsとMacintosh(ClassicとMacOS X)とWebDAVで文字化けもせずファイル名の長さの制約にも引っかからない究極のファイルサーバの構築が可能になりました。Samba3とnetatalk2で、先ほどの表は次のように変わります。Linux側のファイルシステムのエンコーディングをUTF-8にすることにより、すべてのファイルサーバで文字化けせずに日本語ファイル名をアクセスできます。また、netatalk2はMacOS Xのファイルシェアリングプロトコルであるafp3をサポートしていますから、ファイル名の制約に悩まされることもなくなります。

ファイルサーバEUCSJISUTF-8CAP
Linux File Name
Samba3
netatalk2××
Apache mod_dav×××

WebDAVについても、従来のApache1.3ではDAV用モジュールのmod_davと日本語文字化けを解消するモジュールmod_encodingを入れる必要がありましたが、DAV用モジュールがあらかじめ組み込まれているなApache2を使用することにします。エンコーディングをUTF-8にするので、mod_encodingは不要です。

本稿は、玄箱にSamba3, netatalk2, Apache2をインストールし、究極のファイルサーバを構築した際のメモです。

Samba3

libiconv(汎用の文字コード変換ライブラリ)を利用するようにしてビルドします。まずは、libiconvのダウンロードとインストールから。

netatalk2

一見するとうまくいっているようですが、不具合も散見されます。MacOS Xからのアクセスは今のところ快調です。しかし、MacOS9からのアクセスでは、

といったところで、今のところMacOS9からのアクセスでは使い物になりません。netatalk2自体が悪いのかiconvが悪いのかの見極めがつかないのが苦しいところ。

WebDAV

SambaとDAVでLock機構が別々のため、ファイルの排他制御がされません。そのため、SambaからとDAVから同時に同名のファイルを書くと、ファイルが壊れるという問題があるようです。(「玄箱をハックしよう」の掲示板からの情報)

Linux tcshの設定

以上でWindows, MacOS Classic, MacOS X, WebDAVから文字化けせずに日本語ファイル名のファイルにアクセスできる環境が整いました。しかし、telnet等でログインし、Linuxローカルでlsでファイル名を見ると文字化けしていることがわかると思います。これでは精神衛生上よくないので、shellから見た時の文字化けを解消しておきましょう。

今回のファイルサーバ構築ではLinuxでのファイル名をUTF-8で記述するようにしました。Vine Linuxでは、EUCを前提にしていますから、shellからlsでファイル一覧を見ると、文字化けしてしまいます。そこで、lsの出力をEUCに変換してやる必要があります。lsの出力はファイル名の記述はUFT-8ですから、UTF-8からEUCに変換するフィルタが必要になります。これを実現するのがnkf2.0です。Vine Linuxでapt-getできるnkfは1.xであり、これはUTF-8には対応していませんので、ソースを入手してインストールします。lsとnkfをパイプでつなげて'ls|nkf'とすれば、ファイル名がEUCで出力されるのですが、lsはデフォルトでは非アスキー文字を化けないようにする処理が入っていますので、--show-control-charsでこれを抑制し、生データを出力するようにしなければなりません。


   前(GUI設定ツールの導入) 目次 次