Raspberry PiをRead onlyなSDカードで運用するためNanoBSDのめも
NanoBSDの仕組み
/etc/disklessが存在すると、/etc/rc.initdisklessが動く。 /conf/base, /conf/defaultは設定ファイルのデフォルトを置いておく。 rc.initdisklessは、/conf/base, /conf/defaultの順で上書きしていく。
特殊なファイル
- md_size
- そのディレクトリをtmpfsにすろときのサイズの指定。512バイトで1ブロックのときのブロック数で指定。
10240
なら5MB。
- そのディレクトリをtmpfsにすろときのサイズの指定。512バイトで1ブロックのときのブロック数で指定。
- remount
- そのディレクトリに別のファイシステムをマウントする。ファイルの中にマウントの指定をする。
mount -o ro /dev/mmcsd0s2d
みたいに。
- そのディレクトリに別のファイシステムをマウントする。ファイルの中にマウントの指定をする。
crochetのNanoBSD
- etcは5MBのtmpfs。内容はデフォルトにSDカードの設定用パーティションの内容で上書く。
- varは16MBのtmpfs。
- /conf/baseは、もとの/var, /etcのコピー。
実際の構成
- /conf/base/etc/md_size
- /etcのサイズ
- /conf/base/var/md_size
- /varのサイズ
- /conf/default/etc/remount
- /conf/default/etcに対し、設定用のパーティション
mmcsd0s2d
をマウントするときのmountコマンド。
- /conf/default/etcに対し、設定用のパーティション
動きは以下のようになる。
- /conf/default/etc/remoutにより、/conf/default/etcは/cfg(mmcsd0s2d)と同じ内容になる。
- rc.initdisklessにより/conf/default/etcは/etcにコピーされる。コピーといってもbaseに対する上書きになる。上書きではなく削除したいときは、.removeなファイル名にする。
- rc.initdisklassにより/conf/default/varは/varにコピーされる。コピーといってもbaseに対する上書きになる。上書きではなく削除したいときは、.removeなファイル名にする。
mmcsd0s2dの内容
- /etcのレイアウトそのまま。(コピーだからね。)
- etc/localは、/usr/local/etcの中身。crochetでビルド時に、/usr/local/etcは/etc/localにコピーして、/usr/local/etcは/etc/localへのリンボリックリンクにしている。
他
/etc/rc.conf - root_rw_mount=NO - /はRead Onlyでマウント - entropy_file=NO - 乱数のエントロピーのキャッシュは使わない
細かい動きは、/etc/rc.initdisklessを読む。NanoBSDって/etc/rc.initdisklessをうまく利用してるだけ。