久々にiPhoneの写真をパソコンに取り込もうとしてUSB経由で繋いだら、
自動再生の画面が表示されなかった。

デバイスマネージャーから「Apple iPhone」のデバイスの状態を見ると、

------------------------------------
レジストリ内の構成情報が不完全であるか、または壊れているためこのハードウェア デバイスを開始できません。 (コード 19)
------------------------------------

となっている。

lattelatteのブログ

アンインストールしてまたiphoneを繋ぎ直すと、
再びドライバが自動インストールされて、無事自動再生の画面が表示された。

lattelatteのブログ

lattelatteのブログ

やってみると簡単だが、
結構分からない人は多いのではないでしょうか。
JSPとサーブレットを勉強の為Tomcatをインストールしたが、プロセスが起動しない。
結論としてはVMwareに同梱されているTomcatが原因だった。

Tomcat v7をインストールするとデスクトップ右下にアイコンが表示される。
それをダブルクリックすると下記画面が表示される。

lattelatteのブログ

ここでStartボタンを押したが、ステータスがstoppedのまま。
何度か押してみるが、ステータスがstartedにならない。

とりあえずログを確認することに。自分の環境ではログは「C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs」に出力される。

この中で、catalina.2012-03-31.log、tomcat7-stderr.2012-03-31.log、
に下記エラーメッセージが出力されていた。

---------------------------------------------------------------------
重大: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]
java.net.BindException: Address already in use: JVM_Bind :8009
Caused by: java.net.BindException: Address already in use: JVM_Bind

重大: Failed to initialize connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]
Caused by: org.apache.catalina.LifecycleException: プロトコルハンドラの初期化に失敗しました
Caused by: java.net.BindException: Address already in use: JVM_Bind :8009
Caused by: java.net.BindException: Address already in use: JVM_Bind

重大: StandardServer.await: create[localhost:8005]:
java.net.BindException: Address already in use: JVM_Bind

※スタックトレース(at ・・・)は省略

---------------------------------------------------------------------

Tomcatで使用するJVM_Bind(ポート8009)が既に使用されていると言っているように見える。
「netstat -oan」を打つと8009がLISTENINGになっていた。

---------------------------------------------------------------------
Proto Local Address Foreign Address State PID
   ・
   ・
   ・
TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 792
   ・
   ・
   ・
---------------------------------------------------------------------

この使用しているプロセスをタスクマネージャで確認すると、

lattelatteのブログ

・・・「tomcat6.exe」・・・

今回入れたV7とは違う、V6のtomcatが既に起動しているらしい
tomcat6.exeをエクスプローラで検索してみると、
「C:\Program Files\VMware\VMware Server\tomcat\bin」に存在していた。
VMwareに同梱されていたTomcatが自動で起動していたようだ。

少し調べてみた。
VMware2.0は管理コンソールがWebアプリケーションであり、そのサーバーとしてTomcatが使用されている。
このTomcatで使用しているポートのうち、8005と8009がデフォルトのまま使用されている。
このため別にTomcatをインストールした場合、このポートがVMware側で使われている為に起動できない。
eclipse等でTomcatを使用していても同じ事が起こるらしい。

ちなみにタスクマネージャは標準ではPIDが表示されない。
「表示」→「列の選択」でPIDをチェックすると表示される。

コントロールパネル→管理ツールのサービスを見ると、VMware関連のサービスは5つが自動起動していた。
このうちtomcat6.exeを実行している「VMware Server Web Access」を停止する。
タスクマネージャからtomcat6.exeが消えたことを確認して再度Tomcatを起動すると無事起動して
エラーメッセージも出なかった。

VMwareは使うかもしれないので、アンインストールせず、
サービスの自動起動だけを無効にしておいた。

冬眠中のPC(ThinkCentre M51(8104-A2J))を
動画再生用マシンにカスタムしようと思った。
TVから動画が見れるようにしたい。

まず、どうやってTVに出力するか。
オンボードはVGAしかないのでグラフィックカードを挿すことに。
HDMIで出力できるヤツがいい。

但し、うちの冬眠マシンはExpressじゃないPCIしか対応していない。
こんなマシンに挿せるものは存在するのか?
と思って調べてみたら、結構あっさり見つかった。
だがPCIでの選択肢はこれくらいらしい。

KEIAN HIS RADEON HD5450 Silence 512MB DDR3 PCI H545H512P
amazonのリンク
$lattelatteのブログ

中身
lattelatteのブログ
lattelatteのブログ


早速、冬眠マシンの蓋を開けてグラフィックカードを挿入。

クリアランスがギリギリアウト
ちゃんと閉まらなかったが、安物だからと強引に閉めてしまった。

ショートサイズじゃなきゃいけなかったのか?
でもレノボのサイトではそんなこと無さそうだったが・・・。
ヒートシンク分厚いからかもしれない。

オンボードのVGAに元から使ってたディスプレイを接続。
更にHDMIケーブルでTVと接続して電源ON。

はじめはディスプレイに起動中の画面が出力され、
Windowsのログイン画面になるところでディスプレイの出力が切れ、
代わりにTVにログイン画面が出力された。
Windowsが起動すると出力がオンボードVGAから拡張したHDMIに切り替わるらしい。

