PhpVirtualBox

出自 ArchWiki

phpVirtualBox 是一个开源的,基于 AJAX 实现的 VirtualBox 用户界面,使用 PHP 编写。作为一个现代化的 Web 界面,它允许您访问和控制远程 VirtualBox 实例。它的许多措辞和一些代码都基于 (不活跃的) vboxweb 项目。phpVirtualBox 的设计目的是允许用户在无头环境中管理 VirtualBox - 通过其 Web 界面镜像 VirtualBox GUI。

安装

要远程控制虚拟机,您需要两个组件:VirtualBox 网络服务,与虚拟机在同一操作系统中运行;以及 Web 界面,使用 PHP 编写,因此依赖于支持 PHP 的 Web 服务器。它们之间的通信基于 SOAP 协议,目前未加密,因此建议将两者安装在同一台机器上,如果您不希望您的用户名和密码以明文形式通过网络发送。

VirtualBox 网络服务

要使用 Web 控制台,您必须安装 virtualbox-ext-oracleAUR 软件包。

VirtualBox 网络界面 (phpvirtualbox)

安装 phpvirtualbox 软件包。您还需要您选择的支持 PHP 的 Web 服务器 (Apache HTTP 服务器 是一个合适的选择)。

配置

从现在开始,假设您已正确配置 Web 服务器 (根目录在 /srv/http) 和 PHP 功能。

网络服务

在虚拟机设置中,启用远程桌面访问并指定一个与其他虚拟机不同的端口。

每次您需要使机器远程可用时,执行如下操作

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

以您希望服务从其运行的用户帐户运行 (如果已在 /etc/host.conf 中启用与 localhost 的关联,则 --host 选项不是必需的)。

注意: 此用户必须在 vboxusers 组中!

virtualboxsystemd 提供了 vboxweb.service

要从非 root 用户启动 vboxweb,您必须

  1. vboxusers 组中创建或添加用户 (例如,vbox)
  2. 编辑 像这样编辑 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
  3. 为您的 vboxweb_mod.service 创建 tmpfile 规则
    # echo "d /run/vboxweb 0755 vbox vboxusers" > /etc/tmpfiles.d/vboxweb_mod.conf
  4. 手动创建 /run/vboxweb 目录以首次启动 vboxweb_mod.service
    # mkdir /run/vboxweb
    # chown vbox:vboxusers /run/vboxweb
    # chmod 755 /run/vboxweb
    或者只需重启您的系统即可自动创建。
  5. 启动/启用 vboxweb_mod.service

网络界面

编辑 /etc/php/php.ini,取消注释以下行

extension=soap

适当编辑示例配置文件 /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 作为 Web 服务器,您可以将 /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

不要忘记重启 Web 服务器 (例如,对于 Apache,重启 httpd.service)。

运行

如果一切正常,请访问 http://您的VboxWebInterfaceHost/phpvirtualbox,它应该显示一个登录框。初始用户名和密码均为 "admin",登录后从 Web 界面更改它们 (文件 -> 更改密码)。如果您在 Web 界面 config.php 中设置 $noAuth=true,您应该立即看到 phpvirtualbox Web 界面。

调试

如果您遇到登录问题,并且您已将 VirtualBox 从 3.2.x 升级到 4.0.x,您应该运行以下命令来更新您 VirtualBox 配置文件中的 websrvauthlibrary,该文件已从 VRDPAuth.so 更改为 VBOXAuth.so

VBoxManage setproperty vrdeauthlibrary default
VBoxManage setproperty websrvauthlibrary default 

如果您遇到登录问题,并出现包含以下内容的错误消息

[message:protected] => Could not connect to host (http://127.0.0.1:18083/)

那么您可能需要编辑 /etc/webapps/phpvirtualbox/config.php 变量 location 以使用 localhost 而不是 127.0.0.1。有关更多信息,请参阅 此论坛帖子

如果您仍然无法登录界面,您可以尝试禁用 Web 身份验证,方法是

VBoxManage setproperty websrvauthlibrary null

在虚拟化服务器上,并将用户名和密码设置为空字符串,并在 Web 服务器上的 /etc/webapps/phpvirtualbox/config.php 中设置 $noAuth=true。 这样做,您应该立即访问 Web 界面,而无需登录过程。然后,也许您可以尝试一些 Apache 访问控制。

参见