PhpVirtualBox
関連記事
phpVirtualBox は PHP で書かれた VirtualBox のユーザーインターフェイスのオープンソースな AJAX 実装です。近代的なウェブインターフェイスとして、リモートの VirtualBox インスタンスにアクセス・コントロールすることができます。コードは (開発が停止した) vboxweb プロジェクトをベースにしています。phpVirtualBox はヘッドレス環境の VirtualBox を管理できるように作られ、VirtualBox GUI をウェブインターフェイスで実現しています。
目次
インストール
仮想マシンを遠隔操作するには2つのコンポーネントが必要です: 仮想マシンと同一の OS で動作する VirtualBox ウェブサービスと、PHP で書かれた、PHP が使用できるウェブサーバーに依存するウェブインターフェイスです。インターフェイスの通信で使用される SOAP プロトコルは暗号化されないため、ユーザー名とパスワードを平文でネットワーク上に送信したくない場合は同一のマシンにインストールすることが推奨されます。
VirtualBox ウェブサービス
ウェブコンソールを使うには、virtualbox-ext-oracleAUR パッケージをインストールする必要があります。
VirtualBox ウェブインターフェイス (phpvirtualbox)
phpvirtualbox パッケージをインストールしてください。また、php に対応しているウェブサーバーを選択します (Apache が適当でしょう)。
設定
以下の設定をするには先にウェブサーバーと PHP をセットアップしておく必要があります (ルートディレクトリは /srv/http
とします)。
ウェブサービス
仮想マシンの設定で、リモートデスクトップのアクセスを有効にして他の仮想マシンとは異なるポートを指定してください。
マシンにリモートからアクセスするには、毎回以下のようなコマンドを実行する必要があります:
vboxwebsrv -b --logfile path to log file --pidfile /run/vbox/vboxwebsrv.pid --host 127.0.0.1
上記のコマンドはサービスを実行するのに使いたいユーザーで実行してください (/etc/host.conf
で localhost の関連付けを有効にしている場合は --host
オプションは外してもかまいません)。
virtualbox は community に入っており、systemd で扱うための vboxweb.service
が含まれています。
root 以外のユーザーから vboxweb
を起動したい場合:
1. vboxusers
グループにユーザーを作成・追加してください (例: vbox
)。
2. /usr/lib/systemd/system/vboxweb.service
を /etc/systemd/system/vboxweb_mod.service
にコピーしてカスタム vboxweb_mod.service
ファイルを作成。
3. 以下のように /etc/systemd/system/vboxweb_mod.service
を編集:
[Unit] Description=VirtualBox Web Service After=network.target [Service] Type=forking PIDFile=/run/vboxweb/vboxweb.pid ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxweb/vboxweb.pid --background User=vbox Group=vboxusers [Install] WantedBy=multi-user.target
4. vboxweb_mod.service
の一時ファイルルールを作成:
# echo "d /run/vboxweb 0755 vbox vboxusers" > /etc/tmpfiles.d/vboxweb_mod.conf
5. vboxweb_mod.service
の最初の起動のために /run/vboxweb
ディレクトリを手動で作成:
# mkdir /run/vboxweb # chown vbox:vboxusers /run/vboxweb # chmod 755 /run/vboxweb
もしくはシステムを再起動すると自動的に作成されます。
6. vboxweb_mod.service
を起動・有効化。
ウェブインターフェイス
/etc/php/php.ini
を編集して、以下の行をアンコメントしてください:
extension=soap.so
サンプル設定ファイルの /usr/share/webapps/phpvirtualbox/config.php-example
を適切に編集してください (ファイルにはコメントが豊富に付けられています)。ファイルを /etc/webapps/phpvirtualbox/config.php
にコピーして、/usr/share/webapps/phpvirtualbox/config.php
のシンボリックリンクを作成してください。
それから /etc/php/php.ini
を編集して open_basedir
の末尾に以下のように設定パスの /etc/webapps/
を追加してください:
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/
ウェブサーバーとして Apache を使用する場合、/etc/webapps/phpvirtualbox/apache.example.conf
を /etc/httpd/conf/extra/phpvirtualbox.conf
にコピーして使うこともできます。Apache 2.4 を使用する場合、ACL の構文が変更になった ため、ファイルの以下の部分を:
Order allow,deny Allow from all
以下のように変更する必要があります:
Require all granted
それから、/etc/httpd/conf/httpd.conf
に以下の行を追加してください:
Include conf/extra/phpvirtualbox.conf
/etc/webapps/phpvirtualbox/.htaccess
を編集して以下の行を削除してください:
deny from all
設定後、ウェブサーバーを再起動してください (Apache であれば httpd.service
を再起動)。
実行
設定に問題がなければ http://YourVboxWebInterfaceHost/phpvirtualbox を開いてログイン画面が表示されることを確認してください。初期ユーザー名・パスワードは "admin" です。ログインしたらウェブインターフェイスから変更することができます (File -> change password)。config.php
でウェブインターフェイスの $noAuth=true
を設定した場合、すぐに phpvirtualbox のウェブインターフェイスが表示されます。
デバッグ
ログインができない場合、あるいは virtualbox を 3.2.x から 4.0.x にアップグレードした場合、以下のコマンドを実行して virtualbox の設定ファイルの websrvauthlibrary を更新して VRDPAuth.so
から VBOXAuth.so
に変更する必要があります:
VBoxManage setproperty vrdeauthlibrary default VBoxManage setproperty websrvauthlibrary default
上記のコマンドを実行してもインターフェイスにログインできないときは、以下のコマンドで webauth を無効化してみてください:
VBoxManage setproperty websrvauthlibrary null
そしてウェブサーバーの /etc/webapps/phpvirtualbox/config.php
で $noAuth=true を設定してユーザー名とパスワードを空文字にしてください。ログイン画面をスキップしてすぐにウェブインターフェイスが表示されます。