【ラズパイ】お家のLANにつないだときにmacを自動でバックアップ【TimeMachine (Apple)】

# Apple Time Machine Server on Local Network
ラズパイで構築するApple Time Machine用オンライン（LAN）サーバー
参考： https://stash4.hatenablog.com/entry/2018/06/17/184423

## 概要
以前macが突然死してしまい，バックアップしてなかったことでひどい目にあった．
そこで，自宅のLANにmacをつないだときに勝手にバックアップをとってくれるシステムを作成した！
定期的に**自動でバックアップ**を取ってくれるし，LAN経由のため**HDDを本体につなぐ必要もなし**．
今どきはiCloudなどを使ってオンラインにバックアップするのが流行りだけど，容量単価が高くデータを置いておくだけで毎月一定の出費が発生してしまうので，避けたかった．
一方で，ローカルのストレージに保存する形式を取れば，ランニングコストはわずかな電気代だけだし，設定次第でNASとしても使える．

#### バックアップ方法の比較  

* TimeMachine Server on Lan  
\+ 自動で定期的にバックアップ  
\+ 低ランニングコスト(初期費用1万+毎月の電気代数円)  
\- 自力でトラブルを解決する必要がある  
\- TimeMachineが廃止されたら終わり  
* iCloud  
\+ 初期設定が簡単でサーバーの設置は不要  
\+ Apple公式サービスのため，サポートが長い  
\- ランニングコストが高い（毎月数千円）  
\- 手動でバックアップを開始する必要がある


## 材料（正直何でも良いと思う）

