LoginSignup
2
1

More than 5 years have passed since last update.

Oracle Cloud Infrastructure(OCI) にgoofysを入れてみた

Last updated at Posted at 2019-02-04

今回の内容

EC2はgoofysを使用してS3をマウントすることが可能。
Oracle Cloud InfrastructureのObject StorageもS3互換APIを持ち合わせているため
goofysをインストールして、マウントできるかを確かめてみた。

前提

1. S3互換API用ユーザー作成

1-1. ユーザーの作成

Identity > Users と進みCreate Userを押す

[Create User画面]
001.PNG
NAMEに任意の名前(goofysなど)、DESCRIPTIONにも任意の値(For goofysなど)を入れてCreateを押す

1-2. グループの設定

Identity > Users > 1-1で作成したユーザー名 > Groups と進み、Add User to Groupを押す

[Add User to Group画面]
002.PNG
GROUPSAdministratorsを選択し、Addを押す
本来はObject Storageしか触れないPolicyが設定されたGroupを作成して設定する方が良いが今回は省略する。

1-3. Keyの作成

Identity > Users > 1-1で作成したユーザー名 > Customer Secret Key と進み、Generate Secret Keyを押す

[Generate Secret Key画面]
003.PNG
NAMEに任意の名前(goofysなど)を入れてGenerate Secret Keyを押す
そうすると下記のSecret Keyが表示される。
※1度しか表示されないため、コピーしておくこと! ---★1

[Generateされた画面]
004.PNG

また、下記画面も今後の設定に必要なためコピーしておくこと! ---★2
Nameが作成した内容の個所でCopyを押す。
005.PNG

2. goofysのインストール

作成してあるComputeのインスタンスにgoofysをインストールする。
goofysを使用可能にするには以下が必要。

  • golang (実際はgoofysをbuildするために必要)
  • fuse (マウントするために必要)
  • git (実際はgoofysをgitからダウンロードしてくるために必要)

Computeインスタンスに必要なのは、goofysとfuseのコマンドだけなので
どこかworkサーバーでコンパイルしたものを配布した方がgolang、gitをインストールしなくて綺麗かも。。今回はそこまで考えずに実行していく。

2-1. golang、fuse、gitのインストール

### golang、fuseのインストール
[opc@hostname ~]$ sudo yum install golang fuse
~省略~

========================================================================================================================
 Package                    Arch               Version                            Repository                       Size
========================================================================================================================
Installing:
 fuse                       x86_64             2.9.4-1.0.4.el7                    ol7_latest                       86 k
 golang                     x86_64             1.9.4-1.el7                        ol7_optional_latest             610 k
Installing for dependencies:
 cpp                        x86_64             4.8.5-36.0.1.el7                   ol7_latest                      5.9 M
 gcc                        x86_64             4.8.5-36.0.1.el7                   ol7_latest                       16 M
 glibc-devel                x86_64             2.17-260.0.15.el7_6.3              ol7_latest                      1.1 M
 glibc-headers              x86_64             2.17-260.0.15.el7_6.3              ol7_latest                      685 k
 golang-bin                 x86_64             1.9.4-1.el7                        ol7_optional_latest              48 M
 golang-src                 noarch             1.9.4-1.el7                        ol7_optional_latest             5.1 M
 kernel-headers             x86_64             3.10.0-957.5.1.el7                 ol7_latest                      8.0 M
 libmpc                     x86_64             1.0.1-3.el7                        ol7_latest                       49 k
 mpfr                       x86_64             3.1.1-4.el7                        ol7_latest                      198 k
Updating for dependencies:
 glibc                      x86_64             2.17-260.0.15.el7_6.3              ol7_latest                      3.7 M
 glibc-common               x86_64             2.17-260.0.15.el7_6.3              ol7_latest                       12 M

Transaction Summary
========================================================================================================================
Install  2 Packages (+9 Dependent packages)
Upgrade             ( 2 Dependent packages)

Total download size: 101 M
Is this ok [y/d/N]: y

~省略~

Installed:
  fuse.x86_64 0:2.9.4-1.0.4.el7                               golang.x86_64 0:1.9.4-1.el7                              

Dependency Installed:
  cpp.x86_64 0:4.8.5-36.0.1.el7                             gcc.x86_64 0:4.8.5-36.0.1.el7                              
  glibc-devel.x86_64 0:2.17-260.0.15.el7_6.3                glibc-headers.x86_64 0:2.17-260.0.15.el7_6.3               
  golang-bin.x86_64 0:1.9.4-1.el7                           golang-src.noarch 0:1.9.4-1.el7                            
  kernel-headers.x86_64 0:3.10.0-957.5.1.el7                libmpc.x86_64 0:1.0.1-3.el7                                
  mpfr.x86_64 0:3.1.1-4.el7                                

Dependency Updated:
  glibc.x86_64 0:2.17-260.0.15.el7_6.3                    glibc-common.x86_64 0:2.17-260.0.15.el7_6.3                   

Complete!

[opc@hostname ~]$ 

### gitのインストール
[opc@hostname ~]$ sudo yum install git
~省略~

========================================================================================================================
 Package                         Arch                  Version                          Repository                 Size
========================================================================================================================
Installing:
 git                             x86_64                1.8.3.1-20.el7                   ol7_latest                4.4 M
Installing for dependencies:
 perl-Error                      noarch                1:0.17020-2.el7                  ol7_latest                 31 k
 perl-Git                        noarch                1.8.3.1-20.el7                   ol7_latest                 55 k
 perl-TermReadKey                x86_64                2.30-20.el7                      ol7_latest                 30 k

Transaction Summary
========================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 4.5 M
Installed size: 22 M
Is this ok [y/d/N]: y

