Raspberry Pi (の3) [プログラム]
Raspberry Piが動き始めましたので、rootfsの中身を整理することにします。
このRaspberry Piは、いわゆるディスプレイレスのコントローラとして使用する予定ですので、不要なものを削除し、最終的にはrootfsをread-onlyにしてRAMディスク(tmpfs)上で動作するようにします。
まず、このSDカード上のlinuxの問題点ですが、
- swapをSDCard上に作成する
あったほうがいいけど、それは無茶というもの。RAMが128MB(現在のRaspberry Piは512MB)ならしかたないとは言えるけど…。 - 頻繁に書き換えるディレクトリがSDカード上
/tmp, /var, /etcなど。だからfsprotectを使おうとしたら、aufsバイナリパッケージがない!!!
…LiveCDとかを見習ってください。
fsprotect(または同等品)を入れるまで、なにはともあれfstabを更新します。以下の2つを追加。
/etc/fstab:
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
その後、
# mount /tmp
# mount /var/tmp
すでに/tmpにいくつかファイルがあるけど気にしないことにします。
次に、メモリが512MBありますので、swapを停止します。/etc/fstabを見ると、「dphys-swapfile swap[on|off] を使ってね」と書いてあります。面倒なので、次のようにしました。
# /etc/init.d/dphys-swapfile stop
ついでに、今後swapを使わせないために、
# mv /etc/init.d/dphys-swapfile /etc/init.d/phys-swapfile.orig
とします。
そして、不要なものを削除していきます。まずGUI系のデーモンは削除します。
# apt-get remove --purge consolekit dbus
また、inittabも編集します。
/etc/inittab:
1:2345:respawn:/sbin/getty --noclear 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
これらを全部コメントアウトしてもよいのでしょうが、念のため2つだけ残しておきます。
そして、
# kill -1 1
最終的にはsyslogは転送するか、ramdiskに書きます。今は停止させておきましょう。
# mv /etc/init.d/rsyslog /etc/init.d/rsyslog.orig
必要になったら、元に戻すか、一時的になら、
# /etc/init.d/rsyslog.orig start
すれば動き出します。なお、元に戻しても動かないときは、誰かがupdate-rc.dしたのでしょうから、
# update-rc.d rsyslogd defaults
してやると元に戻ります。
他に、削除した(.origをつけて停止させた)のは、
ntp
triggerhappy
です。triggerhappyはコンソールでのキーボードの特殊操作のハンドリングのようです。ntpは、ネットワークが接続されていないときに、非常に長時間待たされることがあったので削除しました。代わりに、chronyを入れるか、あるいは、ntpdateをinit.dとcronで動かすようにしましょう。
まだまだ削除すべきものはありますので、適宜削除してください。GUIを使わないのですから、X11とかも削除すべきでしょうね。
/etc/の下のcronのためのディレクトリの中も整理しておいた方がよいでしょう。
cron.d/
cron.daily/
cron.hourly/
cron.monthly/
cron.weekly/
run-partsは「ディレクトリは無視する」とマニュアルにありますので、使わないファイルは、.not-run/ディレクトリを掘ってその中へ入れておきましょう。
で、いつもの。
# apt-get update
# apt-get dist-upgrade
そして、fsprotectみたいなこと(initramfsを工夫する)をしなければいけませんから、aufsに限らず、というか、aufsの元(unionfs)を探してみると… unionfs-fuseですね。バイナリパッケージがあると楽なんですが、どうでしょうか。あ、ありますね。インストールしておきましょう。
# apt-get install unionfs-fuse
サンプルのスクリプトは/usr/share/doc/unionfs-fuse/examples/にあります。