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で文字化けせしないシステムが構築可能です。
| ファイルサーバ | EUC | SJIS | UTF-8 | CAP |
|---|---|---|---|---|
| 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をサポートしていますから、ファイル名の制約に悩まされることもなくなります。
| ファイルサーバ | EUC | SJIS | UTF-8 | CAP |
|---|---|---|---|---|
| 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のダウンロードとインストールから。
|
$ tar zxvf libiconv-1.9.1.tar.gz $ zcat libiconv-1.9.1-ja-patch-1.diff.gz | patch -p0 |
|
$ cd libiconv-1.9.1 $ ./configure $ make ; make check $ sudo make install |
|
$ sudo ldconfig |
|
$ ./configure --with-libiconv=/usr/local $ make $ sudo make install |
|
[global] dos charset = CP932 unix charset = UTF-8 display charset = EUCJP |
| netatalk2 |
|
# apt-get install pam passwd pam-devel |
|
$ ./configure;make $ sudo make install |
|
./configure --with-bdb=/usr/local/BerkeleyDB.4.1 --with-libiconv=/usr/local --enable-redhat --with-flock-locks --with-pam --with-shadow --with-tcp-wrappers --with-did=cnid --with-ssl-dir=/usr/lib |
|
~ volcharset:UTF8 maccharset:SHIFT_JIS /home/kurihara/share "share" volcharset:UTF8 maccharset:SHIFT_JIS |
|
-unixcodepage UTF8 |
一見するとうまくいっているようですが、不具合も散見されます。MacOS Xからのアクセスは今のところ快調です。しかし、MacOS9からのアクセスでは、
| WebDAV |
|
$ ./configure --enable-dav --enable-dav-fs $ make $ sudo make install $ cd /etc/rc.d/rc3.d/ $ sudo ln -s /usr/local/apache2/bin/apachectl S99httpd |
Alias /DAV "/mnt/share/DAV"
DAVLockDB /usr/local/var/lock/DAVLock
DAVMinTimeout 600
<Directory "/mnt/share/DAV">
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes
DAV On
</Directory>
|
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でこれを抑制し、生データを出力するようにしなければなりません。
|
alias ls 'ls -vC --show-control-chars -F \!*|nkf -e' |