■Windows版のシリアルコンソールでうだうだしてしまった。
※名前付きパイプの変更可能な名前部分は「ホスト名=イメージ名」とする
結果から言うと、何をしても不安定。一応使えるというレベル。
同じセッションに再接続すれば続きは出来るが、
ハングしてgettyを再起動する場合を想定し、「screen」等で回避する。
よって、vmxのシリアルコンソールの設定は、
単純にサーバとアプリケーションを名前付きパイプ経由で接続する。
■割り込みモードの場合
> find "serial" vmlenny86.vmx
---------- VMLENNY86.VMX
serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.fileName = "\\.\pipe\vmlenny86"
serial0.pipe.endPoint = "server"
serial0.tryNoRxLoss = "TRUE"
■ポーリングモードの場合
$ grep ^T0 /etc/inittab
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
serial0.present = "TRUE"
serial0.fileType = "pipe"
serial0.fileName = "\\.\pipe\vmlenny86"
serial0.pipe.endPoint = "server"
serial0.tryNoRxLoss = "TRUE"
serial0.yieldOnMsrRead = "TRUE"
■ゲスト(vmlenny86)側の設定
$ sudo grep ^T0 /etc/inittab
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
$ sudo grep ^T0 /etc/inittab
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
$ sudo init q
$ ps -ef | grep ttyS0 | cut -c 48- | grep -v grep
/sbin/getty -L ttyS0 115200 vt100
$ sudo init q
$ ps -ef | grep ttyS0 | cut -c 48- | grep -v grep
/sbin/getty -L ttyS0 9600 vt100
■puttyからのログイン
接続の種類は「シリアル」、シリアル接続は「\\.\pipe\vmlenny86」
■ログイン中にゲスト(vmlenny86)側を見ると以下のように表示される
$ ps -ef | grep ttyS0 | cut -c 48- | grep -v grep
/bin/login --
-bash
■名前付きパイプはドライバとして動作する
> dir /s /b c:\WINDOWS\system32 | find /i "NPFS.SYS"
c:\WINDOWS\system32\dllcache\npfs.sys
c:\WINDOWS\system32\drivers\npfs.sys
■名前付きパイプは以下のように「File System」として登録されている
※「taskmgr」からは「lsass」を確認すれば良い事が分かる。
> reg query HKLM\SYSTEM\CurrentControlSet\Services\Npfs /s
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Npfs
ErrorControl REG_DWORD 0x1
Group REG_SZ File system
Start REG_DWORD 0x1
Type REG_DWORD 0x2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Npfs\Aliases
lsass REG_MULTI_SZ protected_storage\0netlogon\0lsarpc\0samr\0\0
ntsvcs REG_MULTI_SZ eventlog\0svcctl\0\0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Npfs\Enum
0 REG_SZ Root\LEGACY_NPFS\0000
Count REG_DWORD 0x1
NextInstance REG_DWORD 0x1
■サービスからも確かに「FILE_SYSTEM_DRIVER」として登録されている
> sc qc "Npfs"
[SC] GetServiceConfig SUCCESS
SERVICE_NAME: Npfs
TYPE : 2 FILE_SYSTEM_DRIVER
START_TYPE : 1 SYSTEM_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME :
LOAD_ORDER_GROUP : File system
TAG : 0
DISPLAY_NAME : Npfs
DEPENDENCIES :
SERVICE_START_NAME :
■アイドルプロセス「PID=0」として認識している
> sc queryex Npfs | find "PID"
PID : 0
■サービスが落ちたら「Restart DELAY: 60000 seconds」等で
再起動すればよさそうだが、そういう問題ではなさそうだ。
> sc qfailure Npfs
[SC] GetServiceConfig SUCCESS
SERVICE_NAME: Npfs
RESET_PERIOD : 0 seconds
REBOOT_MESSAGE :
COMMAND_LINE :
FAILURE_ACTIONS :
■イベントログに「ntdll」のエラーでputtyが強制終了した時のログが出る
PS> get-eventlog application | \
Where-Object { $_.EntryType -eq "Error" } | \
Where-Object { $_.Source -eq "Application Error" } | \
Where-Object {$_.Message -match "putty.exe" } | format-list | more
Index : 3557
EntryType : Error
InstanceId : 1000
Message : エラー発生アプリケーション putty.exe、バージョン 0.59.0.0、
エラー発生モジュール ntdll.dll、バージョン 5.1.2600.6055、エラー発生アドレス 0x00010a19
Category : (0)
CategoryNumber : 0
ReplacementStrings : {putty.exe, 0.59.0.0, ntdll.dll, 5.1.2600.6055...}
Source : Application Error
TimeGenerated : 2012/02/19 23:23:13
TimeWritten : 2012/02/19 23:23:13
UserName :
■「ntdll.dll」の存在箇所を確認
※エクスプローラの拡張機能を呼び出した時に使うDLLらしい。
名前付きパイプがFileSystemだからかな。
> dir /s /b c:\ | find "ntdll"
C:\WINDOWS\system32\ntdll.dll
C:\WINDOWS\system32\dllcache\ntdll.dll