このままでも使えそうだが、一応付属のCDからドライバをインストール。

出来れば起動中の出力も拡張したHDMIの方に出したいが、
電源ボタン押してからログイン画面までは自動なので、
とりあえずこのまま使うことにして、
オンボードVGAで接続していたディスプレイを取り外した。
邪魔くさいので。
Sambaでファイル共有サーバを構築する場合、
プロセスsmbdとnmbdの両方のプロセスが起動している必要があると、
どのサイトでも書かれている。

しかし自分の環境ではnmbdを起動しなくても、
Sambaサーバのファイルをダウンロードして更新することが出来る。

何故か。

調べてみると、smbdがsambaの核となるデーモンで、
nmbdはNetBIOSによる名前解決の際に使用されるらしい。
ということは名前解決がNetBIOS以外の何かで行われていれば、
nmbdは必要無いかも知れない。

更に、Sambaが実現するファイル共有はSMBとCIFSという2種類のプロトコルがあり、
SMBはNetBIOSを介してファイル共有を実現するのに対し、CIFSはNetBIOSを介さず、
ダイレクトにTCP/IPを利用してファイル共有を実現する。
ということは、CIFSを使っていた場合、NetBIOSを介さないので、
nmbdが起動していなくてもファイル共有できるのではないか?

ということで、CIFSプロトコルのポートを閉じてみるとどうなるか試してみた。

まずsmbdのポートを確認。

--------------------------------------
[root@localhost ~]# ps -ef | grep -e 'smbd' -e 'nmbd'
root 3347 1 0 18:44 ? 00:00:00 smbd -D
root 3349 3347 0 18:44 ? 00:00:00 smbd -D
root 3364 3295 0 18:45 pts/1 00:00:00 grep -e smbd -e nmbd
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# netstat -anp | grep -e 'smbd' -e 'nmbd'
tcp 0 0 :::139 :::* LISTEN 3347/smbd
tcp 0 0 :::445 :::* LISTEN 3347/smbd
unix 2 [ ] DGRAM 11067 3347/smbd
[root@localhost ~]#
--------------------------------------

smbdが起動しており、nmbdが停止している状態でのnetstat結果。
smbdは139と445の2つのポートを使用している。
このうち139がSMB、445がCIFSなので、iptablesで445を閉じてみる。


--------------------------------------
[root@localhost ~]# iptables -A INPUT -i eth0 -p tcp --dport 445 -j DROP
[root@localhost ~]#
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:microsoft-ds

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@localhost ~]#

--------------------------------------

/etc/servicesにはデフォルトで「microsoft-ds 445/tcp」
と設定されており、上記のiptablesでは445が閉じられた状態。


ここで共有フォルダにアクセスすると・・・

lattelatteのブログ


エラーで返ってきた。
やはりCIFSで通信していたようだ。

ここでnmbdを起動して再度アクセスしてみる
・・・が同じエラーメッセージが出てきた。
プロセス上げただけではだめなのか?


Sambaサーバ、クライアント両方のOSを再起動後サーバのsmbd、nmbdを起動し、
更にiptablesで445番をDROPにしてクライアントからアクセス。
(上記の方法で設定したiptablesはOS再起動すると元に戻ってしまう。)

lattelatteのブログ


無事にログイン画面が出てきた。


netstatを実行するとポート139で接続中(ESTABLISHED)の行があり、
NetBIOS経由でリクエストしていることが判る。

--------------------------------------
[root@localhost ~]# netstat -anp | grep 139
tcp 0 0 :::139 :::* LISTEN 3337/smbd
tcp 0 0 ::ffff:192.168.195.128:139 ::ffff:192.168.195.1:1792 ESTABLISHED 3354/smbd
[root@localhost ~]#

--------------------------------------


では、nmbdが起動して、445番ポートも開いてるとSMB、CIFSのどちらを使うのか?
試してみたところ、CIFSを使用していた。

---------------------------------------
[root@localhost ~]# /etc/rc.d/init.d/smb start
SMB サービスを起動中: [ OK ]
[root@localhost ~]# /etc/rc.d/init.d/nmb start
NMB サービスを起動中: [ OK ]
[root@localhost ~]#
[root@localhost ~]# netstat -anp | grep -e 'smb' -e 'nmb'
tcp 0 0 :::139 :::* LISTEN 3310/smbd
tcp 0 0 :::445 :::* LISTEN 3310/smbd
tcp 0 0 ::ffff:192.168.195.128:445 ::ffff:192.168.195.1:1690 ESTABLISHED 3336/smbd
udp 0 0 192.168.195.255:137 0.0.0.0:* 3320/nmbd
udp 0 0 192.168.195.128:137 0.0.0.0:* 3320/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 3320/nmbd
udp 0 0 192.168.195.255:138 0.0.0.0:* 3320/nmbd
udp 0 0 192.168.195.128:138 0.0.0.0:* 3320/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 3320/nmbd
unix 2 [ ] DGRAM 10391 3320/nmbd
unix 2 [ ] DGRAM 10360 3310/smbd
[root@localhost ~]#
---------------------------------------

