[GFARM LOGO] 文書集 > ユーザーズマニュアル > samba/hook

Samba を使って gfarm ファイルシステムにアクセスする -- システムコールフックを用いる方法

English | 日本語

1. 概要

この文書では,Gfarm システムコールフックライブラリをプリロードした うえで Samba を起動して Windows から Gfarm ファイルにアクセスする ための設定方法を説明しています.

別の方法: GfarmFS-FUSE + Samba
別の方法として,FUSE を使って Samba を利用する方法もあります. しかし,フックライブラリを用いる方が,より設定/利用手順が簡単ですので, こちらの方法をお勧めします.

2. 利用環境の前提条件

関連ソフトウェア

3. LDAP サーバの設定

3.1 日本語ファイル名のための設定

/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)
# 修正する場合は,この 3行のうち,下2行を変更します.

4. Samba サーバの設定

4.1 smb.conf の変更

4.1.1 [global] セクションへの追加項目

4.1.1.1 日本語ファイル名のための設定

Linux 側ではファイル名の文字コードとして UTF-8 を使うようにし, それを Windows から見えるように設定します.

Samba 3 系のための設定
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

4.1.1.2 kernel change notify を無効にする (Samba 3 系の場合)
Gfarm のシステムコールフックライブラリが現在サポートしていない,fcntl(2) システムコールの F_NOTIFY 機能を,samba が利用しないようにします.

kernel change notify = no
この設定をしないと,Windows クライアントと Samba との接続が切れることがあります(Samba 3.0.10 と 3.0.20 で確認). この設定にすると,更新されたファイルの状態の表示がすぐに更新されなくなります.
Samba 2 系では,この設定を使うことができないので,この問題を回避できません.

4.1.2 Gfarm ファイルの共有を定義するセクションを追加

Gfarm ファイルシステムにアクセスするためのセクションを追加します.

4.1.2.1 Gfarm ファイルシステム用パラメータ

セクション内で以下のパラメータを指定してください.

デフォルトの設定で Windows クライアントから Gfarm ファイルシステム にファイルを新規作成あるいはコピーすると,そのファイルの 実体が置かれるファイルシステムノードと同じアーキテクチャを もつ,実行ファイル(プログラム)として登録されてしまいます. ほとんどの場合,これは期待される動作と異なりますので, 実行不可能なファイルとして登録するために以下のパラメータを 指定します.
create mask = 0644

デフォルトの設定で,Windows クライアントから Gfarm ファイルシステム 上のファイルを読み書きすると,Gfarm がシステムコールフック 機能をサポートしていないシステムコールを Samba が呼び出します. これを防ぐために以下のパラメータを指定します.
oplocks = no 
level2 oplocks = no

4.1.2.2 例

複数ユーザで,Gfarmファイルシステム全体を共有する場合に追加する セクションの例を以下に示します.

[gfarm-public]
   comment = Gfarm Public Stuff
   path = /gfarm
   public = yes
   writable = yes
   printable = no
   create mask = 0644
   oplocks = no
   level2 oplocks = no

5. Samba の起動方法

5.1 起動スクリプトの変更

RedHat Linux での例を用いて説明します.

smbd の起動処理において,以下の項目を追加・変更します.
RedHat Linux の場合,これはスクリプトファイル /etc/init.d/smb の関数 start() で行われています.

5.1.1 ファイル記述子数制限の拡大処理の追加

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

5.1.2 smbd 起動行に LD_PRELOAD 環境変数の設定を追加

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" の指定は不要です.

5.2 追加後の起動スクリプト例

#!/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
}	

(以下略)

5.3 Samba を起動または再起動

例えば RedHat Linux では以下を実行します.

# /etc/init.d/smb [start|restart] 

6. Windows から Sambaへのアクセス

Samba での共有に Windows クライアントのネットワークドライブを 割りあてます.例えば以下の手順で共有フォルダが表示されます.

  1. マイネットワークアイコンを右クリック
  2. ネットワークドライブの割り当てを左クリック
  3. 表示されたダイアログでドライブ名と共有フォルダ名を指定