アクセラと+αな生活
アクセラとα350と共に過ごす気まぐれ日記です。
Firefox ブラウザ無料ダウンロード
2017年11月
≪10月  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    12月≫
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Linux には「シリアルコンソール」という機能があります。
HP-UX での「LAN コンソール」に似ている機能ですね。

通常、SSH や Telnet で仮想コンソールで接続することで作業をしたりしますが、SSH や Telnet のデーモン(Windows でのサービス)が起動している状態で仮想コンソールとして利用できます。
つまり、SSH や Telnet のデーモンが起動していないと、接続できません。

OS の停止、再起動を行うと、OS の停止中に SSH や Telnet のデーモンも落ちるため、途中で接続が切れてしまい、正常に終了しているかなどの状況がつかめなかったりします。
もちろん、この接続が切れることは OS の停止で正常な動作で問題ないのですが、マシンの再起動時などは正常に終了、起動しているのかをその場で確認したい場合があります。

また、再起動時であれば、SSH が切断されて、「そろそろ OS が起動しきてて、SSH で接続できるころかな??」なんて考えながら、SSH 接続を試みたりしますよね。


「シリアルコンソール」は SSH などのデーモンが落ちていても利用可能なため、このような再起動を行う場合、「シリアルコンソール」を利用すると便利です。

シリアルポートはマシンのシリアルポートを利用して、通信(接続)を行います。
ですので、クライアントとして利用する PC が別途1台、接続ケーブルとしてのクロス型シリアルケーブルが必要になります。


※シリアルコンソールは非常に便利な機能ですが、初心者向けではありません。
 また、GRUB(OS 起動に関わるプログラム)の設定変更が必要になりますので、設定を間違えると、OS が起動しなくなる可能性もあります。
 シリアル接続の設定を行う場合は、システムレベルでのバックアップ(もちろん、システムのリストアが行えることは大前提)を行った上、自己責任でお願いいたします。

 

