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。
  • 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コマンド。

動きは以下のようになる。

  1. /conf/default/etc/remoutにより、/conf/default/etcは/cfg(mmcsd0s2d)と同じ内容になる。
  2. rc.initdisklessにより/conf/default/etcは/etcにコピーされる。コピーといってもbaseに対する上書きになる。上書きではなく削除したいときは、.removeなファイル名にする。
  3. 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をうまく利用してるだけ。