インストールの手順自体をいじりたければ,RedHat の CD-ROM またはお近く の RedHat ミラーサイトから,インストーラのソースコードを入手してくださ い.これはディストリビューションのトップディレクトリにある i386 ディレクトリの下の misc/src/install ディレクト リにあります.
RedHat の起動ディスクを調べれば,Linux カーネルである vmlinuz に加え,大きなファイル initrd.img があることに気づくと思いま す:
-rwxr-xr-x 1 root root 559 May 11 15:48 boot.msg
-rwxr-xr-x 1 root root 668 May 11 15:48 expert.msg
-rwxr-xr-x 1 root root 986 May 11 15:48 general.msg
-rwxr-xr-x 1 root root 968842 May 11 15:48 initrd.img
-rwxr-xr-x 1 root root 1120 May 11 15:48 kickit.msg
-r-xr-xr-x 1 root root 5352 May 11 15:48 ldlinux.sys
-rwxr-xr-x 1 root root 875 May 11 15:48 param.msg
-rwxr-xr-x 1 root root 1239 May 11 15:48 rescue.msg
-rwxr-xr-x 1 root root 402 May 11 15:48 syslinux.cfg
-rwxr-xr-x 1 root root 444602 May 11 15:48 vmlinuz
ご想像の通り,これはファイルとして格納されている別の ext2
ファ
イルシステムです.ただし少しひねりが入っています.実際には圧縮もされて
いるのです.このファイルを展開して,その結果をマウントすることができます.
操作例を以下に示します:
# gzip -dc /mnt/boot/initrd.img >/tmp/initrd.ext2
# mkdir /mnt/initrd
# mount -o loop /tmp/initrd.ext2 /mnt/initrd
このファイルシステムで最も重要な部分は,起動ディスクに入っているローダ ブルカーネルモジュール群でしょう.新しいバージョンのドライバをマージす る必要があるなら,これを静的にリンクした新しいカーネルで vmlinuz を置き換えるか,あるいはモジュール群を差し替える必要 があります.さらに,空きディスクを確保するために他のモジュールを捨てる 必要があるかもしれません.
モジュール群は modules/modules.cgz ファイルです.これはどんな
ファイルなのでしょうか? これは実際には圧縮した cpio
ファイル
です.読者の皆さんが信じるかどうかは分かりませんし,もう誰も
cpio
なんて使ってないと思われるかもしれませんが! 実際には RPM
パッケージ自体も内部的には cpio
を使っています.以下の手順は
モジュール群のファイルをハックするための方法です:
# gzip -dc /mnt/initrd/modules/modules.cgz >/tmp/modules.cpio
# cpio -itv <modules.cpio >modules.listing
# mkdir modules
# cd modules
# cpio -idumv <../modules.cpio
筆者が知る限りでは,現在の Linux(少なくとも主要ディストリビューション では)には圧縮されたファイルシステムを透過的に扱う方法は無いはずです. もっと良い方法があればお知らせください!
何らかの変更を行った場合には,以下の処理も忘れずに行ってください:
cpio
を使ってアーカイブを作り直します.作り直しの方法
は,読者の皆さんへの宿題としておきます….gzip
を使って圧縮します.gzip
を使って再び圧縮し
ます.
最後に,このように修正した起動ディスクの設定を用いて新しい起動フロッピー を作成することができます.作成は例えば以下のように行います:
# cat boot.img >/dev/fd0