この文書では,Gfarm システムコールフックライブラリをプリロードした うえで Samba を起動して Windows から Gfarm ファイルにアクセスする ための設定方法を説明しています.
別の方法:
GfarmFS-FUSE + Samba
別の方法として,FUSE を使って Samba を利用する方法もあります.
しかし,フックライブラリを用いる方が,より設定/利用手順が簡単ですので,
こちらの方法をお勧めします.
/etc/gfarm-ldap/gfarm.schema の 'pathname' に関する部分が, 以下のようになっていることを確認します.以下のようになっていない場合は, 修正してLDAP サーバを再起動してください. Gfarm のバージョン 1.1.1 以前を使っていた(いる)場合は, 下記の設定になっていません.
attributetype ( 1.3.6.1.4.1.13122.2.1.2924.100.2.5 NAME 'pathname' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE) |
Linux 側ではファイル名の文字コードとして UTF-8 を使うようにし, それを Windows から見えるように設定します.
Samba 3 系のための設定
dos charset = CP932 unix charset = UTF-8 display charset = UTF-8 |
kernel change notify = no |
Gfarm ファイルシステムにアクセスするためのセクションを追加します.
セクション内で以下のパラメータを指定してください.
デフォルトの設定で Windows クライアントから Gfarm ファイルシステム にファイルを新規作成あるいはコピーすると,そのファイルの 実体が置かれるファイルシステムノードと同じアーキテクチャを もつ,実行ファイル(プログラム)として登録されてしまいます. ほとんどの場合,これは期待される動作と異なりますので, 実行不可能なファイルとして登録するために以下のパラメータを 指定します.
create mask = 0644 |
デフォルトの設定で,Windows クライアントから Gfarm ファイルシステム 上のファイルを読み書きすると,Gfarm がシステムコールフック 機能をサポートしていないシステムコールを Samba が呼び出します. これを防ぐために以下のパラメータを指定します.
oplocks = no level2 oplocks = no |
複数ユーザで,Gfarmファイルシステム全体を共有する場合に追加する セクションの例を以下に示します.
[gfarm-public] comment = Gfarm Public Stuff path = /gfarm public = yes writable = yes printable = no create mask = 0644 oplocks = no level2 oplocks = no |
RedHat Linux での例を用いて説明します.
smbd の起動処理において,以下の項目を追加・変更します.
RedHat Linux の場合,これはスクリプトファイル /etc/init.d/smb
の関数 start() で行われています.
smbd 機能の直前に,以下の行を追加します.
m=`ulimit -n` n=$(( $(gfhost -M | wc -l) + 50)) if [ -n "$m" -a X"$m" != X"unlimited" -a "$m" -lt $n ]; then ulimit -n $n fi |
smbd デーモンを起動している行の行の先頭に LD_PRELOAD 環境変数や LD_LIBRARY_PATH 環境変数の設定を追加します. 詳しい説明は,付属ドキュメントの README.hook.ja を参照してください.
RedHat Linux を例にとると,
daemon smbd $SMBDOPTIONS |
のところを
gfarm_prefix=/usr globus_location=/usr/grid globus_flavor=gcc32 LD_LIBRARY_PATH="$globus_location/lib" LD_PRELOAD="$globus_location/lib/libglobus_gssapi_gsi_$globus_flavor.so.0 $globus_location/lib/libssl_$globus_flavor.so.0 $gfarm_prefix/lib/libgfs_hook.so.0 /usr/lib/gfarm/libpthread-not-hidden.so /usr/lib/gfarm/libc-not-hidden.so" daemon smbd $SMBDOPTIONS |
とします.変数 gfarm_prefix,globus_location や globus_flavor の値は,実際に Gfarm や Globus をインストールしたパスや, Gfarm にリンクしている Globus の flavor 名に合わせて変更してください.
Globus 関係のパスを追加するためには,まず Globus の共有ライブラリを インストールしておく必要があるので,注意してください. ただし,バイナリ作成時に Globus をリンクしていなければ,Globus 関係のパスの追加は不要です.(RedHat Linux 向けバイナリ配布の場合は リンクしていますので,必要です.)
また,バイナリ作成時に Globus を動的リンクしていなければ, LD_LIBRARY_PATH の追加は不要です.(RedHat Linux 向けバイナリ配布の 場合は静的リンクしていますので,実際には省略できます.)
Linux 以外のOS では "*-not-hiddden.so" の指定は不要です.
#!/bin/sh (中略) start() { KIND="SMB" echo -n $"Starting $KIND services: " m=`ulimit -n` n=$(( $(gfhost -M | wc -l) + 50)) if [ -n "$m" -a X"$m" != X"unlimited" -a "$m" -lt $n ]; then ulimit -n $n fi gfarm_prefix=/usr globus_location=/usr/grid globus_flavor=gcc32 LD_LIBRARY_PATH="$globus_location/lib" LD_PRELOAD="$globus_location/lib/libglobus_gssapi_gsi_$globus_flavor.so.0 $globus_location/lib/libssl_$globus_flavor.so.0 $gfarm_prefix/lib/libgfs_hook.so.0 /usr/lib/gfarm/libpthread-not-hidden.so /usr/lib/gfarm/libc-not-hidden.so" daemon smbd $SMBOPTIONS RETVAL=$? echo KIND="NMB" echo -n $"Starting $KIND services: " daemon nmbd $NMBDOPTIONS RETVAL2=$? echo [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 return $RETVAL } (以下略) |
例えば RedHat Linux では以下を実行します.
# /etc/init.d/smb [start|restart] |
Samba での共有に Windows クライアントのネットワークドライブを 割りあてます.例えば以下の手順で共有フォルダが表示されます.