Debian GNU/Linux(以下、Debian)においてinitrdはmkinitramfsスクリプトで作成する。
主にカーネルパッケージを作成する時に行われる作業なので、kernel-packageあたりと一緒にインストールすることになる。
注意したいのは、mkinitramfsでinitrdが作成される時、一緒に含まれるカーネルモジュールは/etc/initramfs-tools/modules
にて指定しておくこと。ここにPS3のモジュール、特にps3pf_storageが記述されていないと、apt-getなど何かの拍子でinitrdが更新された後ブートできなくなってしまうので要注意だ。
今回はCDブートのために必要なモジュールを追加しておき、mkinitramfsを1回実行することでそのモジュールを含んだinitrdを生成するとよい。
Debianのinitrdはgzip+cpioではあるが、cpioのフォーマットがold ASCIIではなくnew ASCIIになっている。よって、initrdの展開は以下のようになる。
# mkdir bootroot; cd bootroot; zcat initrd | cpio -i -c
展開されたDebianのinitrdをFC5のものと見比べると、多くのスクリプトで構成されており、いくぶんインテリジェントなものになっていることが分かる。
initスクリプトだけでもちょっと複雑なのだが、途中で/scripts
内のスクリプトをインクルードしており、いろいろなモードに対応しているところまで読めると大分攻略できたことになる。
答えを書いてしまうと、Debianのinitrdではカーネル変数の「boot=
」を参照し、このbootに与えられている文字列と同じ名前のスクリプトを「/scripts
」から探して実行している。この/scripts
内にあるスクリプトで行っているのは、ルートファイルシステムをマウントする作業およびその前後の処理となる。
未指定時はローカルドライブをマウントするlocalが実行されているが、その他にnfs経由でルートをマウントするnfsというスクリプトが用意されている。
このマウントスクリプトの構造を利用すると、initrd内をむやみに書き換える必要がなくなりスマートな拡張が行える。
そこで、CDブートのためのマウント作業を行うスクリプトを作成するために、localをコピーしcloverというプロジェクト名の付いたスクリプトを追加で/scripts
の中に用意した。
kboot.confの中でカーネル変数として「boot=clover
」を追加することも忘れてはならない。
後はこのcloverというスクリプトをCDマウントのために改変していくことになる。
どういった形でCDをルートとしてマウントするかといった設定は、そのままCDブートLinuxを設計することになる。それはこの次の項で提案していこう。