SSブログ

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/にあります。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。