うちの Ubuntu 9.10 君の環境 「VMware Player」の仮想マシンのため、シリアルケーブルを利用しての接続は行いません。
変わりに、Named Pipe TCP Proxy Utility(http://shvechkov.tripod.com/nptp.html)というツールを利用し、シリアル接続している仮想の環境を構築します。

「Named Pipe TCP Proxy Utility」は Windows 上で稼動するアプリケーションです。
うちの環境は「VMware Player」のホスト PC が Windows Vista ですので、「Named Pipe TCP Proxy Utility」を選択してます。
Linux に似たソフトがあるかどうかは知りません。。。あしからず。


【仮想マシンへのシリアルポート追加】
実機のシリアルポートを利用するのであれば、仮想マシンへのシリアルポートの追加は不要です。

「VMware Player」の仮想マシンのデフォルトは、シリアルポートが無効になっているため、有効にする必要があります。
「VMware Player」の「仮想マシン設定の編集」で仮想マシンのシリアルポートを追加します。

「\\.\pipe\com1」という名前付きパイプを作成します。
serial_20091227_001.jpg


【シリアルコンソールの有効化】
Ubuntu でのシリアルコンソールの設定は、SerialConsoleHowto(https://help.ubuntu.com/community/SerialConsoleHowto)が分かりやすいです。

今回は Ubuntu 9.10(Karmic)での設定になりますので、SerialConsoleHowto(https://help.ubuntu.com/community/SerialConsoleHowto)を基本として、Ubuntu 9.10(Karmic)に関する記載の基づいて設定を行います。

Ubuntu 9.10 以外のバージョンでは、設定方法が異なりますので、ご注意下さい。
SerialConsoleHowto(https://help.ubuntu.com/community/SerialConsoleHowto)にはUbuntu 9.10 以外の設定方法も記載されていますので、9.10 以外でも、シリアルコンソールは利用できる(ただし、9.10 以外の動作検証はしてません)ことでしょう。

○端末の指定
シリアルコンソールを利用するには、「/etc/securetty」で使用する COM ポートの登録が必要です。
Ubuntu 9.10 のデフォルトでは、ttyS0(COM1 ポート、COM2 ポートの場合は「ttyS1」)は登録済みで利用可能です。

ttyS0(COM2 ポートの場合は「ttyS1」) が登録されているかを確認しておきましょう。
登録されていなければ、登録します。


$ cat /etc/securetty
# /etc/securetty: list of terminals on which root is allowed to login.
# See securetty(5) and login(1).
console

# Standard serial ports
ttyS0
ttyS1
ttyS2
ttyS3

# USB dongles
ttyUSB0
ttyUSB1
ttyUSB2

~ 略 ~


「ttyS0」が登録されているのでOKですね。

○init の設定
端末の管理は「getty」というプロセスが行います。
Ubuntu 9.10 のデフォルトでは、シリアルポートが無効の状態となっており、有効にする必要があります。
ですので、「getty」を起動する init プロセスの設定で、シリアルコンソール用の設定ファイルを登録します。

登録は「/etc/init/ttyS0.conf」(COM2 ポートの場合は「/etc/init/ttyS1.conf」)を作成します。

vi を起動し、以下の内容を記述します。


$ sudo vi /etc/init/ttyS0.conf


<ttyS0.conf の内容>
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

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

respawn
exec /sbin/getty -L 115200 ttyS0 vt100

COM2 ポートを利用するのであれば、「ttyS0」を「ttyS1」に変更して下さい。

設定ファイル(ttyS0.conf)を作成したら、「ttyS0」を利用できるように起動します。
起動の確認はシリアルコンソールのプロセスが起動しているかを「pgrep」で確認できます。

$ sudo start ttyS0
ttyS0 start/running, process 2229

$ pgrep -lf getty
1116 /sbin/getty -8 38400 tty4
1118 /sbin/getty -8 38400 tty5
1123 /sbin/getty -8 38400 tty2
1124 /sbin/getty -8 38400 tty3
1128 /sbin/getty -8 38400 tty6
1817 /sbin/getty -8 38400 tty1
2229 /sbin/getty -L 115200 ttyS0 vt100

「/sbin/getty -L 115200 ttyS0 vt100」というプロセスが起動しているので、OK ですね。
なお、プロセスID(プロセス名の前の番号)は毎回変わりますので、同じ ID とならなくても問題ありません。

COM2 ポートを利用するのであれば、「ttyS0」を「ttyS1」に読み替えて下さい。


○GRUB の設定
起動時のメッセージなどをシリアルコンソールに表示するには、GRUB の設定が必要になります。
GRUB の設定ファイルである「/etc/default/grub」に「ttyS0」(COM2 ポートの場合は「ttyS1」)でターミナルを使用する設定を行います。

vi を起動し、以下の内容に変更します。

$ sudo vi /etc/default/grub

 デフォルトからの変更であれば、
 ・「GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"」を「#」でコメントアウトし、「GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8」を追加
 ・「GRUB_TERMINAL=serial」を追加
 ・「GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"」を追加
を行います。

COM2 ポートを利用するのであれば、「ttyS0」を「ttyS1」に読み替えて下さい。

<変更後の「/etc/default/grub」
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="10"
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
# GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8
"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"



変更後、「update-grub」で変更内容を反映させます

$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /memtest86+.bin
done


【Named Pipe TCP Proxy Utilityの設定】
「Named Pipe TCP Proxy Utility」が仮想のシリアルポートの役割をしてくれます。
実機のシリアルポートを使用して接続す場合は、「Named Pipe TCP Proxy Utility」は不要です。

「Named Pipe TCP Proxy Utility」をNamed Pipe TCP Proxy Utility(http://shvechkov.tripod.com/nptp.html)よりダウンロードし、「VMware Player」のホスト PC へインストールします。
(インストール時に特別な設定、パラメータはありませんので、インストール方法は割愛します、)


「Named Pipe TCP Proxy Utility」をインストールしたら、「Named Pipe TCP Proxy Utility」を起動します。
なお、Windows Vista の場合、設定を保存する(レジストリへの登録)には管理者権限が必要になるため、「管理者として実行」で起動します。

「Named Pipe TCP Proxy Utility」で「Pipe name」が「\\.\pipe\com1」、「Port」が「9999」(任意)のパイプを作成します。

serial_20091227_002.jpg

「Named Pipe TCP Proxy Utility」は画面を閉じずに稼動させたままにしておきます。


【シリアルコンソールでの接続】
シリアル通信に対応した Windows 用のターミナルソフトはいろいろありますが、今回は「TeraTerm Pro」を利用します。
他のターミナルをご利用の場合は、設定を読み替えて下さい。

「Named Pipe TCP Proxy Utility」を利用する場合は
 ・「TCP/IP」を指定
 ・「ホスト」に「localhost」を指定
 ・「サービス」に「Telnet」を指定
 ・「TCPポート」に「9999」を指定
で接続します。

実際のシリアルポートを利用する場合は
 ・「シリアルポート」を指定
 ・「ポート」に「COM1」(COM2 ポートの場合はCOM2)を指定
で接続します。
serial_20091227_003.jpg

で、接続相手の Ubuntu 9.10 が起動している状態で接続すると、

attaching console,wait ...connected!


Ubuntu 9.10 <ホスト名> ttyS0

<ホスト名> login:

というように表示されるので、ログインユーザ、パスワードを入力してログインできます。


コンソール接続中にシャットダウン(poweroff)すると、

$ sudo poweroff

~ 略 ~

init: avahi-daemon main process (843) terminated with status 255
init: tty4 main process (1152) killed by TERM signal
init: tty5 main process (1154) killed by TERM signal
init: tty2 main process (1165) killed by TERM signal
init: tty3 main process (1166) killed by TERM signal
init: tty6 main process (1168) killed by TERM signal
init: cron main process (1181) killed by TERM signal
init: hal main process (830) terminated with status 1
init: tty1 main process (1842) killed by TERM signal
init: ttyS0 main process (1843) killed by TERM signal
* Stopping Samba daemons
 modem-manager: Caught signal 15, shutting down...
init: rsyslog-kmsg main process (754) killed by TERM signal
init: Disconnected from system bus
* Stopping internet superserver inetd
 * Will now haltswap... faces... e...
[ 68.916118] Power down.
attaching console,wait ...

このように、シャットダウン状態まで、表示してくれます。

「attaching console,wait ...」という表示で OS がシャットダウンした状態ですが、シリアルコンソールとしては接続されたままの状態ということが分かります。
この状態でマシンの電源を入れれば、シリアルコンソールの接続は切れることなく、OSが起動し、起動時のメッセージも表示されます。




シリアルコンソールで Linux カーネルが対応する通信速度は、1200、2400、4800、9600、19200、38400、57600、115200ビット/秒になります。

SerialConsoleHowto(https://help.ubuntu.com/community/SerialConsoleHowto)で「115200」と記載されていたので、115200を選択してます。
使用しているケーブルなどの環境によっては、115200では速すぎるかもしれません。
文字が乱れたりするようであれば、通信速度が速すぎる可能性もありますので、通信速度を落として試してみましょう。
「/etc/init/ttyS0.conf」と「/etc/default/grub」の「115200」が通信速度の設定なので、この値を変更すれば、シリアルコンソールで使用する通信速度を変更できます。


ちなみに、「/etc/default/grub」の設定は以下の意味になります。
通常は SerialConsoleHowto に記載された設定で問題ないでしょうが、環境によっては変更が必要かもしれません。。。

・GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
 Linux 起動時のメッセージをシリアルコンソールへ表示するための設定

・GRUB_TERMINAL=serial
 GRUB の出力をシリアルに表示するための設定

・GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
 「GRUB_TERMINAL=serial」の時のシリアルの設定、「--speed=115200」は通信速度、「--unit=0」シリアルポートの番号(0は「ttyS0」)、「--word=8」は通信ビット(8ビット)、「--parity=no」はパリティ(no はパリティビットなし)、「--stop=1」はストップビット

  
コメント
この記事へのコメント
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by .
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。