4.2. GRUB ブートローダーを設定する

GRUB は様々なファイルシステムから、 様々な種類のオペレーティングシステムがブートできるように設計された ブートローダーです。 Linux がインストールできるルートファイルシステム の種類がますます多くなってきているので、 GRUB は一般的になりつつあります。

GRUBGNU の info ファイル形式で文書になっています。この文書を見る場合は、 info grub とタイプして下さい。

GRUB の設定ファイルは、 /boot/grub/menu.lst です。 しかし、ディストリビューションによっては、 別の設定ファイルを使っているものもあります。例えば、 Red Hat Linux では /boot/grub/grub.conf というファイルを使っています。

GRUB の設定ファイルは実行時に解釈されます。 このためマシンをリブートするまで、構文上のエラーは検出されません。 ですから、タイプミスをしないように気をつけて下さい。

まず、GRUB の設定ファイルを編集して、 splashimage のエントリは、いずれも削除して下さい。 このエントリを削除しないと、 GRUB 0.90 では 非常に奇妙な動きになります。シリアルコンソールと 付属のモニター・キーボードとの間で、制御を転送しあってしまいます。

GRUB の設定ファイルに password コマンドがまだ無い場合は、 ハッシュしたパスワードを作って下さい。 作り方は Figure 4-4 を参照して下さい。 このパスワードは root のアクセス権限を得るのに使えますから、 良い(推定されにくい)ものにしてください。

Figure 4-4. md5crypt を使って、 GRUB 用のハッシュしたパスワードを作る

grub> md5crypt
Password: **********
Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

このハッシュ化されたパスワードを GRUB の設定ファイルで使って下さい。 この様子は、 Figure 4-5 に示してあります。

Figure 4-5. パスワードを要求するようにした GRUB の設定

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.

Figure 4-6 に示すように、 シリアルポートを定義し、 そのシリアルポートを使うように GRUB を設定して下さい。

Figure 4-6. シリアルコンソール用の GRUB の設定

serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal serial

--unit というのはシリアルポートの番号のことで、 ゼロから数えます。 unit 0 が COM1 になります。

--parity の値は省略せずに、 noeven そして odd のように、一字一字はっきりと綴って下さい。 ne そして o のような、一般によく使われる省略形は 受け付けません

なぜだか分からないけれども、シリアルポート上に出力が何もない場合は、 serial コマンド、または terminal コマンドの構文エラーを疑って下さい。

シリアルポートの他に、付属のモニター・キーボードでも GRUB ブートローダーを管理したい場合は、 Figure 4-7 にある別の設定を使って下さい。

Figure 4-7. シリアルコンソールおよび、付属のモニター・キーボード用の GRUB の設定

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

シリアルポートと付属のモニター・キーボードの両方を設定すると、 タイムアウトになるまで、両方のデバイスでキーの押下が要求されます。 キーが押されると、キーを押したそのデバイスにブートメニューを表示します。 ちょっとまごつくかもしれませんが、他のデバイスには何も現れません。

キーを何も押さないと、 terminal コマンドで serialconsole のいずれか最初に記述してある方にブートメニューを表示します。 timeout で設定された時間が満了した後、 default で設定されたデフォルトオプションの内容でブートします。

Figure 4-8. シリアルコンソールと付属のモニター用に設定した場合の、 デフォルトデバイスへの GRUB の出力

Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.

    GRUB  version 0.90  (639K lower / 162752K upper memory)

 +-------------------------------------------------------------------------+
 | [ Red Hat Linux (2.4.9-21)   ]                                          |  
 |                                                                         |
 |                                                                         |
 +-------------------------------------------------------------------------+
      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS or 'p' to enter a
      password to unlock the next set of features.

   The highlighted entry will be booted automatically in 10 seconds.

VT100 端末を使っていない場合は、 カーソルキーを使った GRUB のメニュー項目の選択ができないかもしれません。しかし、 Figure 4-8 に示したやり方は、文字とおり正しいのです。 Use the ^ and v keys は、キャレット(^)キー (Shift-6) でカーソルが上方に動き、 v キー (V) でカーソルが下方に動くという意味です。

GRUB の設定に際しては、 2 種類のタイムアウトが関係していることに注意して下さい。 Press any key to continueterminal --timeout=10 コマンドで設定した時間だけ表示されており、 キーボードか端末でだれかがキーを押して、 入力フォーカスを取得するのを待っています。 それからメニューが timeout 10 秒間表示されて、 その後でデフォルトのブートオプションが採用されます。

シリアルポートに取り付けた端末が、本物の VT100 でも VT100 のエミュレータでもない場合は、 GRUB のコマンドラインインタフェースを使わざるをえません。 このインタフェースは GRUB のメニューインタフェースよりもずっと難しいのですが、 VT100 の端末言語が無くても使えます。

Figure 4-9. VT100 以外の端末でコマンドラインインタフェースを使う場合の GRUB の設定

terminal --timeout=10 --dumb serial console

この HOWTO では、 GRUB のコマンドラインの使用方法は説明しません。 このコマンドラインははるかに複雑なうえエラーが出易いので、 本番機で使うのはお奨めできません。 名人なら、カーネルのブートに必要なコマンドは GRUBinfo マニュアルを調べればいいはずだということはわかっているでしょう。

GRUB のメニューは、 P を押してパスワードを入力したら、 対話的に編集できるようになります。 メニュー項目を追加して、 別のランレベルでマシンをブートするというのがうまいやり方です。 デフォルトランレベル用のメニューエントリと シングルユーザーモード (ランレベル s) 用のメニューエントリの設定サンプルを Figure 4-10 に示してあります。 シングルユーザーモードについては、lock コマンドを使ってパスワードを要求するのを忘れないで下さい。 シングルユーザーモードでは、 Linux のパスワードが 要求されません。

Figure 4-10. GRUB のメニューにシングルユーザーモードのオプションを追加する

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.
default 0
title Red Hat Linux (2.4.9-21)
        root (hd0,0)
        kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6
        initrd /initrd-2.4.9-21.img
title Red Hat Linux (2.4.9-21) single user mode
        lock
        root (hd0,0)
        kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 s
        initrd /initrd-2.4.9-21.img

kernel コマンドと initrd コマンドにあるファイル名は、 GRUB をインストールしたディレクトリからの相対パスになっています。 GRUB をインストールするディレクトリは、 普通 /boot/grub です。 ですから、 /vmlinuz-2.4.9-21 というのは、 実際は /boot/grub/vmlinuz-2.4.9-21 というファイルになります。

これでシリアルコンソールが使えるように GRUB を設定しました。 しかしまだ、 GRUB からブートするカーネルを、 シリアルコンソールが使えるように設定しなければなりません。