Amazon S3をファイルシステムとしてマウントできるという、s3fsを使ってみたくなったので挑戦。
http://code.google.com/p/s3fs/
対象のOSは
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
しかも2.6.18-92.1.13.el5(2009年6月12日現在で最新は2.6.18-128.1.10.el5)でx86_64。
この記事誰得…debianとかCentOSの人や、カーネルを最新にできる環境の人は多分さくっとaptだのyumだのすればいいかと。
いきなり本番サーバをいじるのは怖いので、同じ環境を構築しようとしたのですが、RHEL5とか手に入れようにも…
というわけで、テストはCentOS 5で。ちなみに、CentOSにはFUSEのyumが用意されてるらしいです。今回は使わないけど。
書いてたら長くなったので2エントリに分けます。
前編はCentOS 5にインストールしたメモ。あまり意味はないです。
後編はRHEL5にインストールしたメモ。本命です。
まずは目的のs3fsをダウンロード。
# wget http://s3fs.googlecode.com/files/s3fs-r177-source.tar.gz
# tar xvzf s3fs-r177-source.tar.gz
# cd s3fs
# make
s3fs.cpp:23:18: error: fuse.h: そのようなファイルやディレクトリはありません
FUSEがないと言われます。
rpmfindからRedHat EL5用のRPMを落としてきます。
FUSEを入れます。(※ここは失敗なのでやらないでください)
# wget ftp://rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/fuse-2.7.4-1.el5.rf.i386.rpm
# rpm -ivh fuse-2.7.4-1.el5.rf.i386.rpm
警告: fuse-2.7.4-1.el5.rf.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID ********
準備中… ########################################### [100%]
1:fuse ########################################### [100%]
あ、ATrpmsに新しいのがあったのでアンインストール。
# rpm -e fuse-2.7.4-1.el5.rf
FUSEをインストールするのに参考にしたサイト:SysAdmin’s Diary : Simple Steps To Mount NTFS In RHEL 5
で、目的の最新のFUSEはここ。
ATrpms – by Distribution > Red Hat Enterprise Linux 5 > fuse
# wget http://dl.atrpms.net/all/fuse-2.7.4-8_10.el5.i386.rpm
# wget http://dl.atrpms.net/all/fuse-libs-2.7.4-8_10.el5.i386.rpm
# wget http://dl.atrpms.net/all/fuse-devel-2.7.4-8_10.el5.i386.rpm
# wget http://dl.atrpms.net/all/fuse-kmdl-2.6.18-128.1.10.el5-2.7.4-8_10.el5.i686.rpm
# rpm -ivh fuse-2.7.4-8_10.el5.i386.rpm
警告: fuse-2.7.4-8_10.el5.i386.rpm: ヘッダ V4 DSA signature: NOKEY, key ID ********
エラー: 依存性の欠如:
fuse-kmdl-2.7.4-8_10.el5 は fuse-2.7.4-8_10.el5.i386 に必要とされています
あ、いっぺんにインストールしないとダメなのね。
# rpm -ivh fuse-2.7.4-8_10.el5.i386.rpm fuse-kmdl-2.6.18-128.1.10.el5-2.7.4-8_10.el5.i686.rpm fuse-devel-2.7.4-8_10.el5.i386.rpm fuse-libs-2.7.4-8_10.el5.i386.rpm
で、FUSEのインストールは成功。
改めてs3fsをmake&make install
# make
g++ -ggdb -Wall -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread -L/lib -lfuse -lrt -ldl -L/usr/kerberos/lib -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -I/usr/include/libxml2 -L/usr/lib -lxml2 -lz -lm -lcrypto s3fs.cpp -o s3fs
s3fs.cpp:440: 警告: ‘size_t readCallback(void*, size_t, size_t, void*)’ defined but not used
ok!
# make install
g++ -ggdb -Wall -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread -L/lib -lfuse -lrt -ldl -L/usr/kerberos/lib -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -I/usr/include/libxml2 -L/usr/lib -lxml2 -lz -lm -lcrypto s3fs.cpp -o s3fs
s3fs.cpp:440: 警告: ‘size_t readCallback(void*, size_t, size_t, void*)’ defined but not used
ok!
cp -f s3fs /usr/bin
…何か単純なmakeだな。
とりあえず成功。
では続いてマウントを実行。
# mkdir /mnt/s3
# s3fs ***** -o accessKeyId=******************** -o secretAccessKey=**************************************** /mnt/s3
成功も失敗も出ないけど、成功しているらしい。
最初の*****はバケット名ね。
# cd /mnt/s3
# ll
ls: reading directory .: 入力/出力エラーです
合計 0
ん、何も出ない…
エラーの詳細も何も出ないので他のツールで試してみることに。
s3cmdというのを試してみる。
s3cmdのあとに続けてlsだのコマンドを打つことでバケットにアクセスできるツールらしい。
参考にしたサイトはこちら。
ks: Amazon S3用のコマンドラインツールs3cmd
http://ks.typepad.jp/blog/2009/01/amazon-s3s3cmd-.html
# cd /etc/yum.repos.d/
# wget http://s3cmd.org/repo/CentOS_5/s3tools.repo
# yum install s3cmd
# s3cmd –configure
ここで諸々設定を行う。まぁ、アクセスキーと秘密アクセスキーとか以外はすごい勢いでハイハイ言っておけばOK。
で、設定できたので実行。
# s3cmd ls
あー、ローカルの時間が違いすぎるみたいなことを言われた(ログ取るの忘れた)のでntpで時間合わせ
# date
2009年 6月 12日 金曜日 18:09:57 JST
# ntpdate 192.168.0.1
12 Jun 17:54:37 ntpdate[4372]: step time server 192.168.0.1 offset -956.022080 sec
# s3cmd ls
で、s3cmdの方は成功。
つまりそういうことか。
# cd /mnt/s3
# ll
合計 82577
———- 1 root root 298359 12月 23 2007 0223279e4a09010bf1d55aed45de8b46.dat
———- 1 root root 307441 12月 21 2007 02d452b8ee0809e601297e77e0d14fca.jpg
———- 1 root root 64051 1月 4 2008 03739992ce7b38979b7fd71bfbdf5d30.zip
できた━(∀゚ )━(゚∀゚)━━━!!