- [Raspberry Pi 3B](https://www.amazon.co.jp/gp/product/B087R57WJX/ref=ox_sc_act_title_1?smid=A2LEO3SQFLYI2F&psc=1)
- [BUFFALO HDD 1TB](https://www.amazon.co.jp/gp/product/B07D795SV5/ref=ox_sc_act_title_1?smid=AN1VRQENFRJN5&psc=1)
- 有線LAN環境（推奨）



## ラズパイの基本的なSSH設定

Raspberry Pi Imagerなどを使ってラズパイOSをmicro SDに焼く
僕はデフォのraspbian 32bitを選択

ターミナルを開いてIPアドレスを確認，SSH用ディレクトリの作成
> ifconfig | grep 192
> sudo mkdir -p /boot/ssh

設定 → Raspberry Pi Configuration のインターフェースタブからSSHを有効化
ラズパイを再起動し，macbookから先程のIPアドレスに接続できることを確認

## サーバーのセットアップ

### 事前準備

パッケージの更新
> sudo apt update


### IPアドレスを固定

お使いの環境に合わせて/etc/dhcpcd.confを編集
後に「リモートリポジトリが見つからない」などのネットワークエラーを出さないように，routersやDNSが正しいことを確認する
> \# Example static IP configuration:
> interface eth0
> static ip_address=192.168.1.xx/24
> static routers=192.168.1.1
> static domain_name_servers=192.168.1.1 8.8.8.8

### HDDをマウント
（今回は例として`/mnt/TimeMachine`を使用，変更する場合はsmb.confのパスも変更してください）

HDDのUUIDを探す
> sudo blkid
> \# /dev/sda1: LABEL="BUFFALO_HDD" UUID=“9da1c321-xxxx-xxxx-xxxx-xxxxxxxx9da8" TYPE="ext4"

そして，起動時にHDDが自動でマウントされるように/etc/fstabに追記
> sudo sh -c 'echo "UUID=9da1c321-xxxx-xxxx-xxxx-xxxxxxxx9da8 /mnt/TimeMachine ext4 nofail 0 0" >> /etc/fstab'
> sudo mount -a

<< 注意 >>
マウントに失敗する場合，ラズパイOSが起動しなくなる可能性があるので，
`sudo mount -a`が正常に終了することを確認する
もし`mount: /mnt/TimeMachine: mount point does not exist.`のようなエラーが出た場合，
かならず**再起動する前に**直す

#### Trouble Shooting

たまに`xxx : Already mounted on yyy`のようなエラーが生じることがある．
自分の場合は一度アンマウントすると解決した．

`df` : show mounted devices
`umount [device name]` : unmount device

### Sambaのセットアップ

sambaとavahi-daemonをインストール
ここで設定したsamba IDでTimeMachineにアクセスする
> sudo apt install -y samba avahi-daemon # 選択肢はNOを選ぶ
> sudo smbpasswd -a $USER

sambaの詳細設定
> mkdir ~/work && cd work
> git clone https://github.com/MikiyaShibuya/NAS-PI.git
> cd NAS-PI
> sudo sh -c 'cat smb.conf >> /etc/samba/smb.conf'
> sudo cat smb.conf >> /etc/samba/smb.conf
> sudo ln -s $PWD/samba.service /etc/avahi/services/samba.service

sambaデーモンを起動
> sudo systemctl start smbd
> sudo systemctl start avahi-daemon

サービスの起動を確認
> sudo systemctl status smbd
> sudo systemctl status avahi-daemon

![スクリーンショット 2021-05-29 10.46.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280064/9b50dab5-1c31-d91e-ab21-0b2f41792ecd.png)


## macからNASに接続

LAN経由でラズパイサーバに接続
> Finder → ⌘K → smb://192.168.1.xx (RPi' address) → 接続 → samba ID を入力

この写真のようにTimeMachineドライブが表示されるはず
![スクリーンショット 2021-05-29 10.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280064/c052acb1-84ae-4397-ec74-b1946fa04090.png)

Time Machineのバックアップ先を設定
> システム環境設定 → Time Machine → バックアップディスクを選択 → Time Machine 192.168.1.xx → ディスクを使用 → samba IDを入力

🎊🎉バックアップ先を設定するとバックアップが始まる！🎉🎊

![スクリーンショット 2021-05-29 10.57.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280064/a1823b9d-98fd-d3c9-21ab-917836c41ebb.png)



# NAS for Apple Time Machine (LAN) English ver.
This is an instruction to build Time Machine server in LAN using Raspberry Pi
Reference： https://stash4.hatenablog.com/entry/2018/06/17/184423

## Disclaimer
Although I have confirmed that the backup data can be restored successfully, please operate at your own risk.

## Requirement

- Rspberry Pi
- HDD storage
- Wired LAN

### My configuration

- [Raspberry Pi 3B](https://www.amazon.co.jp/gp/product/B087R57WJX/ref=ox_sc_act_title_1?smid=A2LEO3SQFLYI2F&psc=1)
- [BUFFALO HDD 1TB](https://www.amazon.co.jp/gp/product/B07D795SV5/ref=ox_sc_act_title_1?smid=AN1VRQENFRJN5&psc=1)

## RPi Basic SSH Setup

Write Raspberry Pi OS 32 bit into micro SD card and turn on the device
Open terminal to find out the ip address of RPi and create ssh directory
> ifconfig | grep 192
> sudo mkdir -p /boot/ssh

Open Preferences -> Raspberry Pi Configuration
Enable SSH in Interfaces tab

Reboot the device and check the ssh connection from macbook

## Server Host Setup

### Common

Update package
> sudo apt update

Edit environment setup (anything as you want)
> sudo apt install -y zsh neovim tmux
> git clone https://github.com/MikiyaShibuya/dotfiles.git
> cd dotfiles && ./setup.sh

### Fix IP address

Edit /etc/dhcpcd.conf to fix local IP address.
Uncomment and edit like this according to your environment.
Make sure routers and DNS server are right to prevent network issues after that.
> \# Example static IP configuration:
> interface eth0
> static ip_address=192.168.1.xx/24
> static routers=192.168.1.1
> static domain_name_servers=192.168.1.1 8.8.8.8


### Mount HDD

(using `/mnt/TimeMachine` in this instruction, please edit smb.conf when you using different directory)

Find device and get UUID of HDD
> sudo blkid
> \# /dev/sda1: LABEL="BUFFALO_HDD" UUID=“9da1c321-xxxx-xxxx-xxxx-xxxxxxxx9da8" TYPE="ext4"

Then, write mount setting and check if the HDD was mounted correctly
> sudo sh -c 'echo "UUID=9da1c321-xxxx-xxxx-xxxx-xxxxxxxx9da8 /mnt/TimeMachine ext4 nofail 0 0" >> /etc/fstab'
> sudo mount -a

<< CAUTION >>
If you failed to mount, some message like this
`mount: /mnt/TimeMachine: mount point does not exist.`
will be displayed.
Fix this error BEFORE REBOOTING or your OS will be broken.


#### Trouble Shooting

Some times mounting may be failed like `xxx : Already mounted on yyy`.
Re-mounting the HDD may fix the issue.

`df` : show mounted devices
`umount [device name]` : unmount device

### Samba Setup

Install samba and avahi-daemon (for enabling mDNS)
This password will be required when setting up Time Machine
> sudo apt install -y samba avahi-daemon \# select NO when asked to generate config
> sudo smbpasswd -a $USER

Configure smb daemon
> mkdir ~/work && cd work
> git clone https://github.com/MikiyaShibuya/NAS-PI.git
> cd NAS-PI
> sudo sh -c 'cat smb.conf >> /etc/samba/smb.conf'
> sudo ln -s $PWD/samba.service /etc/avahi/services/samba.service

Start samba daemon
> sudo systemctl start smbd
> sudo systemctl start avahi-daemon

Check if the samba was launched correctly
> sudo systemctl status smbd
> sudo systemctl status avahi-daemon


## Connect to NAS from mac

Mount NAS drive
> Finder → ⌘K → smb://192.168.1.xx (RPi' address) → connect → input your smb ID

`TimeMachine` should be displayed in the list

Setting TimeMachine Backup
> System Preference → Time Machine → Select Backup Disk → Time Machine 192.168.1.xx → Use disk → input your smb ID