前回LeoFSの起動までやったので、今回S3FS-Cとかいうのを使って、LeoFSのマウントをしてみる。下記のドキュメントを参考に、インストールからやる。
Amazon S3 Client Tutorials — LeoFS 1.0 documentation
FUSEというのはユーザースペースでファイルシステムを作成できる機能のこと。これをすることで、外部のツールからLeoFSが使えるようになるのかな?よくわからんが、手当たりしだいに触っているうちにわかってくるはず。
S3FS-Cのインストール
$ sudo yum install libfuse-dev libcurl4-openssl-dev fuse-utils
上記でドキュメント中にあったapt-getのやつが入るかとおもっていたけど、入らなかった。やっぱりかー
No package libfuse-dev available.
No package libcurl4-openssl-dev available.
No package fuse-utils available.
とりあえず足りないライブラリを無視して次に進んでみる。足りなかったらエラー出るやろ
$ cd /usr/local/src
$ git clone https://github.com/leo-project/s3fs-c.git
$ cd s3fs-c/
$ ./configure
No package 'fuse' found
No package 'libcurl' found
No package 'libxml-2.0' found
やっぱりなんか無いって怒られた。ちょっとググりながら必要っぽいものをいれる。
# yum -y install fuse-devel
# yum -y install curl-devel
# yum -y install libxml2-devel
もう一度make
$ cd /usr/local/src/s3fs-c
$ ./configure
$ make
$ make install
行けた!
前回作ったbucketsはこんな感じ
$ telnet 127.0.0.1 10010
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get-buckets
cluster id | bucket | owner | permissions | created at
-------------+-------------+--------+------------------+---------------------------
leofs_1 | tarr-bucket | tarr | Me(full_control) | 2014-07-02 14:18:14 +0900
このtarr-bucketっていうのを使う。
hostsファイルの編集。下記の行を/etc/hostsに追加した。
127.0.0.1 localhost tarr-bucket.localhost
sudo su leofs
したあとで(ここまでrootで作業)
$ vi ~/.passwd-s3fs
# 下記を追加。
b0b13a47973f28e70ee8:7315fb1215c71273bdc721b57b7f2850437ce6ce
$ chmod 600 ~/.passwd-s3fs
mount関連
$ /usr/local/src/s3fs-c/src/s3fs tarr-bucket /usr/local/dev/tarr-bucket -o url='http://localhost:8080'
s3fs: unable to access MOUNTPOINT /usr/local/dev/tarr-bucket: No such file or directory
directory無いって怒られたのでmkdir
$ mkdir -p /usr/local/dev/tarr-bucket
$ /usr/local/src/s3fs-c/src/s3fs tarr-bucket /usr/local/dev/tarr-bucket -o url='http://localhost:8080'
fuse: failed to exec fusermount: Permission denied
$ sudo su
# /usr/local/src/s3fs-c/src/s3fs tarr-bucket /usr/local/dev/tarr-bucket -o url='http://localhost:8080'
s3fs: could not determine how to establish security credentials
パーミッション関連で怒られたのでrootでやったが、セキュリティ関連でなんかエラーが出てる。なんじゃろっておもったが、rootのホームにアクセスキーのファイルを置いていないからか。
$ sudo su
$ vi ~/.passwd-s3fs
# 下記を追加。
b0b13a47973f28e70ee8:7315fb1215c71273bdc721b57b7f2850437ce6ce
$ chmod 600 ~/.passwd-s3fs
あー、これ絶対あとでパーミッションで面倒くさいことになるなー。でも、とりあえず先に進む。
$ /usr/local/src/s3fs-c/src/s3fs tarr-bucket /usr/local/dev/tarr-bucket -o url='http://localhost:8080'
お、いけたっぽい。よくわからないままとりあえずdirectoryにファイルを直置きしてみる
$ touch /usr/local/dev/tarr-bucket/test.txt
$ ls -l /usr/local/dev/tarr-bucket/test.txt
-rwxrwxrwx. 1 root root 0 Jul 2 15:31 /usr/local/dev/tarr-bucket/test.txt
rootではいけた。leofsユーザーだとどうか。
$ touch /usr/local/dev/tarr-bucket/test.txt
touch: cannot touch `/usr/local/dev/tarr-bucket/test.txt': Permission denied
置けないよね。というかそもそもdirectoryにpermissionないのか。
$ sudo su
# chown leofs:leofs /usr/local/dev/tarr-bucket
# ls -ld /usr/local/dev/tarr-bucket
drwxrwxr-x. 1 root root 0 Jan 1 1970 /usr/local/dev/tarr-bucket
あれ、chown効かない。こういうもんなの?やっぱりマウントのところから作りなおしたほうが良さそう。
take2
umountする。
$ df
$ umount /usr/local/dev/tarr-bucket
$ df
Fuseを一般ユーザ権限で(修正版) - Hell o world (foo)
errorのこれでググったところ、fusermountコマンドのパーミッションで解決するらしい。
fuse: failed to exec fusermount: Permission denied
$ ls -l /usr/bin/fusermount
lrwxrwxrwx. 1 root root 15 Jul 1 12:30 /usr/bin/fusermount -> /bin/fusermount
$ ls -l /bin/fusermount
-rwsr-x---. 1 root fuse 32336 Dec 8 2011 /bin/fusermount
確かにパーミッションない。fuseにleofsユーザーを追加。
$ sudo su
# usermod -G fuse leofs
# cat /etc/group | grep fuse
fuse:x:494:leofs
そしてもう一度マウント。
$ /usr/local/src/s3fs-c/src/s3fs tarr-bucket /usr/local/dev/tarr-bucket -o url='http://localhost:8080'
$ touch /usr/local/dev/tarr-bucket/apple
$ ls /usr/local/dev/tarr-bucket
apple test.txt
leofsユーザーでいけた!とりあえずこれで大丈夫なはず。