【RaspberryPi】S3に無限に保存できるファイルサーバーを作った


バックエンドがS3で、容量を気にせず無限に保存できるファイルサーバーが欲しかったので、ラズパイで作ってみました。
とはいえ、ラズパイを起動してからいちいち設定をするのは面倒なので、[Packer](https://www.packer.io/)を使ってラズパイOSイメージを自動生成できるようにしました。



構成はこんな感じ
※ Cassys(Cloud Attach Storage System) というのがこのツールの名前です。 

![architecture.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/83f8f7d4-2db3-6fb8-d6d8-f8ed92b31d8d.png)


ソースコードはこちら。

https://github.com/ng3rdstmadgke/cassys

あとは使い方の解説を書いておきます。気が向いたら使ってみてください。

# ■ 使い方

## 1.前準備

### # dockerのインストール

dockerをインストールしてください。

https://docs.docker.com/engine/install/

ログインユーザーからdockerコマンドを操作できるようにします。

```bash
# ログインユーザーをdockerグループに追加します。
LOGIN_USER=$(whoami)
sudo usermod -aG docker $LOGIN_USER

# このコマンドの実行に成功したら一度ログアウトします。
exit

# 再度ログインしてdockerコマンドを実行してみましょう
docker ps
```

### # S3バケットとIAMユーザーの作成

1. バックエンドとなるs3バケットを作成します。
1. `AmazonS3FullAccess` ポリシーを持つIAMユーザーを作成します。
1. 作成したIAMユーザーでアクセスキーを発行します。

### # リポジトリのクローン

```bash
git clone https://github.com/ng3rdstmadgke/cassys.git

cd cassys
```

## 2. 設定ファイルの準備

ラズベリーパイイメージの生成に必要な設定ファイルを用意します。


```bash
# 設定ファイルをコピー
cp setting/sample.yml setting/my-setting.yml

# 設定ファイルの編集
vim setting/my-setting.yml
```

`setting/my-setting.yml`


```yml
---
mnt_bucket: "MY_BUCKET_NAME"  # マウントするS3バケット名
aws_credential:  # IAMユーザーのアクセスキー
  aws_accesskey_id: "xxxxxxxxxxxxxxxxxxxx"
  aws_secret_accesskey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
smb:  # sambaサーバの設定
  user: "cassys"  # sambaサーバに接続するユーザ名(任意)
  password: "xxxxxxxx"  # sambaサーバに接続するスワード(任意)
dhcpcd:
  ip: "192.168.50.110/24"  # ラズベリーパイのIPアドレス(任意)
  router_ip: "192.168.50.1"  # ラズベリーパイが参加するネットワークのルーターのIPアドレス
```

## 3. イメージ生成

ラズベリーパイイメージを生成します。  
OSは64bit, 32bitから選択できます。


### # 64bitOSのイメージ

```bash
# イメージ生成
# 30分程かかります
./bin/build.sh arm64 setting/my-setting.yml

# 出来上がったイメージ
ls .build/output-arm-image/arm64_cassys.img.xz
```

### # 32bitOSのイメージ

```bash
# イメージ生成
# 30分程かかります
./bin/build.sh armhf setting/my-setting.yml

# 完成したイメージ
ls .build/output-arm-image/armhf_cassys.img.xz
```

## 4. SDカードにイメージを書き込む

イメージは `Raspberry Pi Imager` を利用して書き込みます。

- [Raspberry Pi Imager のダウンロード](https://www.raspberrypi.com/software/)

### # デバイスの選択

利用するラズベリーパイを指定します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/2940501c-fc5a-0318-21e0-055f1d2897da.png" width="500px">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/a0585a10-3af5-7380-53e9-2cf2338a1b43.png" width="500px">


### # OSの選択

OSを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/2042b7d7-a8d5-90e2-cca2-c73d43a41adf.png" width="500px">

「Use custom」をクリックして、先程生成したイメージを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/8c5608be-4f9f-6b45-71da-f10230d77b0c.png" width="500px">

### # ストレージの選択

イメージを書き込むSDカードを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/a2ff18b4-34ff-f982-b748-3e06e78f1ec3.png" width="500px">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/a78ca29b-413d-950c-d981-a43e759ed16f.png" width="500px">

すべての項目を選択し終わったら「次へ」をクリック

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/bd214582-afb0-dbb5-203a-51ca0eb07704.png" width="500px">


### # OSのカスタム設定

ラズパイOSの初期設定を行います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/531d740e-2d3a-8c46-709e-a5158c27ef79.png" width="500px">

- ホスト名  
任意のホスト名を指定します。
- ユーザー名とパスワードの設定  
ラズベリーパイにログインするための任意のユーザー名とパスワードを指定します。
- Wi-Fiの設定  
ラズベリーパイが接続するWi-Fiを指定します。
- ロケールの設定  
タイムゾーン: 日本にいるなら `Asia/Tokyo` を設定します。  
キーボードレイアウト: jis配列を利用しているなら `jp` を指定します。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/83538d0e-1bae-cca1-00ba-df120c305d09.png" width="500px">

設定を保存したら 「はい」を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/3c94c6f3-81a5-3b65-b1e0-b346e3664c67.png" width="500px">


すべての設定が完了したら書き込みを行います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/a3794e4b-457a-e2af-5dba-e6c921805a4d.png" width="500px">

イメージの書き込みが終わったら、SDカードをラズパイに挿入し、電源を接続しましょう。
※ ラズパイの初回起動には5 ~ 10分ほどかかります。

## 5. 接続

Finder (windowsの場合はexplorer) を開いて、「ホスト名に設定した名前」をクリックし、「別名で接続」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/2cbb0861-25bb-b685-3aef-f229e3cb6268.png" width="500px">

`setting/my-setting.yml` の `smb.user` `smb.password` に設定した情報を入力し、「接続」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/e1408e0c-d521-e707-1480-382193e49095.png" width="500px">

`share` をクリックすると、S３バケット名が表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/29dd8593-4872-8759-fbee-4922b003549c.png" width="500px">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92383/5a672cf5-1f06-d5dc-e849-6a73539db8fd.png" width="500px">