LeoFSにS3FS-Cでマウントまでやってみる

前回LeoFSの起動までやったので、今回S3FS-Cとかいうのを使って、LeoFSのマウントをしてみる。下記のドキュメントを参考に、インストールからやる。
[Amazon S3 Client Tutorials — LeoFS 1.0 documentation](http://leo-project.net/leofs/docs/s3_client.html#s3fs-c-label)

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)](http://d.hatena.ne.jp/daftbeats/20071210/1197295982)
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ユーザーでいけた！とりあえずこれで大丈夫なはず。