シリアルコンソールでLinuxを使う

目次

キーボードや画面が使えず、シリアルコンソールのみのサーバにLinuxをインストールした時の設定メモ。

背景

自宅には、グラフィックボードを搭載しておらず、CPUにもGPUが内蔵されていないサーバ機がある。
このマシンでは映像出力を行うことができないため、普段はSSH経由で作業を行っていた。
しかし、カーネルの差し替えやドライバの差し替え、ネットワークの設定変更など、SSHが使えなくなる可能性のある操作を行う場合、SSH経由でしか作業が行えないのは非常に怖い。

そこで、今回はシリアルコンソール(COMポート)経由でも操作が行えるように、設定を変更した。

前提

  • PCにCOMポートがついていること。
    • 今回は、Linux上で/dev/ttyS0として認識されていることにする。

設定

Linux Kernel

Linuxのコンソールを使えるようにする設定。

RHEL8では、grubbyというコマンドがあり、以下のコマンドを実行することで設定は完了する。 なお、argsの前半console=tty0は、画面を接続したときに画面にコンソールが出力されるようにする設定であるため、絶対に画面を出力しないのであれば不要。

grubby --args="console=tty0 console=ttyS0,115200n8" --update-kernel=ALL

grubbyがない場合は、以下のように/etc/default/grubGRUB_CMDLINE_LINUXconsole=tty0 console=ttyS0,115200n8を追記する。

# before
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=1a18f1da-335d-46e1-9fa7-b72c1c5eb87a rhgb quiet"

# after
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=1a18f1da-335d-46e1-9fa7-b72c1c5eb87a rhgb quiet console=tty0 console=ttyS0,115200n8"

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgのように、grub.cfgを更新するコマンドを実行して適用。
/boot/efi/EFI/redhat/grub.cfgの部分は、環境にあわせて変更する。
EFIブートを行っている場合は、事前にls /boot/efi/EFI/*/grub.cfgを実行して、出てきた文字列を入れれば多分OK。

GRUB2

上記の設定だけでは、Linuxが起動する前のGRUB2はシリアルコンソールに表示されないため、カーネルの切り替えなどを行うことが難しい。
そのため、GRUB2もシリアルコンソールで操作できるように設定を変更する。

編集するファイルは/etc/default/grub

GRUB_TERMINAL_OUTPUTの行を消したうえで、以下の2行を追加する。

GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

なお、GRUB_TERMINALは、GRUB_TERMINAL_OUTPUTGRUB_TERMINAL_INPUTの両方の設定を変更するため、GRUB_TERMINAL_OUTPUTの記述は不要になる。

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgのように、grub.cfgを更新するコマンドを実行して適用。