PhpVirtualBox

提供: ArchWiki
2015年11月27日 (金) 23:49時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

phpVirtualBoxPHP で書かれた VirtualBox のユーザーインターフェイスのオープンソースな AJAX 実装です。近代的なウェブインターフェイスとして、リモートの VirtualBox インスタンスにアクセス・コントロールすることができます。コードは (開発が停止した) vboxweb プロジェクトをベースにしています。phpVirtualBox はヘッドレス環境の VirtualBox を管理できるように作られ、VirtualBox GUI をウェブインターフェイスで実現しています。

インストール

仮想マシンを遠隔操作するには2つのコンポーネントが必要です: 仮想マシンと同一の OS で動作する VirtualBox ウェブサービスと、PHP で書かれた、PHP が使用できるウェブサーバーに依存するウェブインターフェイスです。インターフェイスの通信で使用される SOAP プロトコルは暗号化されないため、ユーザー名とパスワードを平文でネットワーク上に送信したくない場合は同一のマシンにインストールすることが推奨されます。

VirtualBox ウェブサービス

ウェブコンソールを使うには、AUR から virtualbox-ext-oracleAUR パッケージをインストールする必要があります。

VirtualBox ウェブインターフェイス (phpvirtualbox)

公式リポジトリから phpvirtualboxインストールしてください。また、php に対応しているウェブサーバーを選択します (Apache が適当でしょう)。

設定

From here on out, it is assumed that you have a web server (with root at /srv/http) and php functioning properly.

ウェブサービス

In the virtual machine settings, enable the remote desktop access and specify a port different with other virtual machines.

Every time you need to make machine remotely available execute something like this:

vboxwebsrv -b --logfile path to log file --pidfile /run/vbox/vboxwebsrv.pid --host 127.0.0.1

As user whose account you want the service to be running from (--host option is not necessary if you enabled association with localhost in the /etc/host.conf).

ノート: This user must be in group vboxusers!

virtualbox は community に入っており、systemd で扱うための vboxweb.service が含まれています。

To start vboxweb from non-root user you must:

1. vboxusers グループにユーザーを作成・追加してください (例: vbox)

2. Create your custom vboxweb_mod.service file by copying /usr/lib/systemd/system/vboxweb.service to /etc/systemd/system/vboxweb_mod.service

3. Modify /etc/systemd/system/vboxweb_mod.service like this:

 [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. Create tmpfile rule for your vboxweb_mod.service

# echo "d /run/vboxweb 0755 vbox vboxusers" > /etc/tmpfiles.d/vboxweb_mod.conf

5. Create manually /run/vboxweb directory for first start vboxweb_mod.service

# mkdir /run/vboxweb
# chown vbox:vboxusers /run/vboxweb
# chmod 755 /run/vboxweb

or just reboot your system for automatically create.

6. Start vboxweb_mod.service

# systemctl start vboxweb_mod

and enable it if nessesary

# systemctl enable vboxweb_mod

ウェブインターフェイス

Edit /etc/php/php.ini, make sure the following lines are uncommented.

extension=json.so  ; this module is built into php as of version 5.4 and so will not exist or need to be uncommented
extension=soap.so

Edit the example configuration file /usr/share/webapps/phpvirtualbox/config.php-example appropriately (it is well-commented and does not need explanations). Copy that file into /etc/webapps/phpvirtualbox/config.php and symlink to /usr/share/webapps/phpvirtualbox/config.php.

Then, edit /etc/php/php.ini, find open_basedir and append the configuration path /etc/webapps/ at the end. It will look like the follows:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/

If you are running Apache as webserver, you can copy /etc/webapps/phpvirtualbox/apache.example.conf into /etc/httpd/conf/extra/phpvirtualbox.conf. If you are running Apache 2.4, due to the syntax of ACL changes, edit that file to replace the follows

Order allow,deny
Allow from all

to:

Require all granted

Next, add following line into /etc/httpd/conf/httpd.conf:

Include conf/extra/phpvirtualbox.conf

Edit /etc/webapps/phpvirtualbox/.htaccess and remove the following line.

deny from all

Don't forget to restart the webserver like this (example for Apache):

systemctl restart httpd

実行

If everything works fine, visit http://YourVboxWebInterfaceHost/phpvirtualbox and it should show a login box. The initial username and password are both "admin", after login change them from the web interface (File -> change password). If you set $noAuth=true in the web interface config.php, you should immediately see the phpvirtualbox web interface.

デバッグ

If you encounter a login problem, and you have upgraded virtualbox from 3.2.x to 4.0.x, you should run the following command to update you websrvauthlibrary in you virtualbox configuration file which has been changed from VRDPAuth.so to VBOXAuth.so.

VBoxManage setproperty vrdeauthlibrary default
VBoxManage setproperty websrvauthlibrary default 

If you are still unable to login into the interface, you can try to disable webauth by

VBoxManage setproperty websrvauthlibrary null

on virtualization server and set username and password to empty strings and set $noAuth=true in /etc/webapps/phpvirtualbox/config.php on web server. By doing this, you should immediatelly access the web interface without login process. And then, maybe you can try some apache access control.

参照