8.4. GRUB-0.97

GRUB パッケージは GRand Unified Bootloader を提供します。

概算ビルド時間: 0.2 SBU
必要ディスク容量: 10.2 MB

8.4.1. GRUB のインストール

期待に満ちたあなたの LFS システムはもうほとんど完成しています。 最後にすべきは、このシステムを起動可能にすることです。

[注意]

注意

本パッケージは x86 または x86_64 アーキテクチャにて 32 ビットのライブラリに対してのみビルドできます。 x86_64 にて 32 ビットのライブラリがない (multilib がない) 状態でビルドするなら、本パッケージではなく LILO を用いなければなりません。 他の CPU アーキテクチャに対して 「ブートローディング (boot loading) 」 に関することは、各アーキテクチャごとに提供されている情報を参照してください。

このパッケージは、デフォルトで設定される最適化オプション (-march オプションや -mcpu オプションなど) が変更されていると問題が発生することが知られています。 本パッケージをビルドする際に例えば CFLAGSCXXFLAGS などのような環境変数に、デフォルトの最適化設定を上書きしてしまう設定がある場合は、それらの設定を無効にしてください。

以下のパッチはドライブの検出をより適切に行うためのものです。 また GCC 4.x において発生する問題を解消し、特定のディスクコントローラにおける、より適切な SATA サポートを提供します。

patch -Np1 -i ../grub-0.97-disk_geometry-1.patch

デフォルトで GRUB は 256 バイトの i-ノード (inodes) による ext2 ファイルシステムをサポートしていません。 以下のパッチによりこれを解消します。

patch -Np1 -i ../grub-0.97-256byte_inode-1.patch

GRUB をコンパイルするための準備をします。

./configure --prefix=/usr

パッケージをコンパイルします。 最適化オプションフラグは、テスト処理ルーチンにおいて発生するエラーを回避するためにつけます。

make CFLAGS="-march=i486 -mtune=native -Os"

コンパイル結果をテストするには以下を実行します。

make check

パッケージをインストールします。

make install
mkdir -v /boot/grub
cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub

i386-pc の部分は、お使いのハードウェアに合わせて適切に書き換えてください。

i386-pc ディレクトリには *stage1_5 というファイルがいくつもあります。 それぞれは、いくつかの異なるファイルシステムのために利用するものです。 これらのどれが利用可能か確認し、適切なものを /boot/grub ディレクトリにコピーしてください。 多くのユーザーにとってコピーすべきファイルとして e2fs_stage1_5 ファイルや reiserfs_stage1_5 ファイルがあります。

8.4.2. GRUB の設定

ブートローディングは複雑な話なので、注意すべき内容をいくつか説明しておきます。 現在のブートローダが何であるのか、ブートすべき他のオペレーティングシステムがハードディスク上にあるかどうか、確実に捉えておいてください。 コンピュータが利用できなくなったとき (起動できなくなったとき) にコンピュータを復旧させる緊急起動ディスクを準備しておいてください。

ここで行うのは GRUB の特別なファイルをハードディスク上の特定の場所に書き入れることです。 その前に GRUB ブートフロッピーディスケットを用意してバックアップをとることを強くお勧めします。 空のフロッピーディスケットを挿入し、以下のコマンドを実行します。

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

フロッピーディスケットを取り出して保管しておいてください。 さてそこで grub シェルを実行します。

grub

GRUB ではドライブやパーティションに対して (hdn,m) といった書式の命名法を採用しています。 n はドライブ番号であり m はパーティション番号です。 いずれもゼロから数え始めます。 例えばパーティション hda1(hd0,0)、 パーティション hdb3(hd1,2) となります。 Linux システムでの取り扱いとは違って GRUB では CD-ROM ドライブをハードドライブとしては扱いません。 例えば CD が hdb であり2番めのハードドライブが hdc であった場合、2番めのハードドライブは (hd1) と表記されます。

上の命名方法に従ってルートパーティションを表す正しい表記を定めます。 (もし boot パーティションを別に分けている場合はその表記も定めます。) 以下の例ではルートパーティション (あるいは別に分けられた boot パーティション) が hda4 であるとしています。

GRUB に対して stage{1,2} ファイルを探し出す場所を指定します。 TAB キーを使えば、いつでも入力候補を表示させることができます。

root (hd0,3)
[警告]

警告

以下に示すコマンドは現在あるブートローダを上書きします。 上書きするのが不適当であるならコマンドを実行しないでください。 例えばマスタブートレコード (Master Boot Record; MBR) を管理するサードパーティ製のブートマネージャソフトウェアを利用している場合などです。 そのケースでは LFS パーティションの 「ブートセクタ (boot sector) 」 に GRUB をインストールすることが必要かもしれません。 その場合は次に実行するコマンドが setup (hd0,3) といった形になるはずです。

GRUB を hda の MBR にインストールすることを GRUB 自身に対して指示します。

setup (hd0)

問題なくいけば /boot/grub ディレクトリから見出されたファイル名が表示されます。 ここまでくれば問題ありません。 grub シェルを終了します。

quit

メニューリスト (menu list)」 ファイルを生成します。 これは GRUB のブートメニューを定めるものです。

cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 6.5
root (hd0,3)
kernel /boot/lfskernel-2.6.30.2 root=/dev/hda4
EOF

必要ならホストディストリビューションの項目を加えてください。 例えば以下のようになるでしょう。

cat >> /boot/grub/menu.lst << "EOF"
title Red Hat
root (hd0,2)
kernel /boot/kernel-2.6.5 root=/dev/hda3
initrd /boot/initrd-2.6.5
EOF

Windows とのデュアルブートを行っている場合は、 例えば以下のような項目を加えることでブート可能になるはずです。

cat >> /boot/grub/menu.lst << "EOF"
title Windows
rootnoverify (hd0,0)
chainloader +1
EOF

info grub を見てもよく分からないことがあったら、以下にあるウェブサイトにより GRUB のさらなる情報を参照してください。 http://www.gnu.org/software/grub/

FHS では GRUB の menu.lst ファイルのシンボリックリンクとして /etc/grub/menu.lst を生成することを規定しています。 これを実施するために以下のコマンドを実行します。

mkdir -v /etc/grub
ln -sv /boot/grub/menu.lst /etc/grub

8.4.3. GRUB の構成

インストールプログラム: grub, grub-install, grub-md5-crypt, grub-set-default, grub-terminfo, mbchk

概略説明

grub

Grand Unified Bootloader を実行するコマンド・シェル。

grub-install

指定されたドライブに GRUB をインストールします。

grub-md5-crypt

パスワードを MD5 形式で暗号化します。

grub-set-default

GRUB のデフォルトのブートエントリを設定します。

grub-terminfo

terminfo 名から terminfo コマンドを生成します。 不明な端末が指定された場合には、これを利用することができます。

mbchk

マルチブートカーネルのフォーマットをチェックします。