シリアルコンソールでLinuxを使う
キーボードや画面が使えず、シリアルコンソールのみのサーバにLinuxをインストールした時の設定メモ。
背景
自宅には、グラフィックボードを搭載しておらず、CPUにもGPUが内蔵されていないサーバ機がある。
このマシンでは映像出力を行うことができないため、普段はSSH経由で作業を行っていた。
しかし、カーネルの差し替えやドライバの差し替え、ネットワークの設定変更など、SSHが使えなくなる可能性のある操作を行う場合、SSH経由でしか作業が行えないのは非常に怖い。
そこで、今回はシリアルコンソール(COMポート)経由でも操作が行えるように、設定を変更した。
前提
- PCにCOMポートがついていること。
- 今回は、Linux上で
/dev/ttyS0
として認識されていることにする。
- 今回は、Linux上で
設定
Linux Kernel
Linuxのコンソールを使えるようにする設定。
RHEL8では、grubby
というコマンドがあり、以下のコマンドを実行することで設定は完了する。
なお、args
の前半console=tty0
は、画面を接続したときに画面にコンソールが出力されるようにする設定であるため、絶対に画面を出力しないのであれば不要。
grubby --args="console=tty0 console=ttyS0,115200n8" --update-kernel=ALL
grubbyがない場合は、以下のように/etc/default/grub
のGRUB_CMDLINE_LINUX
にconsole=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_OUTPUT
とGRUB_TERMINAL_INPUT
の両方の設定を変更するため、GRUB_TERMINAL_OUTPUT
の記述は不要になる。
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
のように、grub.cfg
を更新するコマンドを実行して適用。