プッシュ可能なネットワーク・ファイルシステム ccgfs

 CC Network Filesystem( ccgfs )を利用すると、プッシュモデルでもプルモデルでも、ネットワークを越えてファイルシステムをマウントすることができる。ほとんどのネットワークファイルシステムはプルモデルを採用しているが、この場合クライアントがネットワーク共有をマウントし、接続を開始するのもクライアントだ。これに対して、プッシュモデルのネットワーク共有では接続はサーバーが開始する。このため、ネットワーク非武装地帯(DMZ)にあるマシンからファイアウォールを越えてファイルサーバーにアクセスしたいときに都合がよい。

 DMZにあるクライアントがDMZの外にあるserverX上のネットワーク共有にアクセスする場合、NFSではDMZからserverXへの接続を許容しなければならないが、プッシュモデルでは接続はserverXからDMZのクライアントに対して開始されるのでそうした問題は発生しないからだ。

 Fedora、openSUSE、Ubuntuのリポジトリーにccgfsのパッケージはない。そこで、64ビットFedora 9マシン上でccgfsバージョン0.7.4をソースからビルドした。ccgfsには必要なソフトウェアがいくつかあるが、その中でインストールされていないのはlibHXだけだろう。パッケージはUbuntu Hardy、openSUSE 11、Fedora 9の各リポジトリーにある。最新版ccgfsのビルドにはバージョン1.25以降のlibHXが必要だ。インストールされているlibHXが旧版だった場合は、通常の「./configure; make; sudo make install」でソースからビルドすること。なお、ccgfsをビルドするときは、PKG_CONFIG_PATHの設定を忘れないように。後で示すように、/usr/localのディレクトリーを設定する。

 ccgfsはFUSEファイルシステムのため、ビルドの前にFUSE開発パッケージをインストールしておく必要がある。パッケージは、Fedora 9とopenSUSE 11の場合はfuse-devel、Ubuntu Hardyの場合はlibfuse-dev。ほかに、libattr、libxml2、libsslも必要だが、これらはすでにインストールされているだろう。

 ccgfsをビルドしインストールするコマンドは下のとおり。ここで、sysconfdir(デフォルトは/usr/local/etc)に/etcを指定しているのは、ccgfsにはinit.dスクリプトが含まれており、その構成ファイルをsysconfdirで探すからだ。同様に、configureの実行では、localstatedirオプションでグローバルな/varディレクトリーを指定する。

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
$ tar xjvf /FromWeb/ccgfs-0.74.tar.bz2
$ cd ./ccgfs-*
$ ./configure --sysconfdir=/etc --localstatedir=/var
$ make
$ sudo make install

 ccgfsのインストールが終わったら、接続のための設定を行う。ここでは、わかりやすくするため、ファイルシステムをエクスポートするマシンをserverX、そのファイルシステムをマウントするクライアントマシンをclientYと呼ぶことにする。また、serverXからエクスポートするファイルシステムは/exportとし、clientYの/importにマウントするものとする。

 serverXでは、構成ファイル/etc/ccgfs-super.xmlを作成する。内容は下に示したとおり。その中で重要なのは、開始するためのコマンドを含む<s>行だ。-sパラメーターはserverXからエクスポートするパスを、-mパラメーターはclientYへの接続の方法とマウント位置を指定する。-mパラメーターでは、~/.ssh/configのHostエントリーを指定することもできる。たとえば、毎回アイデンティティーファイルを選択したり、異なるポートを使って接続したりする必要があるときは、~/.ssh/configにHostエントリーを作っておき、ccgfs-super.xmlで指定すると便利だ。

# cat /etc/ccgfs-super.xml
<?xml version="1.0" encoding="utf-8" ?>
<ccgfs-super>
<kill-margin>5</kill-margin>
<restart-wait>10</restart-wait>
<s>ccgfs-ssh-push -s /export -m root@clientY:/import</s>
</ccgfs-super>

 ccgfsと共にインストールされるinit.dファイルではcheckprocやstartprocなどのコマンドが使われているが、これらはopenSUSE固有のコマンドで、Fedoraにはない。したがって、Fedora 9の場合はデーモンを起動するfunctionsファイルを下に示すように変更する必要がある。お使いのLinuxディストリビューションに合わせてserverXのinit.dファイルを設定したら、ccgfs-superサービスを起動する。これで、clientYがserverXの/exportにアクセスできるようになる。

# vi /etc/init.d/ccgfs-super
...
. /etc/init.d/functions
...
case "$1" in
    (start)
        [ -n "$verbose" ] && echo -n "Starting ccgfs-super";
#       checkproc "$daemon_bin" && echo " (already running)";
#       startproc -sp "$pid_file" -- \
#               "$daemon_bin" -f "$config_file" -p "$pid_file";
        daemon "$daemon_bin" -f "$config_file" -p "$pid_file";
        rc_status -v;

# /etc/init.d/ccgfs-super start

 このファイルシステムはプッシュ型なので、clientYがコマンドを発行してファイルシステムをマウントする必要はない。構成と起動はすべてserverX上で行われる。

 ccgfsはSSHを使ってリモートマシンを認証する。プッシュ型ファイルシステムでは、認証は、ファイルシステムをエクスポートするサーバー側から、そのファイルシステムをマウントするクライアントに対して行われる。接続も、すべて、ファイルサーバーからクライアントに対して行われる。したがって、DMZのマシンからファイルシステムにアクセスしても安全だ。DMZのマシンからサーバーへの接続を許可したり、そのマシンを認証したりする必要がなく、逆にそのマシンがファイルサーバーからの接続を許容するだけだからだ。

 プッシュモデルでファイルシステムをエクスポートすると、サーバーとクライアントの両方の構成がサーバーマシン上に移される。クライアントは、ほかのパスと同じように、そのファイルシステム上のパスを読み書きすることができる。

Ben Martin 10年以上にわたってファイルシステムに携わっている。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文(2008年10月1日)