最近、インターネット越しのリモートデスクトップ接続にハマっている。これ!面白いし便利!
まだVirtualBox のリモートディスプレイの認証でセキュリティーの設定が弱いらしい?のとか、
まだセキュリティーの設定については曖昧でしっかり調べていませんが、とっても便利で楽しいです^^
いきなり話は飛ばしますが、Windows 上でphpとapache が動く環境下でのphpVirtualBox が動くまでの
話をしようと思っています。(前置きが長いので、長い部分を飛ばす場合には
本題から読んでね!!!)
と言うのも、一度はWindows XP でphpVirtualBox を動かしてみましたが、
少し前のブログにある様に、
Windows 8 Consumer Preview と言う、発売前の評価ビルドコピーの
Windows 8 を入れたので、そちらの環境で入れ直そうと思いました。
(※実際にAtom のCPU でVirtualBox を動かすのは重いので注意・・・ 一応おさらいというか、
メモを残し忘れたので、やり直しているに過ぎない部分もあります==;)
別に新しいもの好きな訳ではないが、Atom PC に入れたWindows 8 は、
非力なCPUでもインターネットエクスプローラーの起動なども、
XPのIE8よりWindows 8 のIE10 の方がかなり早いのと、
そしてユーザーのログイン前にネットワーク接続が確立したりなど、
とてもLinux ライクな性質に変わっていて、バグもまだまだ多いが、
このままある程度、色々な環境をWindows 8 に乗せてみたいと思う。
バーチャルマシンはホストPCのメモリを沢山消費するので、32bit OS ではメモリの壁があるので
64bit OS で用いてメモリをより多く使えた方が、同時にバーチャルマシンを起動するには
向いていると思います、というか、バーチャルマシンに割り振ったメモリを確保できない場合は、
実行中や、バーチャルマシンのインストール中にエラーになります。
メモリが確保できることがバーチャルマシンの実行条件なので気を付けましょう。
さてさて話すと本当に長くなるので、どこまで話そうか? 本当に迷う所ではある。
今回説明しようとしている、phpVirtualBox は、phpのプログラムからVirtualBox を操作する
ブラウザから見て操作するWebのユーザーインターフェースと言えば分かるでしょうか?
これは
前回のブログでも多少述べているがブラウザの画面からVirtualBox の操作ができることは、
即ちそれは、VirtualBox をインストールしていないPC から、80ポートだけを通してVirtualBox を
操作できることになります。
もし、自分でVirtualBox を操作するアプリケーションをPHPで構築するとしても、
とても良い参考になると思います!!!
多分、PHPと、Linux の操作を知っていれば、とても簡単にクラウドサービスなどが
構築出来ちゃいます! それは間違えないと思います、ライセンス的な話があるので、
個人利用とかにはなると思いますが、とても便利で驚きます。
さて、一番初めに話を戻ります。
最近リモートデスクトップ接続(Remote Deployment Manager)によって、
インターネット越しに、自宅内LAN上にあるルーターの設定、ポートマッピングや、
パケットフィルタリングによって、外部からのアクセスを可能にして
何処からでも自宅のVirtualBox 上で実行されたバーチャルマシンを操作しています。
(この当たりのルーター設定も、家のルーターでの内容ですが、そのうち載せます)
こんなに簡単に外部からデスクトップ接続としてリモートで扱えるとは思ってなかったので、
これがこんなにうまくいくのならば、phpVirtualBox で使う80ポート(もしくは専用のポート)も
外部(ルータのWAN、つまりインターネット側)から呼び出せる様にしようと思ったのが、
今回のメモを残す最大の理由でした。
個人的にはとても良いネタなので、秘密にしておいても良かったのですが^w^;
なんせやることが色々ありすぎて、秘密にしておいても、それはそれで
宝の持ち腐れに思えたのでメモを公開します。。。ね。。。
上手に伝わったかどうか分からないので、復唱気味に仕組みを何度も説明していますが、
VirtualBox 上のWebページ(apache のデーモン)はインターネット側から普通に動き、
PHPも動くのも確認しているので、バーチャルマシンのリモートディスプレイのポートを
VirtualBox が動くホストPCに設定し、ルーターの設定も同様に変更しすれば、
インターネット側からリモートディスプレイができるということです。
リモートディスプレイとして公開するVirtulBox 上のバーチャルマシンには、
バーチャルマシンが動くホストPC自体のリモートディスプレイの3389のポートと衝突しない様に、
3389以外のホストPCとかぶらない値を適当にVirtulBox の設定から割り振るのと、
IPアドレスとリモートデスクトップ接続として用いるポート番号も
ルーター側にバーチャルマシンの数だけ設定します。(これも後日、類似した内容で詳細を公開します)
それ以前にリモートディスプレイをVirtualBox で用いたい場合は、
Oracle VM VirtualBox Extension Pack を入れないと実際は動かないとメモしておこう!
今回は、上記の設定の類などは本題ではないので、本題に入りたいと思います。
(というか、概要的なことは、ほとんど説明してしまった気もしますが・・・設定がまた長いので、また・・・・)
では
本題です
①ダウンロードと設定ファイルのリネーム
まず
phpvirtualboxのdownloadからphpVirtualBox をダウンロードします。
私の場合は、phpvirtualbox-4.1-7.zip をダウンロードしました。
WebサーバページとしてPHPが動くディレクトリに展開後、
フォルダにあるREADME.txt を読むと、英語で説明が書いてあり、結局は
config.php-example が設定テンプレートで、リネームかコピーしてconfig.php を作ります。
私の場合はコピーしてからリネームしてconfig.php を作り、使うことにしました。
②ちょっと説明とweb service の起動と確認
phpVirtualBoxの設定についてですが、
phpvirtualboxWiki の
Authentication によれば、
エラーしたらこっちを見ろ!みたいに
Error logging in or connecting to vboxwebsrv へナビゲートされて
そこに何やら説明されています。
それによれば、Windows の場合にで他のプログラム言語などで作られたソフトウェアから
VirtualBox を呼び出す為に、簡単なweb service を動かす必要があり、
それは「vboxwebsrv」だよと説明している様です。
そのvboxwebsrv を起動していないと外部からの操作を受け付けず、動きません。
それは私の環境では、C:\Program Files\Oracle\VirtualBox\VBoxWebSrv.exe という場所、パスの
実行ファイルで、これを
コマンドプロンプトから起動しておきます。
起動確認をすると、色々表示されますが、そこにport=18083 と表示されますが、
それがサーバに使われているポート番号です。
それが動いているかどうか、確認してみるには、ブラウザを開き、
http://127.0.0.1:18083 (VISTA , Win7, Win8 では挙動がXPと違うのでこちらの書き方を個人的に進めます)
もしくは
http://localhost:18083
と入力すると
<?xml version="1.0" encoding="UTF-8"?>
-<SOAP ~ 略 ~
と言ったSOAP通信の内容が閲覧できると思います、これでvboxwebsrv が動くのは確認が出来ました。
③SOAPが動くか確認
ここで気が付かれたかもしれませんが、
SOAP通信(説明
1,
2)はXMLとHTTP を用いたメッセージ交換の仕組みなので、
PHPでも使えるようにしなければいけません。
なので、php.ini の設定の中で
extension=php_soap.dllが有効になっていなければ、
有効に設定してください。(勿論Windows の設定説明です)
;extension=php_soap.dll
を
extension=php_soap.dll
にして、
保存し、Apache を再起動してください。
それでPHPで書かれたphpinfo()関数を実行して
soap
Soap Client |
enabled |
Soap Server |
enabled |
Directive |
Local Value |
Master Value |
soap.wsdl_cache |
1 |
1 |
soap.wsdl_cache_dir |
/tmp |
/tmp |
soap.wsdl_cache_enabled |
1 |
1 |
soap.wsdl_cache_limit |
5 |
5 |
soap.wsdl_cache_ttl |
86400 |
86400 |
こんな感じなのが出るのを確認します。 なければしっかり動いていないので、Windows の環境変数path が
通っているかなど確認してください。
また、VBoxWebSrv.exe に「-help」 と追加でスイッチを与えると、port を変える方法も簡易説明で見ることが出来ます。
Linux だとこのサービスは元々自動起動として扱う方法が
Starting the VirtualBox web service automatically(日本語自動翻訳:
VirtualBox の web サービスを自動的に開始)に
書かれていますが、そちらは割愛します。
(また、私の場合、環境が変化したので動かないのだと思い、マイクロソフトから
.net に依存したSOAP 3.0のツールキットをインストールしてしまいましたが、
入っていないのかと勘違いで入れただけなのだと思うので、ここも割愛します、入れなくても既に入っていると思います。)
④phpVirtualBox のconfig.php という設定の編集
それでは次に、phpVirtualBox 内にある、先ほど作ったconfig.php を編集しながら
何が書いてあるか見てみます。
説明は、先ほどのError logging in or connecting to vboxwebsrv にありますが、
まず、もしVirtualBox のweb service(VBoxWebSrv.exe)のポートを変更したなら、
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://127.0.0.1:18083/';
にある
var $location = 'http://127.0.0.1:xxx/';
xxx の部分も対応する様に変更します。
次にphpVirtualBox はシステムユーザーというユーザーが実行する様に出来ているので、
システムユーザーのID とPassWord を設定します。
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox';
var $password = 'pass';
にあるので、必要であれば変更します。
インターネット越しに呼び出して使おうと思うのならば、
やはり変更をしておくべきなんじゃないかな?と思います。
あともう一つ、言語が英語になっているので日本語にしてみます。
/* Default language. See languages folder for more language options.
* Can also be changed in File -> Preferences -> Language in
* phpVirtualBox.
*/
var $language = 'en';
これを
var $language = 'jp';
にしておきます。
選べる言語はphpVirtualBox の「languages」にある言語ファイルを選べる様です。
日本語もあるので問題ないと思います、バージョンによって確認してみてください。
それではconfig.php の設定の変更を設定を保存して下さい。
⑤VBoxManage.exe コマンドでインストールに影響するグローバル設定を変更
次に、VartualBox のコマンド、VBoxManage.exe を、コマンドプロンプトから実行します。
ここで認証の仕方を変更します。
説明は、
VBoxManage setproperty(
自動翻訳)にあります。
面倒なので、私の場合はエクスプローラーから、実行したいファイルを
コマンドプロンプト(cmd.exe)にドラッグ&ドロップするので、こんな感じになります。
x:\xxx>"C:
\Program Files
\Oracle
\VirtualBox
\VBoxManage.exe"
ただ、cd コマンドとか打ち間違えが面倒なだけなんですが^^;
VirtualBox のパスも含め、いろいろなコマンドの実行ファイルが私の環境では
上記の通り、私の場合は、
C:
\Program Files
\Oracle
\VirtualBox
\
になります。インストールしたフォルダです。
さてそのコマンドの、VBoxManage.exe ですが、スイッチを打ち込み実行します。
認証方法をVBoxManage.exe に、setproperty と言うスイッチを用いて使います。
その続きにまたスイッチを続けて、
2種類の設定を行います。
この2種類ですが、扱いに注意が必要です。
2種類とは、vrdeauthlibrary と、websrvauthlibrary になります。
コマンドのスイッチでヘルプを見ると以下になっていました。
VBoxManage setproperty machinefolder default|<folder> |
vrdeauthlibrary default|<library> |
websrvauthlibrary default|null|<library> |
vrdeextpack null|<library> |
loghistorycount <value>
使う2つは
☆一つ目
vrdeauthlibrary のスイッチは、
特定の仮想マシンで外部認証を選択しているときに使用するライブラリを指定するらしい。
詳細については「RDP 認証」の項を参照してください。とある。
結局打ち込むコマンドは、
VBoxManage setproperty vrdeauthlibrary default
もしくは
VBoxManage setproperty vrdeauthlibrary <library>
のどちらかです。
☆二つ目
websrvauthlibrary のスイッチは、
web サービスを使用してユーザーを認証するために、ライブラリを指定しますらしい。
VirtualBox の web サービスについての詳細については、別の VirtualBox SDK リファレンスを
参照してください (
章 11、 VirtualBox のプログラミング インターフェイスを参照してください).とある。
結局打ち込むコマンドは、
VBoxManage setproperty websrvauthlibrary default
もしくは
VBoxManage setproperty websrvauthlibrary null
もしくは
VBoxManage setproperty websrvauthlibrary <library>
のどれかです。
どちらもdefault として説明はある、がしかし、
他のどこかのサイトでは
websrvauthlibrary にnull を打ち込んでいた所もあった。
良く見てもらえれば分かると思うのですが、ヘルプを見て
vrdeauthlibraryにはnull のスイッチ指定はありません。
場合にもよるが、動かない場合は・・・・調べた上で?試してください・・・・ ここはつまづくと思います・・・
私もまだ未熟なので、よく理解していないので、どなたか分かりましたら助言して下さると助かります!
つまり、動くときと、動かない時があるのです・・・
話は戻りますが、実行は一瞬で行われ、何かアナウンスがある訳ではない様です。
それと、それ以前に、認証関連の設定を確認したい場合に、今現在の設定値や、変更した設定値を
みたい場合があると思います。
その場合は、先ほど説明しましたvboxmanage.exeというコマンドに、別のスイッチを入れて
状態がどうなっているのか確認ができます。
以下、コマンドラインで入力>
vboxmanage list systemproperties
そうすると、以下の様な設定が何処かに表示されます。
VRDE auth library: VBoxAuth
Webservice auth. library: VBoxAuth |
VBoxManage setproperty のスイッチ対応ですが、
vrdeauthlibrary スイッチ場合は、VRDE auth library: の項目が対応し、
websrvauthlibrary スイッチ場合は、Webservice auth. library: の項目が対応しています。
スイッチでdefault を選ぶと表示はVBoxAuth、
スイッチでnull を選ぶと表示はnull になり、設定が変わります。
vrdeauthlibrary もnullが選べますが、ヘルプには項目として無いのに本当に選んでいいのか、
よくわからないので、気を付けましょう。
また、vrdeauthlibrary は、
GUIのVirtualBox.exe の 設定>一般>VRDP認証ライブラリ
でも設定できます、勿論、ウィンドウを閉じたりすれば、コマンドからの変化が繁栄されて見えます。
ちなみに私の場合、このコマンドをweb service(VBoxWebSrv.exe)は動いたまま実行しました。
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
こ れ 間 違 っ て ま し た ! ! !
このVBoxManage setproperty コマンドを使って設定を変えたら、
web service(VBoxWebSrv.exe)は再起動しなければいけません!!!
なので、VBoxManage setproperty コマンドで設定を変えるときは、初めから終了して
設定を変えた後に立ち上げましょう!!!
それで、私の場合は、どうも、phpVirtualBox のソースにある、
recovery.php-disabled をリネームして、recovery.php にして実行してしまった為、
どうしてもID:admin PassWord:admin でしかログオンできませんでしたが、
その時の設定は
VBoxManage setproperty vrdeauthlibrary default
VBoxManage setproperty websrvauthlibrary null
のコマンドを実行して、次に
vboxmanage list systemproperties
コマンドで確認したところ、
VRDE auth library: VBoxAuth
Webservice auth. library: null |
となっている時に
動きました!!!
多分、web service(VBoxWebSrv.exe)の設定は、
VBoxManage setproperty websrvauthlibrary null なのだと思います。
(話は少しそれますが、今回はWindows の説明なのですが、
Linux の場合は、デーモンとして起動しているweb service をリスタートするコマンドもある様です。
Linux の場合は設定し終わったらリスタートは基本です。リスタート後に設定は再び読み込まれ、
繁栄するのがほとんどのLinux デーモンだと思います。)
また、タスクマネージャではコマンドの類などを実行すると、
VirtualBox Interface(VBoxSVC.exe)プロセスが実行されます、実行されて終了ではなく、常に常駐しますし、
web service(VBoxWebSrv.exe)を使う場合には、必ず動いていなければいけないみたいです。
無理やりこのVirtualBox Interface(VBoxSVC.exe)プロセスを消しても、
何かVBoxManage.exe の操作コマンドを実行すると、消しても再び呼び出され、常駐します。
Windows では、再起動が必要ないのか、または認証関係で再起動はないのか、
それらもまだよく分かりませんでした。
VBoxManage.exe のコマンドが、うまくいかない時には、
交互に2回ほどゆっくり繰り返すと、なぜかうまく動き出すことがあります、
たまにコマンドミスなどで、VirtualBox Interface(VBoxSVC.exe)のプロセスが複数常駐して、
増えすぎることもあるので、ゆっくり繰り返すのは、処理されきる前に実行すると、
プロセスが増えるからではないかな?と思います。
もし動かない場合はこの辺りを試すといいかもしれません。
⑥設定後に実行してみる
では、PHP とApache のWebページが動く場所に、phpVirtualBox を配置しているはずなので、
config.php があった場所にある、index.php をブラウザからWebサーバに見立てて実行すれば、
ログイン画面が出るはずです。
出たら、先ほどのconf.php で編集した、システムユーザーのID とPassWord を打ち込んで
動けば問題ないですが、動かなかった場合は、
「⑤VBoxManage.exe コマンドでインストールに影響するグローバル設定を変更」にある様に、
コマンドを交互に2度ほどゆっくり打ち込み直すのも手だと思います。
それでもダメなら再起動しなおしたり、調べた上で上記にあったnull とかも試すといいかも
しれません。
あと、recovery.php-disabled をリネーム方法でリセットすると、
ログインのID とPassWord が、本当に変わってしまう様なのですが、
その後、いくらconfig.php で設定しても、なぜか私はadmin/admin でしか、
phpVirtualBox にログインできませんでした。
phpVirtualBox の設定でパスワードは変えられるのも分かっているのですが、
コマンドでVirtualBox のWeb Server のログインID を変えるコマンドはまだ調べていません。
多分変えられるのだとは思います。
RDP の認証 については分かりにくいので、また今度、探して何か見つけ、機会があればメモを残そうと思います。
今日は長かったのでこれくらいにします。長いメモで失礼しました。(数回修正あり)
それではまた^^ノシ