はじめに
お名前.comでsshに関する作業があったので、通信が途切れないようにシリアルコンソールを使って対応しようと思ったら...シリアルコンソールにログインできない!😱
「終わったわ〜」って思って色々調べたら解決できたので記事にしてみます。
対象読者・前提
- お名前.com VPS(KVM型)でDebianを利用している
-
sudo apt full-upgrade後、シリアルコンソールでログインプロンプトが表示されなくなった
発生した問題
お名前.comのVPS(KVM型)にてOSを以下のコマンドで更新したところ、シリアルコンソールが使用できなくなりました。
sudo apt full-upgrade
具体的には、お名前.comの管理画面からシリアルコンソールを開いても、ログインプロンプト(hostname login:)が表示されない状態に...SSHでのログインは問題なく可能だったため、サーバー自体は正常に動作しているようです😮💨
原因調査
serial-gettyの状態確認
まず以下を実行してserial-gettyの状態を確認しようとしました。
sudo systemctl status serial-getty@ttyS0.service
返ってきたのは以下のエラーでした。
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
そういえば、systemd使ってなかったかも...
PID 1を確認
ps -p 1 -o comm=
init
通常systemdが動いているはずですが、お名前.comのVPSではinitなので、systemctlが使えなかったです。
/etc/inittabを確認
ls -l /etc/inittab
systemd環境であればsystemctl enable serial-getty@ttyS0.serviceでserial-gettyを有効化しますが、SysV init環境ではこの方法は使えません。代わりに/etc/inittabでgettyを管理します。
対応手順
事前確認スクリプトで現状を記録
設定ファイルの編集前に、関連情報を一括で確認・記録するスクリプトを用意しました...Claude Codeが😅
#!/bin/bash
set -uo pipefail
LOGFILE="$HOME/pre_check_$(date +%Y%m%d_%H%M%S).log"
{
echo "=== PID1 / init system ==="
ps -p 1 -o comm=
echo
echo "=== uname -a ==="
uname -a
echo
echo "=== mount (root fs) ==="
mount | grep ' / '
echo
echo "=== /dev/ttyS* ==="
ls -l /dev/ttyS* 2>&1
echo
echo "=== /etc/inittab 現状(serial/getty関連抜粋) ==="
grep -n -i 'ttyS\|getty' /etc/inittab
echo
echo "=== getty プロセス確認 ==="
ps aux | grep -E '[g]etty'
} | tee "$LOGFILE"
この時点で/etc/inittabを確認すると、serial-getty用の設定例がコメントアウトされた状態で残っていました。
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
バックアップを取得
sudo cp /etc/inittab /etc/inittab.bak
可能であればVPSのスナップショットも取得しておくと安心です。
/etc/inittabを編集
T0の行を有効化し、通信速度を115200に変更します。
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
編集後、設定を再読み込みします。
sudo init q
init qは再起動不要でinittabの変更を反映できます。
反映を確認
ps aux | grep '[g]etty'
root 2076 0.0 0.1 2524 1024 ttyS0 Ss+ 05:54 0:00 /sbin/getty -L ttyS0 115200 vt100
ttyS0用のgettyが起動していることを確認できました。
シリアルコンソールを確認
お名前.comのシリアルコンソール画面を開き、ログインプロンプトが表示され、実際にログインできることを確認しました。
再起動後の動作を確認
最後に、reboot後も同様に使えることを確認するため再起動します。
sudo reboot
再起動後、再度シリアルコンソールからログインできることを確認できました。
...良かった!