シリアルコンソール
Arch Linux マシンを設定してシリアルコンソールポート (com ポート) でマシンを接続することができます。キーボードやマウス、モニター、ネットワークが接続されていなくても (ヘッドレスサーバー)、マシンを管理することが可能です。
Arch Linux をシリアルコンソールでインストールすることもできます。
シリアルケーブル (9ピンの接続ケーブル) を使ってマシンを接続されていることが基本条件とします。管理用のマシンはターミナルエミュレータプログラム (PuTTY や Minicom など) が動作するのであれば Unix/Linux あるいは Windows のどちらでもかまいません。
以下の設定では GRUB のメニュー選択とブートメッセージを有効にしてシリアルコンソールに端末を転送します。
目次
接続先のマシンのコンソールを設定
ブートローダー
GRUB
生成された grub.cfg
で GRUB を使用する場合、/etc/default/grub
を編集し、シリアル入出力サポートを有効にします。
/etc/default/grub
... GRUB_TERMINAL_INPUT="console serial" ... GRUB_TERMINAL_OUTPUT="gfxterm serial" ...
次に GRUB_SERIAL_COMMAND
変数を追加し、シリアル接続のオプションを設定します。 COM1 (/dev/ttyS0
) のボーレートが 115200 ビット/秒の場合:
/etc/default/grub
... GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"
利用可能なオプションの詳細な説明については、Using GRUB via a serial line および serial command を参照してください。
GRUB Legacy
Edit the GRUB Legacy configuration file /boot/grub/menu.lst
and add these lines to the general area of the configuration:
serial --unit=0 --speed=9600 terminal --timeout=5 serial console
rEFInd
rEFInd supports serial console only in text mode. Edit refind.conf
and uncomment textonly
.
Syslinux
To enable serial console in Syslinux, edit syslinux.cfg
and add SERIAL
as the first directive in the configuration file.
For COM1 (/dev/ttyS0
) with baud rate of 115200 bit/s:
SERIAL 0 115200
The serial parameters are hardcoded to 8 bits, no parity and 1 stop bit.[1]. Read Syslinux Wiki:Config#SERIAL for the directive's options.
Kernel
Kernel's output can be sent to serial console by setting the console=
kernel parameter. The last specified console=
will be set as /dev/console
.
console=tty0 console=ttyS0,115200
See https://docs.kernel.org/admin-guide/serial-console.html.
getty
At boot, systemd-getty-generator(8) will start a getty instance for each console specified in the kernel command line.
If you have not configured console=
in kernel command line start serial-getty@device.service
. For /dev/ttyS0
(COM1) that would be serial-getty@ttyS0.service
. Enable the service to start it at boot.
Unless specified otherwise in the kernel command line, getty will be expecting 38400 bit/s baud rate, 8 data bits, no parity and one stop bit-times.
接続
ターミナルエミュレータプログラムを使って接続
dterm
dtermAUR は小さなシリアル接続プログラムです。パラメータを付けずに起動した場合、デフォルトでは /dev/ttyS0
に 9600 ボーで接続します。以下の例は /dev/ttyS0
に 115200 ボーで、パリティビットを使わずストップビットを1個使用する、8 データビットで接続します:
$ dterm 115200 8 n 1
詳しくは ホームページ を見てください。
Minicom
minicom は公式リポジトリからインストールできます。セットアップモードで Minicom を起動:
$ minicom -s
テキストのナビゲーションメニューを使って、以下のようにシリアルポートの設定を変更:
Serial Device: /dev/ttyS0 Bps/Par/Bits: 9600 8N1
Enter を押してメニューを終了してください (Esc を押した場合、変更が保存されません)。モデムには接続しないため、モデムの Init と Reset の文字列は削除します。Modem and Dialing
メニューで Init と Reset 文字列を削除してください。メインメニューから save setup as dfl
を選択することで設定が保存されます。マシンにシリアルケーブルを接続したまま minicom を再起動してください。セッションを終了するには Ctrl+A
を押してから Ctrl+X
を押します。
picocom
picocom は minicom とよく似ている小さなダム端末エミュレーションプログラムです。以下の例は ttyS0
に 9600 bps で接続します:
$ picocom -b 9600 /dev/ttyS0
詳しい使い方はマニュアルを見てください。
Screen
screen はシリアルポートに接続することができます。デフォルトでは 9600 ボーで接続します:
$ screen /dev/ttyS0
コマンドラインからボーレート (例: 115200) を指定できます:
$ screen /dev/ttyS0 115200
Serialclient
Serialclient は Ruby で書かれたシリアル接続 CLI クライアントです [2]。Gem を使ってインストールしてください。
以下のようにして使うことが可能です:
$ serialclient -p /dev/ttyS0
tinyserial
tinyserial is a minicom replacement for accessing serial ports on Linux inspired by FreeBSD 'tip'.
$ com /dev/ttyS0 9600
グラフィカルフロントエンド
- cutecomAUR は gui で使えるシリアルモニターです。
- putty は Linux からでも使うことができます。
- moserial は gtk ベースのシリアルターミナルです。組み込み環境や試験装置、シリアルコンソールを使う必要がある技術者やハードウェアハッカー用に作られています。
Windows
Windows マシンでは PuTTY や Terminalbpp などのプログラムを使ってシリアルポートに接続してください。
シリアルコンソールを使って Arch Linux をインストール
- 上に書かれている方法でインストールを行うマシンに接続。
- Arch Linux インストール CD を使ってマシンを起動。
- ブートローダーが表示されたら Boot Arch Linux (<arch>) を選択して
Tab
を押してエントリを編集。 console=ttyS0,38400
を追加してEnter
を押す。- systemd によって ttyS0 が認識されシリアル getty が起動します。
root
でログインして通常通りにインストールを行ってください。
シリアルコンソールを使用した応答しないマシンのデバッグ
[4] には簡潔な説明しかありませんが、シーン全体が示されています。ここで、テスト対象のマシンが再現可能な方法で応答しなくなったことに注意することが重要です。そしてそれは通常の運用中に起こったということです。そのため、デバッグが必要になる前に通常どおりにアクセスできました。ただし、一般に、シリアルコンソールはブートの問題のデバッグにも役立ちます。おそらく、マシンの起動時に手動でブートローダーのによります。このセクションの外部リンクの PS 段落内で言及されている netconsole にも注意してください。
トラブルシューティング
Ctrl-C と Minicom
minicom で Control-C コマンドを送ったときに問題が起こる場合、デバイス設定 (minicom -s) でハードウェアフロー制御をオフにしてください。ブレークが有効になります。
ターミナルのサイズ変更
ssh と異なり、シリアル接続にはターミナルのサイズを変更したときに SIGWINCH
を転送する機能がありません。そのため、ターミナルウィンドウのサイズを変更したときにフルスクリーンプログラム (例: less
) で表示が崩れてしまいます。
解決方法として stty
でターミナルのサイズを変えることができます:
$ stty rows lines cols columns
ただし上記の方法ではサイズを手動で入力する必要があります。以下の方法でサイズ変更を簡単にすることができます。
1. xterm に付属している知名度の低いユーティリティ resize
で問題を解決できます。ターミナルエミュレータのウィンドウのサイズを変更した後にパラメータを付けずに起動してください:
$ resize
2. xterm をインストールしたくない場合、シンプルなシェル関数で同じことができます。以下の関数をシェルの設定ファイルに記述して、パラメータを付けずに実行してください:
rsz() { if [[ -t 0 && $# -eq 0 ]];then local IFS='[;' escape geometry x y print -n '\e7\e[r\e[999;999H\e[6n\e8' read -sd R escape geometry x=${geometry##*;} y=${geometry%%;*} if [[ ${COLUMNS} -eq ${x} && ${LINES} -eq ${y} ]];then print "${TERM} ${x}x${y}" else print "${COLUMNS}x${LINES} -> ${x}x${y}" stty cols ${x} rows ${y} fi else [[ -n ${commands[repo-elephant]} ]] && repo-elephant || print 'Usage: rsz' ## Easter egg here :) fi }
マルチポート拡張カードにポートがありません
デフォルトのカーネル構成で汎用 8250 ドライバーを使用するシリアルポートの数は、実行時に 4 に設定され、最大は 32 になります。これにより、/dev/ttyS4
以上の作成が防止されます。マザーボード上の一般的な内蔵シリアルポートを数えると、4 ポート拡張カードの 4 番目のシリアルポートは使用できなくなります。
これは カーネルパラメータ 8250.nr_uarts
でオーバーライドできます。例えば:
8250.nr_uarts=5