仮想マシンにシリアルコンソールで接続できるようにする

Pocket

さくらのVPSのリモートコンソールと同じ原理ですね。
SSHすら許されない状況に陥った時の非常用のコンソールになります。
ホストOS側からゲストOSにvirsh consoleで接続します。
シリアルインタフェースが定義されていても以下の設定がされていないと
virsh consoleで接続してもまったく先に進めないので注意が必要です。

  • KVM
  • CentOS

/etc/grub.conf

起動時にシリアルインタフェースが起動するようにブートローダーの設定に追加します。
カーネルパラメータの後ろに console=tty0 console=ttyS0,115200n8 を追加します。

# vi /etc/grub.conf
title CentOS (2.6.32-279.22.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=/dev/mapper/... quiet console=tty0 console=ttyS0,115200n8
        initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

シリアルコンソールにrootでログインできるようにする

このままだとrootでログイン出来ないのでsecurettyに以下の設定を追加します。

# vi /etc/securetty
(snip)
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
↓追加
ttyS0

上のままだけだとシステムを再起動しない限りシリアルコンソールが有効になりません。
しかもコンソールが死んだら二度と接続出来ません。
このままだと困るので、もう少し設定したいと思います。

注意したいのですが、CentOS6系とCentOS5系ではやり方が違います。
CentOS6系では何度telinitしてもシリアルコンソールは有効になりません。
なぜならCentOS6系ではinitデーモンがSysVInitからUpstartに変更になったからです。

CentOS6系

Upstartシステムです。
シリアルコンソールジョブ定義ファイルを開いてrespwanの記述が書いてあるかどうか確認します。
以下のようにrespawnが書いてなかったら追加します。

# vi /etc/init/serial.conf
start on fedora.serial-console-available DEV=* and stopped rc RUNLEVEL=[2345]
stop on runlevel [S016]

instance $DEV
respawn
pre-start exec /sbin/securetty $DEV
exec /sbin/agetty /dev/$DEV $SPEED vt100-nav
(snip)

すぐさま設定を反映させるためinitctlコマンドを使用します。
シリアルコンソール未設定の場合だと以下のような表示となっています。

# initctl list
(snip)
serial stop/waiting

シリアルコンソールを有効にしたいのでinitctl startします。

# initctl start serial
initctl: Unknown parameter: DEV
Usage: DEV=ttySX SPEED=Y  - where X is console id and Y is baud rate

使い方はDEVとSPEEDを渡してやるようです。

# initctl start serial DEV=ttyS0 SPEED=115200

起動したか確認してみます。

# initctl list
(snip)
serial (ttyS0) start/running, process 19181

これでOKです。

CentOS5系

SysVInitシステムです。

/etc/inittab

シリアルコンソールが立ち上がるようにinitに教えます。
以下の行を追加します。
respawnでシリアルプロセスが死んだら再起動するようになります。

# vi /etc/inittab
S0:12345:respawn:/sbin/agetty ttyS0 115200

設定したらすぐにシリアルコンソールを使えるようにしたいので、initに設定をすぐに反映させるように教えます。

# telinit q

これでOKです。

シリアルコンソールにつながらないんだけど・・・

何十回telinitやってもシリアルコンソールにつなげない。
そんなときはinittabの設定を見なおしてください。
ボーレート(baud rate)が115200ではなく112500になっちゃってたとか、

S0:12345:12345:/sbin/agetty ttyS0 115200

のように書き方を間違っているとエラーを吐かないし、何百回telinitしてもつながるようにならないので注意が必要です。

参考サイト

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください