2007年02月01日(Thu) おなかがいたいよ [長年日記]
● [DocoMomo] /etc最小版のinitrd
昨日作った リストを見て、 ファイルとディレクトリを下記にしぼったinitrdを作ってみました。
/sbin /bin /lib /etc/sysconfig/keyboard /etc/sysconfig/init /etc/mtab /etc/ld.so.cache /etc/termcap /etc/security/console.perms.d/50-default.perms /etc/security/console.perms.d/60-libnjb.perms /etc/security/console.perms /etc/inittab /etc/dev.d/default /etc/rc.sysinit /etc/init.d /etc/rc?.d /etc/localtime /etc/cpuspeed.conf /etc/profile /etc/rc /etc/selinux/config /etc/nsswitch.conf /etc/passwd /etc/fstab /etc/blkid/blkid.tab /etc/inputrc /etc/rc.local /etc/momonga-release /etc/redhat-release
とりあえずはハードディスクの/bootにコピーしてgrubから選択して run level 1に起動できるか試してみました。こういう時にファイルだけ 置いておけば後から選べるgrubは便利です。 起動には無事成功して、rootのシェルが使えました。
で、initrdのイメージ(cpioアーカイブをgzip -9で圧縮したもの)の 大きさは、docomomo-0.9.4の29890893バイトに対して/etcをしぼったもの が28872983バイト。これだけ苦労して3.4%の減量。またこれか…。 とは言え、実メモリの使用量はこの差1Mバイト程度は減るわけで、それ はそれでうれしいのかもしれません。
一方、etcをext2のイメージとして持つ場合には、およそ6メガバイト のファイルになります。つまり/etcを後から変えられないDocoMomoに対 して、USBメモリに入るファイルの大きさは合計5メガバイト増える計算。 …まあ許容範囲かなあ。
いまのところ、上のリストにもあるように、/sbin /bin /lib以下の ファイルは全てinitrdに入れるようにしています。これはrun level 1で そこそこの作業ができるようにしたい、と思っているからです。ここで、 /libの内容は、/binにあるファイルからリンクされているものと 昨日のリストにあるものに 限ると、まだまだ減量できるかもしれないですね。そのかわり、/libの 内容もSquashFSにして別のファイルとして持つことになります。あぁ、 unionfsにできるといいのにな。でも、unionfsは、Momongaのカーネルが対応す るまではおあずけです。
(追記) あー。/etc/passwd消し忘れてました。
● [DocoMomo] /lib最小版のinitrd
次に、/etc/passwdを消したあとに、/libにはinitrdに行くコマンドからリンクされているライブラリと、/lib/modulesと、/lib/kbd以下の必要なファイルだけを入れたinitrdを作ってみました。gzip -9したイメージは25068170バイト。これは効く。
で、ブートしてみてわかたことは、rc.sysinitが実行する/sbin/pam_console_applyなどがlibnss_files.so.2を必要とするが、lddでは見つけれられない(nsswitch.confを見てからロードするライブラリを決めるのかな)、また、rc.sysinitは他にもchownやchgrpを実行して、/etc/passwdにrootの行が、/etc/groupに root utmp floppy disk uucp の行が必要、ということでした。
そろそろ、これまでにわかったことをDocoMomoのMakefileに反映して、run level 3まで行く試験をしたいところです。
● ruby-entity-reference-0.1.6をリリースしました
ruby-entity-referenceは、ISO-8859-1あるいはUTF-8の文字列のうち、ヨーロッパ言語の一部の文字を実体参照に変換します。多言語のwwwページの文字コードの変換などの際にお使いください。
リリース0.1.6では、ドキュメントを整備しました。使用例や、APIドキュメントもあります。通常使うAPIは、EntityReference.referenciate(string, encoding, charset)
だけなのですが。
最近のツッコまれどころ