Red Hat Linux 7.2, 7.3, 8.0では、カーネルのブートローダにGRUBが標準で採用されるようになりました。ext3ファイルシステムが使われる環境では、ブート時にext3ファイルシステムのマウントに必要なinitrdイメージの指定も欠かせません。アプリケーション・プログラマやシステム・インテグレータにとってGRUB は、以前のLILOより使い易く、メリットも多いのですが、デバイスドライバの開発等で頻繁にカーネルを入れ替える作業では、わざわざブートローダをLILOに変える場合もあり、あまり使われていないかも知れません。
ここではGRUB と initrdを使ってブートする環境に、新しくkernel.orgからダウンロードしたカーネルを組み込んでそのまま動作させるとともに、initrdの中身を直接編集して、毎回mkinitrdでinitrdイメージを作成しなくても、initrdイメージを開発用にカスタマイズしたカーネルで流用させる方法を紹介します。
kernel.orgから一般的な方法を用いて、組み込むためのカーネルをダウンロードし、カーネルをコンパイル、リンクして作成します。
以下は、kernel-2.4.19を/usr/src/linux-2.4.19に展開した場合の操作例です。
# cd /usr/src/linux-2.4.19
# make mrproper
# make ?config #(好きなCONFIG作成方法でconfigファイルを読み込んで設定します
# make dep
# make clean
# make bzImage
# make modules
# make modules_install
# cp -p System.map /boot/System.map-2.4.19
# cp -p arch/i386/bzImage /boot/vmlinuz-2.4.19
★注意! 日本語Red Hat Linux 8.0 では、付属のコンパイラのgcc-3.2が賢くなりすぎて、あらゆるメッセージを日本語で出力します。その結果、カーネルコンパイル時にはgccに対して期待している「install」の文字列を出力しないので、カーネルコンパイルでいきなりエラーとなります。理由がわかればいろいろな対策ができると思いますが、例えばShellでコンパイルする前に。
# LANG=
という環境変数LANGをクリアするコマンドで、このエラーは回避する事ができます。
この回避策は、日本語Red Hat Linux 8.0プレインストールカーネルの2.4.18-14をコンパイルする場合にも必要です。
以下は、前項の「カーネルコンパイル」手順が終った後での作業です。
Redhatブート用RAMDISKファイルを2.4.19用に名前を変えて展開
# gzip -cd /boot/initrd-2.4.18-14.img > /tmp/initrd-2.4.19
RAMDISKファイルのマウント
# losetup /dev/loop0 /tmp/initrd-2.4.19
# mkdir /loop0
# mount /dev/loop0 /loop0
2.4.19用ローダブル・モジュールの上書きコピー
# cd /loop0
# cp -p /usr/src/linux-2.4.19/fs/ext3/ext3.o lib
# cp -p /usr/src/linux-2.4.19/fs/jbd/jbd.o lib
linuxrcファイルの編集
# vi linuxrc
<==== 編集内容ここから:insmodに'-f'オプションを付けます。(4行目と6行目)===>
#!/bin/nash
echo "Loading jbd module"
insmod -f /lib/jbd.o
echo "Loading ext3 module"
insmod -f /lib/ext3.o
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Creating block devices
mkdevices /dev
echo Creating root device
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc
<====ファイルは、ここまで====>
RAMDISKファイルのアンマウントと2.4.19用圧縮イメージの作成
# cd /tmp
# umount /loop0
# gzip -c initrd-2.4.19 > /boot/initrd-2.4.19.img
# cd /boot/grub
# vi grub.conf
<==== 編集内容の一部、ここから:2.4.19のtitle行以下を追加します。(以下の4行目から7行目)
===>
default=0
timeout=10
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.19) from kernel.org
root (hd0,1)
kernel /boot/vmlinuz-2.4.19 ro root=LABEL=/
initrd /boot/initrd-2.4.19.img
title Red Hat Linux (2.4.18-14)
root (hd0,1)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
<====編集内容の一部は、ここまで====>
※ファイルの編集が終った後は、何もせずに(LILOのようにliloコマンドを実行する必要無しに)ブート可能です。
GRUBのしくみやgrub.confの記述に関して興味があれば、Google等で検索して下さい。
ここでのポイントはlinuxrc内のinsmodに'-f'を付ける事です。このために、今後はカスタマイズした開発中の派生バージョン"2.4.19-special"
のカーネルを新たに作成しても、同じinitrd用RAMDISK圧縮イメージが使える可能性は高いと思います。2.4.20以降でどうなるかは、各自で試してみて下さい。
Last editted on 4/10/2003
Copyright(c) 2003, Device Drivers Limited 戻る→