WinXPをディスプレイ無で仮想サーバ化するには(virtualbox+vncを利用)

守らなければいけない条件は以下

ログアウトしても落ちない
サーバなんだから当たり前
ネットワーク越しに画面が管理できる
どうなってるか定期的に覗く
ホストOSとファイルを共有したい
winはフロントエンドで充分
どんなwinアプリも動かしたい
wineじゃ(まだ)こうはいかない。


まあ、ぶっちゃけvnc+wineでも同じことが出きるんだが、virtualboxのシームレスモードに感動したので備忘エントリ上げ

いい加減vmwareに飽きたというか、カーネルのバージョンアップの度にvmware-config.pl動かすのに飽きた。
virtualboxもバイナリ版では同じ目にあうんだが、OSEオープンソースエディション?)版だとUSBを諦めればubuntuのパッケージとして提供されるので…あ、QEMUでいいじゃないかというつっこみはなしね。いざとなったらバイナリ版を使えばUSBが使えることもメリットだと考えられるので。ubuntu8.10をホストでwindowsXPをゲストOSでVirtualBox OSE版を使ってみる。

virtualbox oseをインストールする。

sudo apt-get install virtualbox-ose

マニュアルをゲットする

なぜかマニュアルが出ないので http://www.virtualbox.org/wiki/Downloads ここから落とす。

http://download.virtualbox.org/virtualbox/2.1.0/UserManual.pdf

WindowsXPをゲストOSとしてインストールする

まあ、ネットワークをNATで設定する(デフォルト)ことを注意すればあとは適当でいい。

VirtualBoxを実行する権限をユーザに与える

システム->システム管理->ユーザとグループを実行しユーザ設定を起動する。
ロックを解除した後、該当ユーザのプロパティを実行し、ユーザの権限のところにあるVirtualBoxを使用できるをチェックする。
管理者ならこの作業は不要かもしれない。

ホストOSとゲストOSの切り替えをスムーズにする(VBoxGuestAdditions.isoのインストール)

ヘルプ->VirtualBoxについてにてVirtualBoxのバージョンを調べ(現在2.0.4_OSE)、
http://download.virtualbox.org/virtualbox/
ここからバージョンのあったディレクトリからVBoxGuestAdditions_*.isoをダウンロードする
これを/usr/share/virtualbox/に設置し、次に実行中のVirtualboxでデバイス->GuestAddtionsのインストールを実行する
あとは適当で各ドライバを入れていく。
(この辺はubuntu側でなくゲストOS側でisoをマウントしてもよい)

wget http://download.virtualbox.org/virtualbox/2.0.4/VBoxGuestAdditions_2.0.4.iso
mv VBoxGuestAdditions_2.0.4.iso /usr/share/virtualbox/VBoxGuestAdditions.iso


シームレスモード

ここからが本題(笑
ゲストOSのデスクトップ画像を切る。するとシームレスモードに移った際にホストOSのデスクトップとウインドウが現れる。
ちなみにシームレスモードは右CTRL+LでON/OFF
(動きがおかしくなったときには 一旦通常モードに戻した後 右CTRL+F で全画面にして元に戻すとよい)

というふうにwineっぽい画面になる。
どうもまだ動きがよくわからないのだがホストのデスクトップ上のドラッグ&ドロップまわりとかのアクセスが微妙になる。

ファイル共有を使う

注意:VBoxGuestAdditionsをインストールしていないとファイル共有は使えない。(昨日数時間悩んだ(おかげでvirtualboxになれたが)理由は分からないが…)

VBoxGuestAdditionsをインストールした後、ゲストOSからホストOS(10.0.2.2)にpingを打ってみるとうまくいっていることが分かる。(VBoxGuestAdditionsを入れる前ではpingも反応しない)

マニュアルの6.4.3 NAT limitationsによるとICMPは外に出れないみたいなので注意すること。事実上10.0.2.2(ホストマシン側)と10.0.2.15(自分)しかpingに反応しない。(なぜ10.0.2.3(DNSサーバ)が反応しないのかは分からない)

ホスト側で共有フォルダ(例えば~/tmp)を設定し、ゲスト側でマウント(例えば net use x: \\vboxsvr\tmp)すればOK

NATではファイル共有できないとか、OSE版ではファイル共有できないとかいうガセを結構ネット上で読んだので注意すること。

ポートフォワードを使う(ゲスト上でapacheを動かす。)

http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/binaries/win32/apache_2.2.11-win32-x86-no_ssl.msi ここからhttpdをダウンロードしゲスト上のwinxpにインストール
80ではなく8080で動かす設定にしたのだが、インストール直後は動かなかった。
メニューからStart Apache in Consoleを選択してコンソールモードで起動すればいい。
ゲストOS上のIEから http://localhost:8080/ をアクセスすると起動していることが確認できる。

ここで問題になるのがNATなわけだからホストOSや他のマシンからアクセスができない。
立派なapacheサーバ on windowsにしてやらねば。

マニュアルの 6.4.1 Configuring port forwarding with NAT にはホストOSからゲストOSへポートフォワードする方法が記述されている。これを参考にして以下を実行する。
("xp"はゲストOS名、apacheは適当でいいみたいなので注意すること。)

$ VBoxManage setextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol" TCP
$ VBoxManage setextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 8080
$ VBoxManage setextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 8088

確認方法は

$ VBoxManage getextradata xp enumerate

または

$ VBoxManage getextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol"
$ VBoxManage getextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort"
$ VBoxManage getextradata "xp" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort"

削除はsetextradataの方から値を削除したものを実行すればいい。

ここでvirtualbox本体を再起動しないとポートフォワードの設定は反映されない

こうやると ホストOSの8088をアクセスすると ゲストOSの8080に接続されて無事apacheを確認することができる。

ヴァーチャルデスクトップ化し、画面を占有しないサーバに仕立てる。

vnctwmをインストールする。

$ sudo aptitude install vnc4server twm

vncserverを起動する

$ vncserver 

You will require a password to access your desktops.

Password:(適当なパスワード)
Verify:(適当なパスワード)

これでvncサーバが立ち上がる。

アプリケーション->インターネット->リモートデスクトップビューアでvncのクライアントを含んだビューアが立ち上がるのでここで「接続」をクリックし localhost:1 を入力し、先ほど入力したパスワードをさらに入力する。

無事、twmとxterm一枚の画面が立ち上がったはずだが、ここに virtualboxを起動させると以下のようになる。

これでリモートデスクトップビューアを落としたりvncサーバは立ち上がり続ける。

vncサーバを落とすときには vncserver -kill :1 でOK

つぎにvncserverを一旦終了し、screenやALT+CTRL+F1でターミナルからvncseverを起動しておく(まあnohupでもいいんだけど)。
そうするとXを落としてもvncやwinは動きつづけることになりwinの作業を途中で止めておいたり、画面のないwinサーバを得ることができる。

ずいぶん面倒だったがこれでXPの完全仮想化が完了する。

単目的のwinサーバを多数立ち上げて君もメモリを有効活用!(違