tl;dr
今回やったこと
Minioを立ち上げて色々なクライアントで叩いてみた。
MinioはHaystackを参考にしたS3互換のオブジェクトストレージで下のような特徴がある。
今回知ったこと
- s3fsではマウント失敗, 何故かtcpdumpでパケット見つけられず要調査 - Minio はURLのハンドリングが上手くない : - S3cmd でPutBucket は機能しない
- 匿名ユーザを受け付けるので単なるCurlで利用可能
- s3curlにURL末尾が
/
のGetBucketでGetObject(Key名null)するバグあり
公式クライアント(mc) から利用する
Minio は以下のコマンドで立ち上げる。
1
|
$ minio mode memory limit 100m expire 1h
|
公式クライアント(mc)が用意されている。今回はバイナリを落とした。
Usageをみるとls, mb, cp, catなど基本操作っぽいサブコマンドが存在するので使ってみる。
1
2
3
|
mc ls http://127.0.0.1:9000
mc mb http://127.0.0.1:80/test
mc cp ./access.log http://127.0.0.1:9000/trial-minio
|
s3curlで使って見る
s3curlでもmb
は動いた。
s3curlインストール
1
2
3
4
5
6
7
8
9
10
|
$ yum install perl-ExtUtils-Manifest
$ curl -L http://cpanmin.us | perl - --sudo App::cpanminus
$ cpanm YAML HTTP::Date Digest::HMAC_SHA1 URI::Escape
$ sudo `which cpanm` ExtUtils::MM_Unix Digest::HMAC_SHA1 URI::Escape
export PERL5LIB=/home/xtetsuji/lib:/var/lib/site_perl
# Digest::HMAC_SHA1が入らなかったのでとりあえずyumから入れた。
$ sudo yum install perl-Digest
$ wget https://raw.github.com/ksauzz/s3curl/master/s3curl.pl
$ chmod 755 ./s3curl.pl
$ mv ./s3curl.pl ~/local/bin
|
s3curl -> minio@localhost
1
2
3
4
5
6
7
8
9
10
|
$ s3curl.pl --id minio --key dummy --put /dev/null -- -v http://localhost:9000/test2
# 以下別コンソールでみたtcpdump結果
# 作るのは成功した
PUT /test2 HTTP/1.1
User-Agent: curl/7.29.0
Host: localhost:9000
Accept: */*
Transfer-Encoding: chunked
Date: Sat, 17 Oct 2015 09:47:30 GMT
Authorization: AWS minio:RYoc+6rJ8/d2f1b9NLF0fftVhQs=
|
s3cmd 使って見る
結論書くとPutBucket に失敗する。
MinioのAPIディスパッチがアクセスURL末尾の/
の影響でPutObjectと判断されてしまうから。
s3cmdのインストール
v1.6.0を使いたく(yumだと1.5.0)下を行った。
pip入れるのは面倒だったので直接setup.py
した。
1
2
3
4
|
$ wget http://sourceforge.net/projects/s3tools/files/s3cmd/1.6.0/s3cmd-1.6.0.tar.gz/download -O s3cmd-1.6.0.tar.gz
$ tar zxvf s3cmd-1.6.0.tar.gz
$ cd ./s3cmd-1.6.0
$ python setup.py install
|
s3cmd -> minio@localhost
以下のようになり失敗した。curlを使い調べた結果、
URL末尾に/
があるとPutObjectと解釈されているっぽかった。
1
2
3
4
5
6
7
8
9
10
|
$ s3cmd mb s3://test --no-ssl
# 別コンソールから覗いたやり取り
PUT http://127.0.0.1:9000/test/ HTTP/1.1
Host: 127.0.0.1:9000
Accept-Encoding: identity
Content-Length: 0
Authorization: AWS minio:LwYzYPYokVJYVupuDDvjb2coda4=
HTTP/1.1 403 Forbidden
...
|
そのほか
調べてたらs3curlに不具合があった。
PutBucket の末尾に/
を入れたらkey名null
のPutObjectになる。
さすがにこれはダメだと思う。
1
2
3
4
5
6
7
8
9
10
11
12
|
$ ./s3curl.pl --id minio --key dummy --put /dev/null -- -H "x-amz-date: Sat, 17 Oct 2015 10:11:30 GMT" -H "Date:" -v http://127.0.0.1/test9/
PUT /test9/null HTTP/1.1
User-Agent: curl/7.29.0
Host: 127.0.0.1
Accept: */*
Transfer-Encoding: chunked
Date: Sat, 17 Oct 2015 11:00:34 GMT
Authorization: AWS minio:CVXie3vSB6ZnDU0B4o1g3E8R0y8=
x-amz-date: Sat, 17 Oct 2015 10:11:30 GMT
Expect: 100-continue
HTTP/1.1 403 Forbidden
|