好像从VirtualBox3的某个版本开始支持了web service接口,这样就使得web界面的编写极大简化,不要再调用那个vboxmanage了。自从Sun官方的vboxweb面世后,激励了一大批优秀的第三方web interface的出现。phpvirtualbox 就是其中一个,而且即使在官方那个web interface停止更新后,他至今依然更新活跃。
安装VirtualBox自然不必说了,添加源
deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free
然后添加Key
[bash]wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O - | sudo apt-key add -
apt-get install virtualbox-4.1[/bash]
4.0以上分出来一个扩展Oracle VM VirtualBox Extension Pack,请用root权限安装下,否则很多增强功能不能用,包括下面的webConsole(官方手册1,2-vboxmanage方式)
[bash]wget http://download.virtualbox.org/virtualbox/4.1.2/Oracle_VM_VirtualBox_Extension_Pack-4.1.2-73507.vbox-extpack
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.2-73507.vbox-extpack
[/bash]
重启下vboxdrv
由于VirtualBox的vboxweb-service API接口的存在,部署起来也很方便。
不过直接启动vboxweb-service服务是没反应的,你必须先按照这个Wiki先配置下文件/etc/default/virtualbox
配置表:
选项 | 描述 |
VBOXWEB_USER | 运行vboxwebsrv的用户,不能是root,强制选项 |
VBOXWEB_HOST | 绑定默认的web service IP,默认是127.0.0.1,有些系统上是强制选项 |
VBOXWEB_PORT | web service接口的端口,默认18083 |
VBOXWEB_TIMEOUT | Session 超时秒数; 0表示禁用超时,默认是300 |
VBOXWEB_CHECK_INTERVAL | 超时检测频率, 默认5 |
VBOXWEB_THREADS | 最大并行运行线程数目,默认100 |
VBOXWEB_KEEPALIVE | Maximum number of requests before a socket will be closed (100). |
VBOXWEB_LOGFILE | Name of file to write log to (no file). |
INSTALL_DIR | The location of the vboxwebsrv binary (/usr/lib/virtualbox). |
至少, VBOXWEB_USER 这个值必须设定.有时候还需要设定 VBOXWEB_HOST。比如web服务器和Vbox的web service不在同一机器上。
12 VBOXWEB_USER=vboxVBOXWEB_HOST=127.0.0.1
然后重启web service服务就可以了
/etc/init.d/vboxweb-service restart
需要注意到是 这个vbox用户一般是不存在机器上的,你一般需要进行添加才可以,记得创建主目录,然后会起来3个进程。到这里 web service API的部署算是结束了
至于phpvirtualbox的部署,就和一般的php程序部署没两样了,放到web目录下,重命名下配置文件,一般设定username/password/location就好了,如果想使用web console(VRDP)下面那个$consoleHost也不能忘记取消注释。
可能遇见的问题:
1.web界面上的Console按钮是灰色的:
确认设置了变量$consoleHost的前提下,如果你使用virtualBox >4.0 需要安装Oracle_VM_VirtualBox_Extension_Pack,如果装完后再root下运行VBoxManage list extpacks 能看见而vbox用户看不见,重启下vboxdrv或者系统即可。
如果在vbox用户下运行VBoxManage list extpacks 也能看见这个pack后还是灰色的,看下虚拟机设置里面的Display有没有一个Remote Display,有的话勾上Enable server就可以了,如果没有,运行VBoxManage showvminfo 【VMName】看看VRDE的状态是不是Disabled,如果是,运行
[bash]VBoxManage modifyvm 【VmName】--vrde on[/bash]
即可。
附上即可基本的VBoxManage用法
无Gui开机
VBoxManage startvm 【VmName】--type headless
ACPI关机
VBoxManage controlvm 【VmName】acpipowerbutton
不过XP多了一个关机时询问用户已经从别处登录的提示 会导致ACPI关机失败(停留在是否关机的提示上)
2.VRDP不能调节链接质量,导致慢速网络下远程很卡。
甚至在安装完VirtualBox Guest Addition分辨率上去后,根本打不开桌面,建议在Guest系统里面开启MS-RDP或者其他第三方远程控制软件。
VirtualBox Guest Addition的位置在 /usr/share/virtualbox/VBoxGuestAdditions.iso
3.RDP authentication的问题
这个在VirtualBox官方文档里面有详细的解释
验证方式有NULL,EXTERNAL,和GUEST。
NULL就是没有认证,很简单。
EXTERNAL就是调用外部库进行验证。VirtualBox自带了两个外部库,一个是VBoxAuth(/usr/lib/virtualbox/VBoxAuth.so),一个是VBoxAuthSimple(/usr/lib/virtualbox/VBoxAuthSimple.so),在PHPVirtualBox的首选项里面设置好这两个库的简写或者完整路径都可以,如果你要实现自己的认证方式,比如LADP,可以按照这个标准进行编写
下面介绍VBoxAuth/VBoxAuthSimple
VBoxAuth很简单,就是使用本机的用户名和密码进行验证,但是要注意,如果直接连接,Windows下RDP会给出这样的提示,提虚拟内存不足
这Ticket指出了问题所在
if no password is given, it refuses the connection (on Linux Hosts). On Windows Hosts, especially XP (that's what I've tested it with), you get two errors (screens in the topic) and no credentials question. The RDP v6 client clearly states that it will ask for a username and password when the connection is made, but after the timeout period it simply refuses the connection. This means that the VRDP server never asks for the credentials, but only accepts them if they are supplied along with the connection request. All other connection attempts are denied.
解决的方法也很简单,在RDP客户端里面指定连接的用户名和密码就可以了.
VBoxAuthSimple的认证要比VBoxAuth简单,用户不是真实的系统用户,,而是在文件里面设置的虚拟用户,从而可以提供较高的安全性。
在phpVirtualBox里面设定好使用VBoxAuthSimple或者VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"后就可以即用VBoxAuthSimple 需要注意的是,phpVirtualBox好像不能设置VBoxAuthSimple的用户验证管理,需要用VBoxManage来管理。另外phpVirtualBox显示的vrdeauthlibrary并不是实时性的。但是在这里的设置会覆盖实时设置。
下面我们来进行VBoxAuthSimple用户的设置
[bash]vpass=secret
vuser=ihipop
vvm=XP
VBoxManage setextradata $vvm "VBoxAuthSimple/users/$vuser" VBoxManage internalcommands passwordhash "$vpass" |awk '{print $3}'
[/bash]
如果要删除这个定义 setextradata后面的的key对应的value为空就可以了。
关于VRDP服务的加密。参考这里 http://www.virtualbox.org/manual/ch07.html#vrde-crypt
总的来说Virtual虽然说是功能齐全,但也是算是玩具级别的。对不支持虚拟化的CPU来说,临时装个这个给外甥女挂个QQ还是够了=。=