|
日本 Samba ユーザ会 (Samba Users Group Japan)
Samba の過去・現在、そして未来
1999-12-23 更新
1999年12月18日(土)、パシフィコ横浜にて開催された Linux Conference '99 において、Samba Term の Jeremy Allison 氏と日本 Samba ユーザ会および有志の方々との会合が開かれました。 その中で、Jeremy 氏は Samba の過去・現在、そして将来の姿 (構想) を語ってくださいました。 以下はそのときに紹介された機能や図などをまとめたものです。 前日のロビーで展開された議論と、会合後の昼食での話も含まれています。 ご了承ください。 目次
歴史簡単に Samba の歴史について触れられました。 Jeremy 氏の記憶違いがあったため、適宜修正してあります。 また、あまり厳密に調べていないので間違いが残されている可能性があります。 ご了承下さい。
CVS ツリーSamba のソースコードは CVS によって維持されています。 開発は目的ごとに「ブランチ」に分離され行われています。
次期バージョン
以下は、Jeremy 氏の談です。
内部文字コード現在の Samba (2.0.6) は、ファイル名や NetBIOS 名などの文字列を「pstring」という型の変数に格納しており、それらの文字コードは「client code page」に指定された DOS のコードページ (以下、dos cp) に従ったコードになっています。 これら文字列をクライアントとやりとりする場合、旧来の SMB であればそのまま使い、UNICODE を要求する SMB であれば適宜 dos cp と UNICODE 間で変換を行っています。 これらの文字列を UNIX のシステムコールなどとやり取りする場合は、「character set」もしくは「coding system」(日本語対応) の設定に従って、dos cp との間で変換を行っています。 Samba 2.0.5 以前は、NetBIOS 名やコメントでは ASCII 文字しか考慮されていません。 2.0.6 でもまだ不完全で、SAMBA_2_0 ブランチの最新版にパッチをあてることで大体動作するそうです。 内部と外部の文字コードの扱い (現在) Jeremy 氏は将来の I18N / M17N 対応のため、内部コードを UCS2 に切り換える作業を行っているとのことです。 以下の図のように、現在は UCS2 (16bit) による実装が進められています。 Jeremy 氏によると、UNICODE のバージョンに依存するような部分は「大文字・小文字の扱いくらい」とのことで、将来の改変された UNICODE スペックへの移行も問題ないだろうとのことでした。 内部と外部の文字コードの扱い (将来) この図だと、ファイルの中身の文字コードも変換されるようにも見えるかもしれませんが、過去もこれからもそのような実装はされません。 対象はファイル名や NetBIOS 名などです。 ユーザ名、グループ名も含まれるでしょう。 smb.conf の文字コードsmb.conf の文字コードについて、Jeremy 氏に尋ねました。 (これは 17 日に出た話です) 現状 Samba で 1byte の文字(いわゆる半角カタカナ)を Unicode にマッピングするロジックがないことを指摘したのですが、内部を UCS-2 にすれば関係なくなるでしょ、とかわされてしまいました。 本当はもうすこし追求しようかとも思ったのですが、英語力のなさと、結局日本語特有の問題は、日本で解決してと言われそうなのが目に見えていたので断念しました。 「Samba の内部を Unicode にするとしても、smb.conf 自体を Unicode にはしないですよね」と聞いたら、もちろんそうだと言う話。 しかし、Samba 自体を i18n すると、共有名などに ローカル文字セットの文字や、Unicode 文字列を使おうとする可能性を考えると、どこかで smb.conf 自体の文字コードを知らないと、smb.conf の解析が出来ないというジレンマに陥るという話をしました。 結局、smb.conf の先頭行で、smb.conf 自体の文字コードを指定するしかないかなぁとのことでした。 これはいわゆる「鶏と卵」問題ですね。 なにかよい案はないものでしょうか。 各種テーブルの db 化smbpasswd ファイルや WINS データベースを db で管理する実装が行われているそうです。 使用する実装は GNU の dbm (gdbm) でも、Berkelay DB でもなく、独自の「tdb」を使うことが先日アナウンスされました。 Subject: new database code From: Andrew Tridgell <tridge@linuxcare.com> Date: Tue, 21 Dec 1999 20:57:28 +1100 I've just committed the first of the big changes in the head (Samba 3.0) branch to do with the new database code. For those who don't remember, the database code will be replacing a bunch of shared data structures and lock files that have been used in Samba previously. This should greatly simplify the internal structures in Samba and also has some external benefits. what has been done in CVS head so far is: - new tdb/tdb.c database module. I've written this to be like gdbm but to use shared memory and allow multiple simultaneous writers and locking. It also includes a test suite and a database tool - changed the existing connection databases (what was in STATUS..LCK and sharename.LCK) to use a single tdb database instead - changd all the existing share mode and oplock code that used sysv,mmap or lock files to instead use a tdb database. A nice side effect is that the storage for this stuff now takes up much less space and auto-expands as needed. - modified smbstatus and swat to know about the new databases. there are still several more places in Samba that will be converted to use tdb databases, especially the WINS code. Expect some more commits soon. Cheers, Tridge 独自仕様の WINS 複製実装WINS データベースの複製プロトコルは一切公開されていません。 現在の Samba には WINS 複製の実装はありません。 プロトコルをダンプしてハックすることも可能だろうと Jeremy 氏はおっしゃっていましたが、独自複製プロトコルの実装を行う計画があるそうです。 独自仕様の BDC 実装将来の BDC 実装の計画について伺ったところ、以下のような回答を頂きました。
VFS (Virtual File System)Linux の VFS の考え方と基本的には同じです。 VFS レイヤによってファイルの I/O 先を抽象化することにより、あらゆるストレージをファイル・システムとして利用することを可能とします。 VFS は、Samba 3.0 で実装される予定だそうです。 SAMBA_TNG ブランチの Samba には実験的な実装が既に完了しています。 以下に VFS の実際の利用例を示します。 Oracle による高速データ I/O を実現する VFS モジュールデータベース・システムは、データ I/O に特化した実装を持ちます。 また、OS が用意する遅いファイル I/O システムコールを介さずに、直接(?)、独自の I/O ルーチンを用いてストレージ・デバイスにアクセスするため、非常に高速です。 共有で用いる VFS モジュールを指定 (smb.conf) VFS を介したデータ I/O のイメージ vfs パラメータで指定された VFS モジュールは dlopen(2) によってロードされ、共有に対するあらゆるファイル・アクセスに利用されます。 VFS モジュールには、システムコールに似た仕様と名前を持ち、データの格納先をラッピングするインタフェース関数が用意されます。 ファイル I/O のログを作成する VFS モジュール通常のファイル I/O のほかに、ロギング (logging) を行うような VFS モジュールを作成することが可能です。 たとえば、書き込まれるデータをすべて CD-R に記録するような VFS モジュールが考えられ、政府機関などでデータ改ざん防止のために利用することが考えられるだろう、とのことでした。 そのほかの VFS モジュールLDAP をストレージとするモジュール、課金計算を行うモジュールなど、アイデア次第。 winbind デーモンNIS や NIS+ ようなネームサービスを提供するデーモンです。 ただし、アカウント情報のみ (passwd と group) に限られているようです。 winbind は、Windows (あるいは Samba) の SAM のアカウント情報にアクセスし、UNIX ユーザのアカウントを提供することを可能とします。 これを用いれば、UNIX 上にユーザ登録する必要がなくなるのです。 UNIX の多くは、passwd, group といったデータベースの参照先を切り換える実装を持っています。 /etc/nsswitch.conf ファイルで設定する方法が一般的のようです。 参照先の選択肢としては、files, nis, nisplus などが選択できますが、それに「winbind」を加えるという計画だということでした。 これを実現するには、標準ライブラリ (libc) の対応も必須です。 passwd, group データベースとして winbind を使う (nsswitch.conf) このように記述することで、たとえば getpwnam(3) 関数を呼ぶと、winbind がバインドしている SAM からユーザ情報を得ることができるでしょう。 winbind はただ SAM をアクセスするだけでなく、UNIX と Windows の違いを翻訳する役目も負うのではないかと思われます。 カーネルの oplock サポートLinux カーネルへの oplock サポートを Linus 氏に提案したところ「やってもいいよ」と言われたそうです。 しかし、「ただ自分はコードを書きたくないから、作ってね」とも。 カーネルハッカーの皆さん、書いてみませんか? Jeremy 氏は Solaris や HP といった商用 UNIX でのサポートについても語ってくださったようなのですが、私の英語力がたりないため、聞き取れませんでした。 申し訳ありません。 現在では SGI の IRIX (6.5.2f 以降?) だけが、カーネルで oplock をサポートしています。 Samba 2.0.x は、これに対応しています。 「oplock」とは、SMB クライアントがサーバ上のファイルをロック (oplock) することで、クライアント側でファイルへの読み書きをキャッシュすることができる機能です。 あるクライアントによって oplock 済みのファイルに対し、別のクライアントからのアクセス要求が来ると、SMB サーバは、そのクライアントのアクセスをいったんブロック (一時停止) する一方、oplock を持つクライアントには oplock を解除 (oplock break) するように要求します。 oplock break 要求を受け取ったクライアントは、必要ならキャッシュされている未書き込みのデータをフラッシュし、oplock を解除します。 oplock が解除されると、ブロックされていた別のクライアントがアクセス可能になります。 Samba はバージョン 1.9.18 から oplock をサポートし、大幅な性能向上を得ることができました。 しかし当時は、oplock の機能を持つ UNIX カーネルは存在していなかったため、Samba の oplock 機能は Samba の中に閉じていました。 つまり、Samba のクライアントが UNIX 上のファイルを oplock していたとしても、UNIX 上の別のプロセスからはそれを知ることも、アクセスをブロックされることもないのです。 このため、「UNIX 上でファイルの内容を書き換えたが、Windows から見ると書き換わっていない!」(あるいは逆) といった現象が見られます。 つまり、UNIX カーネルの oplock サポートなしでは、UNIX と Windows の両方からアクセスする場合は「oplocks = no」にするしかないのです。 パフォーマンス18日の会合後の昼食中に Samba のパフォーマンスについて、以下のような話を頂きました。 Q.Samba のパフォーマンスが Windows NT と良い/悪いという議論があるが、 どちらが正しいと言えるものでしょうか? A.Samba のパフォーマンスの限界は、主に TCP スタックの性能によって 決まる。 SGI では 64 台のクライアントと 1 台のサーバを 2Gb の スイッチで接続して試験を行なった結果、そういう結論に達した。 現在、もっとも優れた TCP スタックを搭載した UNIX (like) OS は Solaris (SPARC 版、Intel 版とも) である。ただ Solaris は、ディスク アクセス性能が低い。 そのほかQ.kanji.c 中の WIN95_COMPATIBILITY フラグはなんのためにあるのでしょうか? A.半角と全角を区別するか? -> 今はデフォルト区別する。 MS がそうだから。 Samba は互換性のために MS のバグも含めて忠実に再現しないといけない。 そうでないと、Samba の側が Windows と仕様が違うと言われてしまう。 開発者・貢献者を募集!Samba Team そして Jeremy 氏による Samba の将来の姿を語っていただきました。 非常に野心的かつ実用的な機能が多く、新 Samba が非常に楽しみです。 しかし、これらの中には実際に作業が進行中のものもありますが、「計画あるいは構想だけ」のものもあります。 このすばらしいアイデアを実現するためにも、「どんどん開発に参加して欲しい」ということをしきりに Jeremy 氏は強調していました。 特に I18N / M17N に関しては、「日本の開発者の貢献に期待したい」ともおっしゃっていたように思います。
Copyright © 1999-2025 日本 Samba ユーザー会 (Samba-JP)
2011-12-19 01:17:44 JST 更新 |