OpenMediaVaultでTime Machineサーバー構築 on Raspberry Pi 4

# はじめに
前々から「オンラインのTime Machineサーバーを用意したい！」と思っていた．

このクラウド全盛期の時代にバックアップ取るためだけにサーバーを構築するのもなにやら悔しい…ということで，[Azure上にTime Machine領域を確保する](https://level69.net/archives/25822)ことも検討．

しかし，
* 当方の環境では速度が出ない
* OSが破損しリカバリー領域から復元する時に多大なる手間がかかりそう
という課題があり，最終的にラズパイでTime Machineサーバーを構築する方針とした．

ネットをぐぐってみると，AFP(Apple Filing Protocol)ならびにnetatalkを用いたやり方については多数ヒット．
しかし，SMBを使用した方法については全くヒットしなかったので，拙いながら記事に起こしてみた．

結論としては，OpenMediaVaultのGUIで簡単に設定可能．
ラズパイのセットアップ工程が不要の人は[SMB(Time Machine)領域設定](#smbtime-machine領域設定)までスキップしていただきたい．

## なぜSMBにこだわる？
~~なんとなく前時代的なプロトコルを使いたくなかったから~~
最近のMacで標準となっているAPFSファイルシステムの場合，バックアップ先としてAFP領域を指定できなくなっている．らしい．

# 環境
* Raspberry Pi 4 Rev 1.2
* MacBook Pro 2019 (macos Mojave 10.14.6)

#Raspi4のセットアップ
## Raspbianのインストール
せっかくなので，最近リリースされたRaspberry Pi Imagerを用いてやり直す．
[公式サイト](https://www.raspberrypi.org/downloads/)から各OSのImagerをダウンロード，SDカードを読み込み，イメージを書き込むだけ．

起動すると以下の画面．
<img width="680" alt="スクリーンショット 2020-03-29 11.34.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/185fd861-b158-8464-b79b-fcade0a218ef.png">

今回，ヘッドレスで使用するため，Raspbian Liteを使用する．
<img width="680" alt="スクリーンショット 2020-03-29 11.34.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/ee0ebfe4-6df3-ddca-3e25-2faebd85369b.png">
<img width="680" alt="スクリーンショット 2020-03-29 11.34.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/cfcc6b34-f440-394a-f98e-692444068b0e.png">

トップに戻ったら「WRITE」を押すと書き込み開始．
完了したら，以下の画面が表示される．
<img width="680" alt="スクリーンショット 2020-03-29 11.41.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/eeac5df9-7adf-11b0-7ac9-fff4957e16ef.png">

リモートアクセスの設定をするため，SDカードを刺し直す．

## リモートアクセスの設定
### SSHの有効化
多くのサイトに記載されているが，SDカードの直下に「SSH」というファイルを置くだけ．

```bash:SSH有効化
$ cd /Volumes/boot/
$ touch ssh
$ ls -l
#「ssh」が存在することを確認．
```

### RNDISを有効化し，MacとUSB1本でSSH
ラズパイのUSB-Cポートは充電だけではなく，データ通信も可能．
そのため，RNDISを有効化すると，USBケーブル一本でIP通信が可能となる．
手持ちのMacBookもUSB-C端子のみのモデルのため，C-Cのケーブル一本でラズパイのセットアップができるのは非常に大きなメリット．

ほぼ[Classmethodさんのサイトの流用](https://dev.classmethod.jp/articles/raspberry-pi-4-develop-with-mac-using-usb-c-cable/)になってしまうので，要点だけ記載する．
> config.txtの末尾にdtoverlay=dwc2という1行を追記します。
> 次にcmdline.txtを編集します。rootwaitのうしろにスペースひとつ空けてmodules-load=dwc2,g_etherと追記します。

上記を実施し，rootwait後を比較し，ビフォーアフターが以下の通りになれば問題ない．

```diff

1c1
< console=serial1,115200 console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
---
> console=serial0,115200 console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
```

ここまで実施したらUSB-Cをmacとつなぎ電源ON．
あとはインターネット共有で「RNDIS/Ethernet Gadget」に対してインターネットルート(当方ではWi-Fi)を共有すればOK.
<img width="668" alt="スクリーンショット 2020-03-29 14.19.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/71e29a84-7d14-17fb-8c3b-7347f269d3e3.png">

SSHで接続したら完了．

```bash:SSH接続
$ ssh pi@raspberrypi.local
```

## Raspbian初期設定
1. とりあえずsudo raspi-configする．
 2.1. piユーザーのパスワード変更．
 2.2. ホスト名を変更した．「raspi4」とした．
 2.3. ホスト名を反映させるため，sudo reboot

2. sudo apt-get update

3. sudo apt-get upgrade

#OpenMediaVaultのセットアップ
## OpemMediaVaultのインストール
2-30分程度かかります．

```bash:OpenMediaVaultのインストール
$ cd /opt
$ wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
$ sudo reboot
```

なお，rebootしたら，なぜかUSB経由で接続ができなくなった．
原因わかる人いましたらコメントを………

気を取り直して，ブラウザから`http://raspi4.local/`に接続．
admin / openmediavault が初期ID．
<img width="1680" alt="スクリーンショット 2020-03-29 15.48.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/49b01307-9da2-97a7-9770-ff9e3e3caab1.png">


## HDDのセットアップ
今回，まっさらなHDDを接続したため，フォーマットやパーティショニングもWebUIから実施する．

`ストレージ`→`ディスク`→使うディスクを選択→`ワイプ`を選択．
まっさらなHDDのため`クイック`を選択しフォーマット．
<img width="1680" alt="スクリーンショット 2020-03-29 15.57.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/f392edb0-926d-fe07-47f7-36f704bffff3.png">

`ストレージ`→`ファイルシステム`→`作成`を選択．
先程フォーマットしたドライブを選択し，ラベルの入力とファイルシステムの選択を行う．
今回はXFSとしてみた．(ググった痕跡が見られるが，最終的に深い理由はない)
<img width="1680" alt="スクリーンショット 2020-03-29 15.59.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/97b55870-9e43-393e-7e5d-4e2f9380900e.png">

## アカウント設定
今回，通常のファイル共有で使うアカウントとTime Machineで使うアカウントを分けた．
理由は後述のクォータ設定をしたいため．
`アクセス権の管理`→`ユーザー`→`追加`でアカウントを作成．
スクリーンショットを取り忘れたので編集画面になっているが，シェルは`/usr/sbin/nologin`にした．
<img width="1680" alt="スクリーンショット 2020-03-29 16.29.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/eb17f0af-60c8-9c5e-bcca-8cb4db3561da.png">

同様にTime Machine用のアカウントも作成した．

## クォータ設定
`ストレージ`→`ファイルシステム`→`クォータ`を選択．
任意の容量を設定するだけ．
<img width="1680" alt="スクリーンショット 2020-03-29 16.06.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/90d67324-b414-3882-607b-1ce44dd594fc.png">

## SMB(Time Machine)領域設定
`サービス`→`SMB/CIFS`→`共有`タブ→`追加`
共有フォルダの横の`＋`ボタンを押し，共有フォルダの設定を投入する．値は任意．
<img width="1680" alt="スクリーンショット 2020-03-29 16.36.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/2496b8d9-154c-a4cf-4da7-8787eebe551c.png">
`保存`を押し，もとの画面に戻る．
<img width="1680" alt="スクリーンショット 2020-03-29 16.36.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/30d8f783-6e90-c28b-222d-9632c7afa99a.png">
下にスクロールすると`Time Machineサポート`という項目があるので有効化する．
<img width="1680" alt="スクリーンショット 2020-03-29 16.36.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/76442cae-88ac-8ec4-f96d-43223d93bcd4.png">
`保存`を押し，もとの画面に戻る．

`設定`タブに戻り，一番上の`有効`スイッチで有効化する．
<img width="1680" alt="スクリーンショット 2020-03-29 16.16.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/2047716e-7865-170d-d643-4059d2b72f0d.png">

## おまけ：macosの設定
システム環境設定→Time Machineを選択．
うまくいけばなにもしないでも領域が表示されているはず．
<img width="668" alt="スクリーンショット 2020-03-29 16.17.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/c277213a-0570-a168-b369-27f14048ddcc.png">
<img width="765" alt="スクリーンショット 2020-03-29 16.17.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/414005c1-79a3-e310-13b1-19184dce4fa2.png">

全体容量が1.3TBくらいとなっており，クォータもほぼ正常に働いている模様．
<img width="668" alt="スクリーンショット 2020-03-29 16.41.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68668/039b05cc-028a-e72f-ff58-fa340d9e13b6.png">


# 参考
* [Apple、Time MachineバックアップをサポートするネットワークボリュームからAFPを削除し、「Time Machine over SMB」のNASへ変更。 | AAPL Ch.](https://applech2.com/archives/20180818-time-machine-over-smb-support-nas.html)
* [macOS High Sierra の APFS の導入準備を進める - Apple サポート](https://support.apple.com/ja-jp/HT208018)
* [Raspberry Pi 4とMacをUSB type Cケーブルで接続してMacのインターネット接続を共有する手順 #RaspberryPi | Developers.IO](https://dev.classmethod.jp/articles/raspberry-pi-4-develop-with-mac-using-usb-c-cable/)
* [【2019年12月版】ラズパイとMacの接続はUSB-C ケーブルだけでOK？！→ラズパイ七変化 - Qiita](https://qiita.com/koinori/items/ee81e1815de9e4d7f15d)
* [【西川和久の不定期コラム】「Raspberry Pi 4 Model B / 4GB」Part2 ～実践編。openmediavaultでNAS化に挑戦! そしてDockerで遊ぶ - PC Watch](https://pc.watch.impress.co.jp/docs/column/nishikawa/1230154.html)