Windows ホストに phpVirtualBox を設定し、VirtualBox をブラウザで操作する

前回、Linuxをホストとした VirtualBox を Web から操作(VMの起動・停止・スナップショット操作)する方法を紹介しました。今回は、ホスト OS が Windows の場合の設定を紹介します。特に、ホスト OS が Windows の場合は、VM を自動起動することができないため、一度 ホスト(Windows)にログインして VM を起動する必要があります。この機能を利用するとホスト上に構築した Web サーバーにアクセスするだけで VM が操作できます。

Linux をホストOSとした phpVirtualBox の設定記事はこちら↓↓↓

VirtualBoxを操作する際に、いちいちホストマシンにログイン(GUI, CUI)するのは面倒です。この記事では ブラウザから VirtualBox を操作(VMの起動・停...

phpVirtualBox とは

前回紹介していますが、今回利用する機能のおさらいです。 VirtualBox には SOAP で VM を制御する API が用意されているようです。この API を利用するために vboxwebsrv というサービスを利用します。そして、この SOAP API を通して VirtualBox 制御する phpVirtualBox というソフトを利用することで、ブラウザで 各VM の起動・停止・スナップショット操作ができるようになります。

phpVirtualBox では、複数の VirtualBox(ホスト) を管理することができますが、今回の紹介では割愛します。
参考URL
https://download.virtualbox.org/virtualbox/SDKRef.pdf
https://github.com/phpvirtualbox/phpvirtualbox
スポンサーリンク

phpVirtualBox のセットアップ

私が構築した環境は Windows 10 Pro (1709,1803,1809) 64bit です。そのほかのクライアントタイプの Windows 7 までなら同じように作れるはずです。(※ Windows 8 は動作報告もらいました)

事前準備(ダウンロード)

phpVirtualBox に必要なソフトとその用途、ダウンロード先を以下にまとめます。64bit か 32bit はホストOSの環境にそろえてください。また、私が動作確認した version の組み合わせは、以下の通りです。(VC15:2017 や VC16:2019 を利用してもよいと思います。)

VirtualBox-5.2.18-124319-Win
httpd-2.4.38-win64-VC14
php-7.1.26-Win32-VC14-x64
phpvirtualbox-master

VirtualBox:VirtualBox の本体ですね。省略しようかとも思いましたが一応。

https://www.virtualbox.org/

phpVirtualBox を利用するのであれば、5.2系が安定しています。6.0系は、phpVirtualBox側がまだ開発中です。(2019.2.19現在)

VCランタイム: Apache と PHP を動かすために必要です。

https://www.microsoft.com/ja-jp/download/details.aspx?id=48145

Apache:いわずと知れた、Webサーバー今回 phpVirtualBox を動かすために必要です。

https://www.apachelounge.com/download/

PHP7:Apache上でPHPを動かします。私はスレッドセーフ版を落としました。

https://windows.php.net/download

phpVirtualBox:PHP(Apache) と VirtualBox(vboxwebsrv) をはしわたしをします。

https://github.com/phpvirtualbox/phpvirtualbox

VirtualBox 6.0 を利用するには、develop 版が必要でした。(2019.02.20 時点)試した VirtualBox 本体のバージョンは、VirtualBox-6.0.4-128413-Win です。

Windows Server 2003 Resource Kit Tools:vboxwebsrvをサービス化するために使用します。

https://www.microsoft.com/en-us/download/details.aspx?id=17657

インストールと設定

VirtualBox のインストールと VM の設定・インストールは終わっているものとして以下説明していきます。

VC ランタイムのインストール

ダウンロードしてきた vc_redist.x64.exe をダブルクリックしてインストールします。ライセンス条項を確認・同意して進めるだけなので、何も記載することはありません。
インストール後、コンピュータの再起動を促されたら従いましょう。

PHP7 のインストール

ダウンロードした zip ファイルを解凍して、適当なディレクトリに置きます。ここでは、C:\Program Files\PHP に配置するものとして進めます。

C:\Program Files\PHP\php.ini-production ファイルを C:\Program Files\PHP\php.ini としてコピーします。php.ini の「Dynamic Extensions」のコメントがあるブロックの一番下に以下を追加します。

extension=php_soap.dll
extension_dir="C:\Program Files\PHP\ext"

Apache のインストール

ダウンロードした zip ファイルを解凍して、適当なディレクトリに置きます。ここでは、C:\ ドライブ直下 に置くものとして進めます。

Apache のコンフィグファイル( C:\Apache24\conf\httpd.conf )に、以下のとおり 先ほど配置した PHP7 の PATH を設定します。PATH は適宜変更してください。

httpd.conf の「Dynamic Shared Object (DSO) Support」のコメントがあるブロックの一番下に以下を追加します。

LoadModule php7_module "C:\Program Files\PHP\php7apache2_4.dll"

httpd.conf の 一番下に以下を追加します。

<IfModule php7_module>
AddType application/x-httpd-php .php
PHPIniDir "C:/Program Files/PHP"
</IfModule>

コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行します。これにより Apache がサービス登録されます。

C:\Apache24\bin\httpd.exe -k install

以下のような画面が出れば成功です。ERRORとあり一瞬「お?」と思いますが、ちゃんと読んでみると成功しています。

phpVirtualBox のインストール

ダウンロードした zip ファイルを解凍して、Apache の ドキュメントルート(C:\Apache24\htdocs)に配置します。ここでは、C:\Apache24\htdocs\vbox に配置しています。

C:\Apache24\htdocs\vbox\config.php-example ファイルを C:\Apache24\htdocs\vbox\config.php としてコピーします。config.php を以下のように変更します。

・・
var $username = '';
var $password = '';
・・・
var $noAuth = true;
・・

コマンドプロンプトを起動し、以下のコマンドを実行し vboxwebsrv の認証を無効にします。これは、VM を管理するユーザの権限で実行する必要があります。

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setproperty websrvauthlibrary null
このコマンドにより %USERPROFILE%\.VirtualBox\VirtualBox.xml の SystemProperties に、webServiceAuthLibrary=”null” が追加されていると思います。
これは認証を行わない設定をしています。

また、必要に応じて config.php の以下を変更しておくと、ブラウザで操作する画面が日本語になります。

・・
var $language = 'ja';
・・

Windows Server 2003 Resource Kit Tools のインストール

ダウンロードしてきた、rktools.msi をダブルクリックしてインストールします。ライセンス条項を確認・同意して進めるだけです。すべてデフォルトの設定で問題ありません。
インストール後、コンピュータの再起動を促されたら従いましょう。

今回の作業で、最も苦労した(海外サイト巡り)部分です。vobxwebsrv がサービス化できずに、タスクスケジューラで実行していましたが、
この方法で vobxwebsrv をサービス化できました。( x86 版しかないところが気になりますが、64bit 環境で問題なく動いています。)

もし、rktools.msi が入れたくなければ、サービス化するラッパーのツールを自作するか、タスクスケジューラで vobxwebsrv を実行しても問題ありません。

rktools.msi のインストールが完了したら、コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行します。
ユーザー名とパスワードは適宜変更してください。これは、VMを管理している Windows の ログインユーザのものを入れます。

sc create VBoxWebSrv binpath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto displayname= "VirtualBox Web Service" obj= "ユーザ名" password= "パスワード"
sc failure VBoxWebSrv reset= 3600 actions= restart/1000/restart/1000/restart/1000
powershell New-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\VBoxWebSrv\Parameters'
powershell Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\VBoxWebSrv\Parameters' -Name Application 'C:\Program Files\Oracle\VirtualBox\VBoxWebSrv.exe'
"C:\Program Files (x86)\Windows Resource Kits\Tools\ntrights.exe" +r SeServiceLogonRight -u "ユーザー名"

これにより、VBoxWebSrv というサービスが登録され自動起動するようになります。

これらのサービス登録コマンドを実行時に意味不明なエラーが出る場合は、ユーザー名の前に「コンピュータ名\」や「.\」を付加してみてください。
また、sc コマンドは、ユーザー名/パスワードを省略して登録し、GUIでユーザ名/パスワードを設定してもよいです。

ここまで終わったら、 一度 PC を再起動します。

再移動から復帰後、別の PC から、セットアップした端末へ ブラウザで web アクセスして以下のような画面が出力されることを確認します。

エラーが出てアクセスできない

ブラウザでアクセスした際に、以下のようなエラーが出て、操作画面にアクセスできない場合は、vboxwebsrv の起動がうまくいっていません。

vboxwebsrv が Windows の サービスに登録されているか。登録されているサービスは手動起動できるか。 18083 ポートが空いているか。 認証設定(認証なし)は正しくできているか。 など、切り分けて見直してみるとよいでしょう。

An error occurred communicating with your vboxwebsrv. No more requests will be sent by phpVirtualBox until the error is corrected and this page is refreshed. The details of this connection error should be displayed in a subsequent dialog box.

Could not connect to host (http://127.0.0.1:18083/)