・P-Plamo の内部構造(その1)
P-Plamo の DVD イメージを ls してみると以下のようになります.
# ls /cdrom ChangeLog initramfs/ isolinux/
このうち,ブートに必要なファイルは isolinux ディレクトリにまとめています.
# ls -l /cdrom/isolinux/ 合計 1170640 -r--r--r-- 1 root root 2048 2月 28日 13:02 boot.cat -r--r--r-- 1 root root 2106368 2月 28日 13:02 initrd.gz -r--r--r-- 1 root root 14336 2月 28日 10:50 isolinux.bin -r--r--r-- 1 root root 301 2月 24日 13:10 isolinux.cfg -r--r--r-- 1 root root 122361 2月 24日 11:20 plamo41.lss -r-xr-xr-x 1 root root 1191424000 2月 27日 12:55 rootimg.squash* -r--r--r-- 1 root root 311 2月 24日 11:13 sample.msg -r--r--r-- 1 root root 321 2月 28日 01:27 syslinux.cfg -r--r--r-- 2 root root 2531888 2月 24日 11:13 vmlinuz -r--r--r-- 2 root root 2531888 2月 24日 11:13 vmlinuz-2.6.27.4-squashfs
各ファイルの役割は以下の通りです.
boot.cat : isolinux のブートカタログ(作業用)ファイル initrd.gz : 起動用 initramfs isolinux.bin : CD/DVD 用のブートローダ本体 isolinux.cfg : isolinux 用設定ファイル plamo41.lss : ブート時に表示される splash イメージ rootimg.squash : squash-fs 化したファイルシステム sample.msg : 起動時に表示されるメッセージファイル syslinux.cfg : USB ブート用の設定ファイル vmlinuz, vmlinuz-2.6.27.4-squashfs : Linux カーネルイメージ(ハードリンク)
DVD から起動すると,まず BIOS が DVD 上の isolinux.bin を読み, isolinux.bin は isolinux.cfg の設定に従ってカーネルと initrd.gz をメモリに読み込んで,以下の処理をカーネルに委ねます.
isolinux.bin から以後の処理を託されたカーネルは,initrd.gz に指定した ファイルを initramfs として rootfs に展開して,そこをルートファイルシステム として自身を起動します.
起動されたカーネルは自らに組み込まれたドライバで認識できる周辺機器を認識, 初期化した上で,rootfs 上にある(= initrd.gz の) /init を実行します.
P-Plamo では,initrd.gz に組み込んだ /init はシェルスクリプトで, このスクリプトを用いて squashfs や aufs 用のモジュールドライバなど, DVD とその上にある squashfs をマウントするために必要なモジュールドライバを 組み込み,まず DVD を /cdrom にマウントし,その上(/cdrom/rootimg.squash)にある squashfs 化されたファイルシステムを /loop にマウントします.
その後,/loop 上の RO な squashfs 上に,/var や /etc 等, 書き込みが必要なディレクトリについて /tmp/ow/ 上に作ったディレクトリを union mount して RW 化した上で,squashfs 上のファイルシステムを新たな ルートファイルシステムにするために switch_root コマンドを実行します.
その後の処理は通常の Plamo Linux と同じで,/sbin/init が /etc/inittab を見て,run level に応じた rc ファイルを実行して,,となります.ただし, /etc/rc.d/rc.S については RO な squashfs 上のファイルシステムは fsck できないので,そのあたりの処理は省略するような rc.S ファイルを用意して, 元の /etc/rc.d/rc.S に置き替えて使うようにしています。