前回、Linuxをホストとした VirtualBox を Web から操作(VMの起動・停止・スナップショット操作)する方法を紹介しました。今回は、ホスト OS が Windows の場合の設定を紹介します。特に、ホスト OS が Windows の場合は、VM を自動起動することができないため、一度 ホスト(Windows)にログインして VM を起動する必要があります。この機能を利用するとホスト上に構築した Web サーバーにアクセスするだけで VM が操作できます。
Linux をホストOSとした phpVirtualBox の設定記事はこちら↓↓↓
phpVirtualBox とは
前回紹介していますが、今回利用する機能のおさらいです。 VirtualBox には SOAP で VM を制御する API が用意されているようです。この API を利用するために vboxwebsrv というサービスを利用します。そして、この SOAP API を通して VirtualBox 制御する phpVirtualBox というソフトを利用することで、ブラウザで 各VM の起動・停止・スナップショット操作ができるようになります。
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 を利用してもよいと思います。)
httpd-2.4.38-win64-VC14
php-7.1.26-Win32-VC14-x64
phpvirtualbox-master
VirtualBox:VirtualBox の本体ですね。省略しようかとも思いましたが一応。
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
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_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」のコメントがあるブロックの一番下に以下を追加します。
httpd.conf の 一番下に以下を追加します。
AddType application/x-httpd-php .php
PHPIniDir "C:/Program Files/PHP"
</IfModule>
コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行します。これにより Apache がサービス登録されます。
以下のような画面が出れば成功です。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 を管理するユーザの権限で実行する必要があります。
また、必要に応じて config.php の以下を変更しておくと、ブラウザで操作する画面が日本語になります。
var $language = 'ja';
・・
Windows Server 2003 Resource Kit Tools のインストール
ダウンロードしてきた、rktools.msi をダブルクリックしてインストールします。ライセンス条項を確認・同意して進めるだけです。すべてデフォルトの設定で問題ありません。
インストール後、コンピュータの再起動を促されたら従いましょう。
この方法で vobxwebsrv をサービス化できました。( x86 版しかないところが気になりますが、64bit 環境で問題なく動いています。)
もし、rktools.msi が入れたくなければ、サービス化するラッパーのツールを自作するか、タスクスケジューラで vobxwebsrv を実行しても問題ありません。
rktools.msi のインストールが完了したら、コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行します。
ユーザー名とパスワードは適宜変更してください。これは、VMを管理している Windows の ログインユーザのものを入れます。
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 から、セットアップした端末へ ブラウザで web アクセスして以下のような画面が出力されることを確認します。
エラーが出てアクセスできない
ブラウザでアクセスした際に、以下のようなエラーが出て、操作画面にアクセスできない場合は、vboxwebsrv の起動がうまくいっていません。
vboxwebsrv が Windows の サービスに登録されているか。登録されているサービスは手動起動できるか。 18083 ポートが空いているか。 認証設定(認証なし)は正しくできているか。 など、切り分けて見直してみるとよいでしょう。