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

VirtualBoxを操作する際に、いちいちホストマシンにログイン(GUI, CUI)するのは面倒です。この記事では ブラウザから VirtualBox を操作(VMの起動・停止・スナップショット操作)する方法を紹介します。自動起動や停止は、以下の前回記事を参照してください。

今回は CentOS 7 に VirtualBox を yum でインストールし、VM の自動起動とホスト終了時に VM も同時に終了させる設定をします。自宅サーバーや開発環境...

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

phpVirtualBox では、複数の VirtualBox(ホスト) を管理することができますが、今回の紹介では割愛します。

Windows をホストOSとした phpVirtualBox の設定記事も追加しましたこちらです↓↓↓

前回、Linuxをホストとした VirtualBox を Web から操作(VMの起動・停止・スナップショット操作)する方法を紹介しました。今回は、ホスト OS が Windo...
参考URL
https://download.virtualbox.org/virtualbox/SDKRef.pdf
https://github.com/phpvirtualbox/phpvirtualbox
スポンサーリンク

phpVirtualBox のセットアップ

利用した環境を簡単に紹介しておくと、CentOS 7 (7.4 を利用しています) で、VirtualBox は 5.2 系です。(細かく確認はしていませんが、現時点で VirtualBox 6.0 系を利用したい場合、phpVirtualBox は master ブランチではなく develop ブランチの取得が必要だったと思います。)

必要なパッケージをインストールします。policycoreutils-python パッケージは、SELinux の設定をおこなうために入れています。SELinux を使っていない場合は、不要です。

yum -y install php php-soap httpd
yum -y unzip
yum -y policycoreutils-python

phpVirtualBox を取得し、apache の ドキュメントルートに展開します。フォルダ名が長いので vbox と変更しています。

pushd /tmp/ && wget https://github.com/phpvirtualbox/phpvirtualbox/archive/master.zip
unzip master.zip -d /var/www/html/
mv /var/www/html/phpvirtualbox-master /var/www/html/vbox
popd

phpVirtualBox のコンフィグファイルを準備します。(サンプルを利用します。)

cp /var/www/html/vbox/config.php-example /var/www/html/vbox/config.php

config.php を修正します。修正箇所は以下の3ヶ所です。(認証なしでアクセスできるようにしています)

1
2
3
4
5
6
・・・
var $username = ''; # 空にする
var $password = ''; # 空にする
・・・
var $noAuth = true; # アンコメント
・・・

vboxwebsrv のサービスを通して vboxuser が認証なしで VirtualBox を操作できるように設定します。/etc/default/virtualbox は前回記事でも利用したファイルです。書きつぶさないように、追加します。

echo "VBOXWEB_USER=vboxuser" >> /etc/default/virtualbox
echo "VBOXWEB_HOST=127.0.0.1" >> /etc/default/virtualbox
sudo -u vboxuser VBoxManage setproperty websrvauthlibrary null

httpd の公開コンテンツとしてアクセスできる用に SELinux を設定をします。(phpVirtualBox を展開したディレクトリと vboxwebsrv が利用するポートに設定します。)

semanage fcontext -a -s system_u -t httpd_sys_content_t -r s0 "/var/www/html/vbox(/.*)?"
restorecon /var/www/html/ -R
semanage port -a -t http_port_t -p tcp 18083

vboxwebsrv と apache を起動します。

systemctl enable vboxweb-service
systemctl start vboxweb-service
systemctl enable httpd
systemctl start httpd

web ページにアクセスできるようにファイヤーウォールを開けます。

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

動作確認

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

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

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

/etc/default/virtualbox の設定が間違っていないか。18083 ポートは空いているか。認証設定(認証なし)は正しくできているか。 SELinux の設定は間違っていないか。ファイヤーウォールは空いているか。切り分けながら見直してみるとよいでしょう。

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/)