Sun X4100 ServerのシリアルコンソールをDebian GNU/Linuxから使う

研究室でSun X4100 Serverを運用しているのですが、管理の都合でDebian GNU/Linux (lenny)を導入しました。この機種には標準オプションとしてサービスプロセッサ(ILOM)が付属しており、リモートからの電源On/Off、グラフィカルコンソールの転送まで行うことができます。グラフィカルコンソールの転送は便利なのですが、sshdが起動していない状態の管理のみを行えばよい、という単純な状況では、オーバースペックすぎます。そこで、ILOMのもうひとつの機能である、シリアルコンソールを利用できるようにします。キャラクタベースなので、ネットワークの負荷も軽く、Java等の追加ソフトウェアも必要ありません。Solarisを導入した際には、シリアルポートを認識すると、そのポート上のコンソールが自動で有効になりましたが、Debian GNU/Linux (lenny)ではやってくれないため、いくつか手動での設定が必要になります。
なお、すばらしいことに、Sun X4100 ServerのILOMでは、このシリアルポートからBIOSの情報、SAS RAIDの設定すらできるようになっています。

ログインするための設定

まず、OS上からILOMのシリアルポートが認識されているかどうかを確かめます。次のようにポートがあることを確認できればOKです。

shell $ dmesg | grep ttyS
[    1.117705] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.117705] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

次に、/etc/inittabファイルを編集して、シリアルポートからログインできるようにします。Debian GNU/Linux (lenny)では、設定例はすでに記載されており、コメントアウトされているだけなので、簡単です。

#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

上のような設定例の行があるので、ttySの後の数字がdmesgの出力と同じものをみつけて、行頭の#をはずします。多くの場合ttyS0になっていると思います。

T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

これで設定完了です。再起動は必要なく、次のコマンドを打ったら、すぐに使えるようになっているはずです。

shell # init q

ブートローダの設定

上までの設定が完了すると、BIOSはいじれますし、ログインすることもできるのですが、ブートローダがシリアルコンソールに出てきませんし、起動させるkernelの変更や、kernelに与えるオプションもいじることができません。起動時のログもシリアルコンソールに表示されません。トラブルシューティングができない片手落ちの状態です。ここでは、私がこれまで慣れているDebian GNU/Linux特有の方法を用いたGRUB Legacy(0.9x)の設定を行います。
まず、/boot/grub/menu.lst (またはインストール方法によっては/boot/boot/grub/menu.lst)ファイルを開いて5行目に、次の行を挿入します。

## serial console
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

この2行で、通常の端末tty0とシリアルコンソールttyS0の両方からGRUBメニューにアクセスできるようになります。次に、起動時のカーネルログをシリアルコンソールにも表示する設定を行います。/boot/grub/menu.lstを再度開いて、次のkoptで始まる行を探します。

# kopt=root=/dev/sda1 ro

この行の最後に、次のように設定を付け加えます。このとき、行頭の#を削除してはいけません。consoleで始まる設定が2つともあるのが正しい設定です。Debianでは、この行を設定することで、カーネルのアップデートの際にも自動的にオプションを付与してくれるようになります。

# kopt=root=/dev/sda1 ro console=tty0 console=ttyS0,9600

あとは、この設定ファイルを反映させるだけです。インストールするべきMBRの位置は、/boot/grub/device.mapを見て決めます。今回X4100では、/dev/sdbになっていました。

shell # update-grub
shell # cat /boot/grub/device.map
(hd0)   /dev/sdb
shell # grub-install /dev/sdb

上のようにインストールすると、GRUB Legacyの設定が完了します。

セキュリティなどに関する補足

シリアルコンソールの設定は、検索するとたくさんでてきます。今回のこのメモでGRUBへのセキュリティに関する記述を無視しているのは、このシリアルコンソールはILOMに接続されており、ILOMに接続する際のパスワードでは守られているからです。本当のRS-232C接続ポートがあるという場合には、やはり、GRUBのパスワードなどの設定は避けて通れないものと思います。