次の記事
前の記事

Raspberry Pi日記 ついに成功!

ついにzeroをキーボードとLANの複合デバイスとして認識させることに成功しました!
ついでにシリアルとしても認識できるはずです!!!
とはいってもどうやらwindowsには対応していない雰囲気が漂っています・・・・
手元に実験に使えそうなマシンがないです・・・
なのでこっそり会社に持って行って試します。

それで、ここまできたら次はディスクを書き込み不可にしていつスイッチを切っても困らない状態にします。
普通にリードオンリーでディスクをマウントしてもいいのですが、それでは一時ファイルも作れなくなるので
aufsとfsprotectで対応してみます。
まずはソースの取得から
git clone https://github.com/sfjro/aufs4-standalone.git
cd aufs4-standalone
git checkout aufs4.1
ここでのバージョン指定は使っているカーネルのバージョンに従ってください
uname -a
で表示できると思います。
あとはあらかじめ展開済みのカーネルソースにパッチを当てます。
patch -p1 < aufs4-standalone/aufs4-kbuild.patch
patch -p1 < aufs4-standalone/aufs4-base.patch
patch -p1 < aufs4-standalone/aufs4-mmap.patch
パッチを当てる際にはlinuxのソースの入ってるディレクトリでやってください。パッチファイルの置き場所へのパスは適当に
あとはコンパイルに必要な
fs
Documentation
include/uapi/linux/aufs_type.h
をそれぞれlinuxのソースディレクトリにコピーします。
そこまで行けば
make ARCH=arm CROSS_COMPILE=$MYCC menuconfig
でaufsを有効にします。私はクロスコンパイル環境でやっているので色々指定していますが、piでコンパイルするなら
make menuconfig
でOK
あとはおたのしみのコンパイルターイム
make -j任意の数字 zImage modules dtbs
任意の数字は使ってるPCのコア数の1.5倍ぐらいがいいとかいう噂が

出来上がったカーネルをPiに入れたらあとはfsprotectをインストールしてinitramfsを作ります。
apt-get install fsprotect
sudo update-initramfs -c -k `uname -r`
これでinitrd.img-4.4.16+みたいなファイルができているはずです。あとは設定ファイルの編集
cmdlin.txtの末尾にfsprotectを追加(改行しないように)
config.txtにinitramfs initrd.img-4.4.16+(こっちはちゃんと改行して追加。initrdのファイル名は適宜修正)

これで晴れて壊れにくいシステムになったはずです。
わざわざシャットダウンしなくてもいきなり電源をOFFにしても大丈夫です。
ただし、色々とファイルを変更したりアプリを入れたりしても再起動したら元に戻ってしまいます。
書き込めるように見えるのは読み込み専用のファイルシステムの上にかぶさっているtmpfsに書き込めているだけです。

リードオンリーを解除したいときにはcmdline.txtの末尾の指定を消して再起動でOKです

このままでは/bootがrwになっていますがここをroにしてしまうとroを解除するためにメモリーカードをいちいち取り出して
PCでcodlin.txtを書き換える必要があるので悩ましいところです。
まあ、起動中には/bootの中身は書き込むモノがほとんどいないはずなので良しとしましょう。


コメント