Read Only Raspberry Pi
Raspberry Piをいくつか運用していてよくSDCardが壊れるなと思ってより耐性の高いカードを買わないとと思っていたら、SDカードに書き込まずに運用するということが広く行われているということを発見してトライ。Docker対応する方法は簡単には見つからなかったので試行錯誤した。
以下作業メモ
普通にセットアップ(事前に/boot/ssh, /boot/wpa_supplicant.conf を作成)
raspi-configでpassword, hostname, timezoneの設定
tmux, emacsをインストール
watchdogの設定 (1)
readonly modeにする基本設定 (2)
外部ディスクの追加
# /etc/fstab
PARTUUID=abc-def /media/foobar ext4 defaults,auto,users,rw,nofail,x-systemd.device-timeout=5 0 0
PARTUUIDはblkidで確認。
この辺りまでは既にやり方がネットに書かれていたのでそれに従っただけ。
- containerdのファイルを外部ディスクに移動
mv /var/lib/containerd /media/foobar
ln -s /media/foobar/containerd /var/lib
- dockerの作業フォルダも外部ディスクに
# /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --data-root /media/foorbar/docker --containerd=/run/containerd/containerd.sock
- 時刻の設定 NTPは時間が違いすぎるとうまく動かないので、起動スクリプトの中でntpdateを呼ぶようにした。 ただし、まだhostname serviceが動いていないのでipで指定する必要がある(変わったらまずい)
# /usr/lib/ntp/ntp-systemd-wrapper
ntpdate 133.243.238.244
もちろんexternal driveが壊れる可能性もあるけど、docker-composeのファイルとかがSDCardにあればすぐに再構築できるのであまり問題はなさそう。