nmbが起動していてもCIFSが使われるように見える。
そのロジックは謎だが、また別の機会に調べることに。


VMwareのゲストを簡単に複製できないか。

同じ構成のゲストOSを一つずつインストールするのは面倒だけど、
VMwareならファイルをコピーするような感じで複製できるかもしれない。
調べてみると出来るようなので試してみた。

今回は「Virtual_Machine_1」という仮想イメージを、
「Virtual_Machine_2」という名前で複製してみる。

まず、「Virtual_Machine_1」のOSを停止してフォルダごとコピーしてフォルダ名変更。
この時フォルダ配下にも「Virtual_Machine_1~」というファイルが幾つかあって、
これも変更したい所だが、このファイル名を変えると動かないらしいので、
とりあえずそのままにしておく。

lattelatteのブログ


Web管理コンソールのツールバーから「Virtual Machine」をクリックして、
更に「Add Virtual Machine」をクリック。

インベントリ欄から、先ほどコピーしたVirtual_Machine_2を選択し、
更にコンテンツ欄から「Virtual_Machine_1.vmx」を選択してOKをクリック。

lattelatteのブログ


とりあえず作成できた。

lattelatteのブログ


Virtual_Machine_1を起動してみる。次いでVirtual_Machine_2を起動。
無事起動した。問題ないように見える。
リモートコンソールからVirtual_Machine_1にログイン。

lattelatteのブログ


次にコピー先にもログインしようとしたらエラーが返ってきた。

lattelatteのブログ


-----------------------
Cannot access virtual machine console.

The VMware Remote Console plug-in failed to connect to your virtual machine "Virtual_Machine_2".
The VMware Remote Console Plug-in was unable to perform the operation.
If this problem persists, contact your system administrator.
-----------------------

・・・色々調べたが、MACアドレスを変えていないのがまずいらしい。


Virtual_Machine_1にログイン。

「/etc/sysconfig/network-scripts/ifcfg-eth0」から、
HWADDRをコメントアウト

----------------------------------------------------------
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.195.255
IPADDR=192.168.195.128
NETMASK=255.255.255.0
NETWORK=192.168.0.0
#HWADDR=00:0C:29:5E:75:E2
ONBOOT=yes
TYPE=Ethernet
-----------------------------------------------------------


OS停止して、Virtual_Machine_1の「Virtual_Machine_1.vmx」を開く。

lattelatteのブログ


uuid.action = "create"」を追記し、下記をコメントアウト。
・uuid.location =
・uuid.bios =
・ethernet0.addressType =
・ethernet0.generatedAddress =
・ethernet0.generatedAddressOffset =


OS起動して再度「Virtual_Machine_1.vmx」を開く。
上記コメントアウトしたパラメータが新規作成されている。
(・・・ 中身確認したが、特に前と値変わってなかった・・・)

OS停止→uuid.action = "create"削除

Virtual_Machine_1、Virtual_Machine_2両方起動して
リモートコンソールを起動してみる。
今度はVirtual_Machine_2も起動した。一歩前進。

続いてVirtual_Machine_2のIPアドレスを変更。
リモートコンソールから確認してみると、既に別のIPが振られている。
更に「ifcfg-eth0.bak」が自動で作成されている。

--------------------------
[root@localhost network-scripts]# diff ifcfg-eth0 ifcfg-eth0.bak
3c3,8
< BOOTPROTO=dhcp
---
> BOOTPROTO=static
> BROADCAST=192.168.195.255
> IPADDR=192.168.195.128
> NETMASK=255.255.255.0
> NETWORK=192.168.0.0
> HWADDR=00:0C:29:5E:75:E2
5c10
< HWADDR=00:0c:29:18:ca:43
---
> TYPE=Ethernet
[root@localhost network-scripts]#
----------------------------

どうやらMACアドレス(ハードウェアアドレス)が変更されると、
自動でDHCPモードに変更されるらしい。
そして変更前のifcfg-eth0は「.bak」を付けて保管される。

とりあえずDHCPからstaticに変更。更に新しいIPアドレスを設定して
ネットワークサービスを再起動

----------------------------
[root@localhost network-scripts]# service network restart
インターフェース eth0 を終了中: [ OK ]
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中: [ OK ]
インターフェース eth0_20120120 を活性化中:
eth0 のIP情報を検出中... 完了。
[ OK ]
インターフェース eth0_bkup を活性化中:
eth0 のIP情報を検出中...dhclient(4658) is already running - exiting.
exiting.
失敗
[失敗]
[root@localhost network-scripts]#
----------------------------

・・・失敗。メッセージ見るとifcfg-eth0のバックアップファイル
(ifcfg-eth0_20120120、ifcfg-eth0_bkup)まで読み込んでるみたい。
バックアップファイル名の先頭に「bkup_」とが付けると読み込まれなくなり、
無事に再起動できた。


・・・なんか行き当たりばったりで謎も残り、
上手くまとまっていない。
あとでおさらいした方がいいかもしれない。

が、とりあえずこれでOSの複製はできたということで
今日はココまで