読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

VMware ESXi 上の CentOS / Ubuntu でコンソールを有効化するには

Linux VMware

仮想環境を使うと検証がはかどります。ただ、仮想環境上にクローズなネットワークを作って検証する場合は(IP での疎通性が無い為)いちいち VI Client や Web Client からコンソール接続する必要があり、不便です。しかし、VMware では仮想マシンのコンソールをネットワークにリダイレクトする機能があるので、これを使えば VI Client や Web Client を使わなくても仮想マシンのコンソールに接続出来て便利です。今回は CentOSUbuntu 等の仮想マシンのコンソールポートに TELNET で接続出来るように設定してみます。

ESXi のファイアウォール設定変更

デフォルトでは ESXi ホストのファイアウォール機能が有効なので、仮想マシンのコンソールにアクセスすることが出来ません。まずは ESXi ホストのファイアウォール設定を必要な通信が許可されるように変更します。ホストの「Configuration → Security Profile →(Firewall の)Properties」を選択します。

f:id:sig9:20150728000102p:plain

ファイアウォールのプロパティが表示されます。「VM serial port connected over network」(Incoming / TCP23, 1024-65535)という行にチェックを入れ、OK を押します。

f:id:sig9:20150728000110p:plain

仮想マシンへシリアルポートの追加

次は仮想マシンへシリアルポートを追加します。該当仮想マシンの構成を表示し、画面上部の「Add」を押します。

f:id:sig9:20150728000119p:plain

追加可能なハードウェアの一覧が表示されます。「Serial Port」を選択して次に進みます。

f:id:sig9:20150728000129p:plain

「Connect via Network」を選択して次に進みます。

f:id:sig9:20150728000135p:plain

まず「Server(VM listens for connection)」を選択します。Port URI には「telnet://[ESXi ホストのアドレス]:[ポート番号]」を入力します。「ESXi ホストのアドレスが 192.168.100.100」「該当仮想マシンへのコンソール接続に使いたいポートは 50001」の場合、下図のように「telnet://192.168.100.100:50001」と設定します。

f:id:sig9:20150728000141p:plain

CentOS 6.x の場合

CnetOS 6.x の場合、以下の順序で作業します。

  1. /etc/grub.conf を修正する
  2. OS 再起動

私の環境だと /etc/grub.conf は以下のようになっていました(なぜか、kernel 行の引数に同じオプションが複数回、指定されていました……)。

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-504.30.3.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-504.30.3.el6.x86_64 ro root=UUID=4c6d88a1-8646-4a5f-a2e7-0f2ff6cac15c rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM crashkernel=auto rhgb quiet rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-504.30.3.el6.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=4c6d88a1-8646-4a5f-a2e7-0f2ff6cac15c rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM crashkernel=auto rhgb quiet rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-431.el6.x86_64.img

これに以下の修正を加えます。

  1. serial 行を追加
  2. terminal 行を追加
  3. kernel 行の末尾に console オプションを追記

修正後の /etc/grub.conf は以下の通りです。

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
terminal --timeout=1 serial console
title CentOS (2.6.32-504.30.3.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-504.30.3.el6.x86_64 ro root=UUID=4c6d88a1-8646-4a5f-a2e7-0f2ff6cac15c rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM crashkernel=auto rhgb quiet rd_NO_DM rhgb quiet console=ttyS0,115200
	initrd /initramfs-2.6.32-504.30.3.el6.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=4c6d88a1-8646-4a5f-a2e7-0f2ff6cac15c rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM crashkernel=auto rhgb quiet rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-431.el6.x86_64.img

/etc/grub.conf の修正を反映する為、OS を再起動します。

sudo reboot

これでコンソールが有効化されました。

CentOS 7.x の場合

CentOS 7.x の場合、以下の順序で作業します。

  1. /etc/default/grub を修正
  2. grub2 の定義アップデート
  3. OS 再起動

私の環境だと /etc/default/grub は以下のようになっていました。

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

GRUB_CMDLINE_LINUX」を以下のように修正します。

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet console=tty0 console=ttyS0,115200n8r"
GRUB_DISABLE_RECOVERY="true"

grub2 の定義をアップデートします。

grub2-mkconfig -o /boot/grub2/grub.cfg

最後に OS を再起動し、設定を反映します。

reboot

これでコンソール接続出来るようになります。

Ubuntu 14.x の場合

Ubuntu 14.x の場合、以下の順序で作業します。

  1. /etc/init/ttyS0.conf を新規作成
  2. ttyS0 を開始する

まず、以下の内容で /etc/init/ttyS0.conf を新規作成します。

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -8 115200 ttyS0

ttyS0 を開始します。

sudo start ttyS0

これでコンソール接続出来るようになります。OS を再起動しても、有効なままです。