2006年08月21日(Mon) でかいスーツケースをエコノミーのレンタカーに積むのは大変 [長年日記]
● [DocoMomo] それぞれのルートファイルシステムにそれぞれのinit?
今夜も家に帰ってUSBブートに挑戦する。
昨日カーネルモジュールが見つからなかったのは、そもそもkernelパッケージを入れてなかったからだとわかりました。kernelって誰からもrequireされてないのな。kernelとrpmを入れるために必要なパッケージはMomonga 3の場合76個。yumを入れるほどのことはないと思ったので、依存を手で解決しましたとも。(yumは比較的初期の段階でchrootしてしまうようでインストール先でyumが動くようにしてやらないと動いてくれないみたい。rpmはインストールしてrpmdbをいじる時だけchrootするようで、動作するためにはインストール先のパッケージに依存していないように見えた。)
USBから起動したnashスクリプトのinitで、SquashFSの/lib /sbin /bin /usrをマウントしてからBusyBoxの/bin/ashを起動して、/bin/ashのコマンドラインから本来のシステムの/sbin/initを起動してみました…カーネルモジュールが無い問題は解決していたけれど、runlevelを指定しないと起動しない、/dev/initctlが無いと文句を言う…だめじゃん。別のinitが起動しているときには、run levelを変えさせるはたらきしかしてくれないようです。あ、そういえば/etcがありませんでしたが。
というわけで事態はちょっと複雑に。
- mkinitrdがつくってくれるinitrdの中のinitでは、initrdのルートファイルシステムに依存しない(ループバックマウントしなくていい)ような本来のルートファイルシステムしか扱えない
- initrdのルートファイルシステムをそのまま本来のルートファイルシステムにする場合、initrdのinitから本来の/sbin/initを起動したいけど、難しそう
というわけで次の手は、initrdでrun level 1まで持っていって、init.dの下のスクリプトでSquashFSをマウントすることかな。この場合、run level 1まで行くのにどのファイルをinitrdに持っていく必要があるのか判断するのが大変そうです。
最近のツッコまれどころ