2010年11月4日木曜日

curlftpfsを使ってリモートホストのディレクトリをローカルにマウントする

Check

コンソール端末からwebサーバにアクセスする際、クライアントを使うのが('A`)マンドクセというあなたに。

私はubuntu10.10を使っているが、他のバージョンやディストリビューションでも似たようなことはできるだろう。まずは必要なパッケージをインストールしてしまおう。

washi@wabuntu:~$ sudo aptitude install curlftpfs

curlftpfsの使い方を確認しよう。オプションは色々あるが、私の場合はこれだけでなんとかなっている。

washi@wabuntu:~$ curlftpfs server.address.jp ~/mountdir -o user=username:password

本来ならばこれだけで任意のディレクトリにマウント出来るはずだ。しかし、私の場合ここで以下のようなエラーが出た。

washi@wabuntu:~$ curlftpfs server.address.jp ~/mountdir -o user=username:password
fusermount: failed to open /etc/fuse.conf: Permission denied

http://linux.dsplabs.com.au/forums/ubuntu-linux-help/ubuntu-fuse-failed-to-execに対処法が書かれているので、このとおりにやってみる。

washi@wabuntu:~$ sudo chmod +x /bin/fusermount 
washi@wabuntu:~$ sudo chmod a+rwx /etc/fuse.conf 

これで変なメッセージは表示されなくなったはずだ。

次にやりたいことの手順を確認。私はホスティングサービスに、NINJA-TOOLSを使っているのでマウント先は~/ninjaとする。にんにん。

  1. $HOME下にninjaディレクトリを作成
  2. ウェブサーバのルートを~/ninjaにマウントする。
  3. アップロードは、~/ninjaへファイルをコピーするだけ!
  4. ~/ninjaをアンマウントし、空になった~/ninjaは削除する。

これらの手順をスクリプトにまとめる。シェルスクリプトの勉強を兼ねて、マウントするときは

washi@wabuntu:~$ ./myscript.sh mount

アンマウントするときは

washi@wabuntu:~$ ./myscript.sh umount

とするだけでサーバーのディレクトリをマウントできるようにした。

#! /usr/bin/env sh

CMDNAME=`basename $0`
MOUNTDIR=~/ninja

# スクリプトの使い方を表示する
usage(){
    echo "使い方: $CMDNAME アクション" 1>&2
    echo "アクション:" 1>&2
    echo "\tmount  - FTPサーバのROOTディレクトリを $MOUNTDIR にマウントします。" 1>&2
    echo "\tumount - $MOUNTDIR をアンマウントします。" 1>&2
}

# 引数が1個以外の時は使い方を表示
if [ $# -ne 1 ]; then
    usage
    exit 1
fi

if [ "$1" = "mount" ]; then
    echo "mount アクションが選択されました。" 1>&2
    echo "マウント先は $MOUNTDIR です。" 1>&2
    mkdir -p $MOUNTDIR
    curlftpfs server.address.jp $MOUNTDIR -o user=username:password
elif [ "$1" =  "umount" ]; then
    echo "umount アクションが選択されました。" 1>&2
    echo "$MOUNTDIR をアンマウント後、空になったディレクトリを削除します。" 1>&2
    fusermount -u $MOUNTDIR
    rmdir $MOUNTDIR
else
    # mount, umount以外のアクションを指定した場合は使い方を表示
    usage
    exit 1
fi

exit 0

これで、~/ninja 以下にファイルをコピーするだけでアップロードすることができるようになったはずだ。

0 件のコメント:

コメントを投稿