~省略

Installed:
  git.x86_64 0:1.8.3.1-20.el7

Dependency Installed:
  perl-Error.noarch 1:0.17020-2.el7     perl-Git.noarch 0:1.8.3.1-20.el7     perl-TermReadKey.x86_64 0:2.30-20.el7

Complete!
[opc@hostname ~]$ 

2-2. 取得とbuild

buildする場所は特にどこでも良いので適当に実施。

### goパスの設定
[opc@hostname ~]$ mkdir ~/go
[opc@hostname ~]$ export GOPATH=~/go
### 取得とbuild
[opc@hostname ~]$ go get github.com/kahing/goofys
[opc@hostname ~]$ echo $?
0
[opc@hostname ~]$ go install github.com/kahing/goofys
[opc@hostname ~]$ echo $?
0
### buildの確認
[opc@hostname ~]$ ls -l ~/go/bin/goofys
-rwxrwxr-x. 1 opc opc 14040170 Feb  4 11:36 /home/opc/go/bin/goofys

2-3. ファイルの配置

goofysのファイルをPATHが通る所に配置する。

[opc@hostname ~]$ sudo cp /home/opc/go/bin/goofys /usr/local/bin
[opc@hostname ~]$ sudo chown root:root /usr/local/bin/goofys
[opc@hostname ~]$ sudo chmod 775 /usr/local/bin/goofys
[opc@hostname ~]$ ls -l /usr/local/bin/goofys
-rwxrwxr-x. 1 root root 14040170 Feb  4 11:40 /usr/local/bin/goofys

3. 環境設定

goofysは基本的にはawscliを使用する。しかし、今回はOracle Cloud Infrastructureを使用するため細工が必要。awscliのcredentialsファイルを手動で作成する。
また、自動起動可能にするために、/etc/fstabにも設定を追加する。

3-1. 環境変数の設定

今回必要な環境変数は以下となる。
- aws_access_key_id <=== ★2で確認した値
- aws_secret_access_key <=== ★1で確認した値

再起動時にも自動でmountさせたいために、rootのhomeディレクトリに作成する。

### credentialsファイルの作成
[opc@hostname ~]$ sudo mkdir -p /root/.aws
[opc@hostname ~]$ sudo vi /root/.aws/credentials
### 以下を追記
[default]
aws_access_key_id = XXX <=== ★2で確認した値
aws_secret_access_key = XXX <=== ★1で確認した値
### ここまで
[opc@hostname ~]$ 

3-2. /etc/fstabの設定

最低限必要な追加内容としては以下と考える。

[opc@hostname ~]$ sudo cp -p /etc/fstab /etc/fstab.`date "+%Y%m%d%H%M%S"`
[opc@hostname ~]$ sudo vi /etc/fstab
### 以下を追記
goofys#<bucket名> <mountディレクトリ> fuse _netdev,allow_other,--endpoint=<Object Storageのエンドポイント>,--region=<リージョン> 0 0
### ここまで

もしも、IFやり取りするために使用したい場合は--dir-mode=0755,--file-mode=0666を入れた方が良いかもしれない。

4. テストの実施

設定が完了したため、テストを実施してみる。

4-1. コマンドのテスト

[opc@hostname ~]$ sudo mount -a
[opc@hostname ~]$ echo $?
0
[opc@hostname ~]$ df -h
df -h
Filesystem       Size  Used Avail Use% Mounted on
devtmpfs         7.2G     0  7.2G   0% /dev
tmpfs            7.3G     0  7.3G   0% /dev/shm
tmpfs            7.3G  8.6M  7.3G   1% /run
tmpfs            7.3G     0  7.3G   0% /sys/fs/cgroup
/dev/sda3         39G  5.0G   34G  13% /
/dev/sda1        200M  9.6M  191M   5% /boot/efi
tmpfs            1.5G     0  1.5G   0% /run/user/1000
<bucket名>       1.0P     0  1.0P   0% <mountディレクトリ>   ←☆出来ている!

[opc@hostname ~]$ cd <mountディレクトリ>
[opc@hostname ~]$ sudo touch test.log
[opc@hostname ~]$ ls -l
-rw-r--r--. 1 root root          0 Feb  4 12:52 test.log     ←☆ちゃんと出来ている!

[opc@hostname ~]$ sudo mkdir test
[opc@hostname ~]$ ls -l
drwxr-xr-x. 2 root root       4096 Feb  4 12:52 test     ←☆ディレクトリも出来ている!
-rw-r--r--. 1 root root          0 Feb  4 12:52 test.log

[opc@hostname ~]$ sudo touch test/test2.log
[opc@hostname ~]$ ls -l test/test2.log
-rw-r--r--. 1 root root 0 Feb  4 12:53 test/test2.log     ←☆これも出来ている!

4-2. 画面からの確認

Object Storage > Object Storage > 作成したBucket名 を押す
Objectの画面で
- test.log
- testディレクトリ
- test/test2.log
が作成されていることを同じく確認。
※testディレクトリに関しては作成されないと考えていた。。。

[Objectの画面]
006.PNG

画面からtestディレクトリを削除してみると、testディレクトリは削除され、test/test2.logは残ったままとなった。

[削除の確認画面]
007.PNG

[削除後のObjectの画面]
008.PNG

しかし、コマンドで確認してみるとディレクトリは残っている状態となった。

[opc@hostname ~]$ ls -l
drwxr-xr-x. 2 root root       4096 Feb  4 12:52 test     ←☆ディレクトリは残っている!
-rw-r--r--. 1 root root          0 Feb  4 12:52 test.log

上記を考えると、goofysを使用した場合は、ディレクトリ作成とかはあまり実施しない方が良い気がする。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1