VirtualBox (简体中文)
From ArchWiki
i18n |
---|
English |
Italiano |
简体中文 |
Русский |
Español |
Contents |
什么是VirtualBox
VirtualBox是类似于vmware的虚拟机模拟器。它拥有vmware的许多特性,以及许多它自身独有的。最近这个软件发展很快,比如在2.2版本对Linux和Solaris引入OpenGL 3D加速功能。这个软件有很友好的界面(QT或SDL),同时也可以依靠强大的命令行来进行操作。
版本
VirtualBox有两种版本:VirtualBox-ose和VirtualBox(PUEL)(Personal Use and Evaluation License 个人使用和评估许可协议)
VirtualBox-ose
这是VirtualBox的开源版本,可以在community软件仓库找到。它缺少一些功能,比如USB支持和RCP服务器。
VirtualBox (PUEL)
这是免费供个人使用的版本,可以在 AUR找到,或者到 VirtualBox官方网站下载
附加特性包括:
- 远程显示协议(Remote Display Protocol RDP)服务器
这一要素在虚拟硬件上提供了一个完整的RDP服务器,用户可以通过任何RDP兼容的客户端来远程连接虚拟机。
- USB支持
VirtualBox提供了一个虚拟的USB控制器,支持从USB 1.1、USB 2.0设备到虚拟机的传输。
- 在RDP上使用USB
这是USB支持和RDP服务器的结合,让用户可以在远程运行的虚拟机上使用USB设备。
- iSCSI initiator
VirtualBox包含一个内建的iSCSI initiator,不需要虚拟系统对iSCSI的支持就可以用iSCSI targets作虚拟磁盘。
安装
现在让我们来安装VirtualBox。我们有两种选择:OSE版本或者PUEL版本。
安装VirtualBox OSE
安装VirtualBox OSE,你需要在/etc/pacman.conf中打开community软件仓库
#[community] # Add your preferred servers here, they will be used first #Include = /etc/pacman.d/community
改成:
[community] # Add your preferred servers here, they will be used first Include = /etc/pacman.d/community
用pacman安装VirtualBox OSE:
pacman -Sy virtualbox-ose
(注意:安装程序会生成一个桌面项,位于applications -> system tools -> VirtualBox OSE)
(注意:依靠这种方法安装的VIrtualBOx不支持x86_64平台,2.0.4版本不是在x86_64位平台编译的,2.10版或许会对64位平台有更好支持)
这样做会默认安装virtualbox-ose和virtualbox-modules两个包。然后你要加自己到vboxusers组:
gpasswd -a USERNAME vboxusers
(注意:为使这一变更生效,你需要注销并重新登陆)
然后把vboxdrv添加到/etc/rc.conf的modules行,它就会在每次开机时自动加载。如果你想手动加载,用root身份输入:
modprobe vboxdrv
HowTo:
VirtualBox-HowTo
安装VirtualBox PUEL
这很容易,因为piie已经写出了一份很好的pkgbuild,就在AUR: virtualbox_bin里。
从AUR: virtualbox_bin下载tar压缩包,解压缩后运行makepkg然后作为root:
# pacman -U PACKAGE-NAME.pkg.tar.gz
(注意: 安装程序会生成一个桌面项,位于applications -> system tools -> Innotek VirtualBox)
但是,还有另外一种方法可以更方便安装virtualbox_bin软件包:
首先,按照下面修改/etc/pacman.conf:
[archlinuxfr] Server = http://repo.archlinux.fr/i686
或者
[archlinuxfr] Server = http://repo.archlinux.fr/x86_64
之后就能用
# pacman -Sy virtualbox_bin
安装Virtualbox_bin
装完以后把你自己加入到vboxusers用户组:
gpasswd -a USERNAME vboxusers
(注意:为使这一变更生效,你需要注销并重新登陆)
把vboxdrv加到/etc/rc.conf的MODULES行,如果要手动载入模块,在终端下执行:
# modprobe vboxdrv
重要:
由于升级、重编译等原因,每次内核版本发生变化时,你都要用"vbox_build_module"来重新制作virtualbox的内核模块。这一程序可能位于以下任何一个位置:/sbin, /bin, 或/usr/bin,必须用超级用户(superuser)权限来执行它。重新制作以后,别忘了加载它:modprobe vboxdrv.
安装QT库
最新的VirtualBox需要QT4库文件来构建图形界面,如果你需要图形界面,就要保证安装了QT4:
# pacman -S qt
安装VirtualBox 2.1 (另外一种方法)
VirtualBox安装也可以直接从VirtualBox网站上下载安装文件来进行安装。Linux section
确保安装了4.3.0或更高版本的 Qt 和 1.2.7 或者更高版本的SDL :
# pacman -Sy qt sdl
从网站上根据自己电脑下载 i386/AMD64 的安装文件。之后在终端进入下载目录执行下面的命令:
# sh VirtualBox-2.XXXX-Linux_ARCH.run
软件将会被安装在 /opt/VirtualBox-2.XXX 目录。
装完以后把你自己加入到vboxusers用户组:
gpasswd -a USERNAME vboxusers
(注意:为使这一变更生效,你需要注销并重新登陆)
把vboxdrv加到/etc/rc.conf的MODULES行,如果要手动载入模块,在终端下执行:
# modprobe vboxdrv
配置
装好VirtualBox并把自己添加到vboxusers组以后,我们就可以开始配置系统,让VirtualBox的所有功能都可以使用。利用GUI提供的向导创建一个新的虚拟机,点击settings来修改虚拟机的设置。
客户机与主机间的键盘鼠标设置
在虚拟的主机上点击就可以激活客户机对键盘鼠标的捕捉,需要捕捉只需要按下 "Ctrl-Alt Delete"。
如果在客户机中无法使用键盘和鼠标,你就需要禁用Xorg的新的热插拔功能 new hot plugging feature of Xorg 1.5。将下面内容加入到/etc/X11/xorg.conf中:
Section "ServerLayout" . . . Option "AutoAddDevices" "False" . . . EndSection
一般来说上面这一段只对Linux客户机在Mac OS X 或者Windows主机上才需要设置,但是在Arch64位主机和Arch64位客户机间也需要这样设置。
如果在客户机和主机之间,鼠标不能统一,就把下面内容加入到xorg.conf中:
Section "InputDevice" Identifier "Mouse0" Driver "vboxmouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7" EndSection
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
如果你是用 "X -configure" 生成的 xorg.conf , 配置文件会在InputDevice 区域使用 "mouse" 驱动. 安装完Guest Additions后,将"mouse" 用 "vboxmouse" 取代,然后重启 X 系统 或者重启虚拟机。
让虚拟系统使用网络
首先让虚拟系统能使用网络。点击network标签。”not attached“选项意味着“虚拟机的网络适配器被拨掉了“或其它类似的错误。
使用NAT网络
这是使用网络的最简单方法。选择NAT network应该就能用了。接着客户端操作系统可以使用DHCP进行自动配置。
第一块网卡的NAT IP地址是10.0.2.0,第二块是10.0.3.0,依此类推。
在VirtualBox 2.2.0+ NAT network DHCP 客户端不会配置你的名称服务器(DNS server for windows guests),你得手动配置名称服务器(DNS server)。
使用host interface网络 (设置虚拟机来实现)
这种方法麻烦一点,但它让你的虚拟机看起来就像是局域网上一台”真正的“电脑。从VirtualBox 2.1.0 开始支持直接从客户机来实现Host interface功能。只需要在rc.conf中的MODULES中加入 vboxnetflt 之后在你虚拟机设置中选择Host Interface Networking。
==== 使用host interface网络 (设置Arch实现) ====、
打开终端,输入下面内容:
# pacman -S bridge-utils uml_utilities
设置下面的几个文件,然后重启就就好:
- /etc/conf.d/bridges
- /etc/rc.conf
- /etc/vbox/interfaces
Ready? Let's go!
/etc/conf.d/bridges:
bridge_br0="eth0 vbox0" # Put any interfaces you need. BRIDGE_INTERFACES=(br0)
/etc/rc.conf: 在MODULES中加入bridge模块:
MODULES=( <your other modules> bridge)
在网络设置部落设置如下:
br0="dhcp" # 这是DHCP的设置部分,如果你是静态网络,按照你自己网络情况设置。 INTERFACES=(eth0 br0)
之后修改 /etc/udev/rules.d/60-virtualbox.rules ,输入:
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
保存退出。
通过命令建立网桥。
# brctl addbr br0
/etc/vbox/interfaces
(你可是设置任意多的接口. Sky is the limit!):
vbox0 your_user br0 # 请再次确保你的用户是在vboxuser用户组中.
重启,搞定
注意: 记住在虚拟机中设置好对应的网络.
注意: 如果遇到什么问题,请确定你安装了bridge-utils 并且载入了 vboxnet
使用host interface网络 (通用)
这种方法麻烦一点,但它让你的虚拟机看起来就像是局域网上一台”真正的“电脑。你需要安装bridge-utils
# pacman -S bridge-utils uml_utilities
- Sp1d3rmxn的补充
- 你还要加载TUN模块...在rc.conf中添加tun到MODULES行。如果你不想重新启动,用命令"modprobe tun"来加载它。
- 然后必须设置好权限,有两种方法:
1、命令是:chmod 666 /dev/net/tun
2、::***的补充 可以不使用命令,而是利用/etc/udev/rules.d/60-vboxdrv.rules,使它们在开机时设置好:
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660" KERNEL=="tun", OWNER="root", GROUP="vboxusers", MODE="0660"
- 现在请按照以下所写的进行
1. 用如下命令创建一个新的网桥:
brctl addbr br0
2.如果你不是使用DHCP, 运行ifconfig,记下你正在使用的网络设置(比如eth0),一会儿我们需要把它们复制到网桥。
(注意: 你将会用到这些设置,所以请不要弄丢了!!!!)
3.把你的网卡转换到"promiscuous"模式,这样它将会接收来自它自己以外MAC地址的以太网数据帧(把下面的eth0换成你自己的网络接口):
ifconfig eth0 0.0.0.0 promisc
(注意:此时你会失去eth0的网络连接)
4.把你的网卡添加到网桥上:
brctl addif br0 eth0
5. 把你方才所用的物理网卡的设置添加到网桥。如果你使用DHCP,那么:
dhcpcd -t 30 -h yourhostname br0 &
或者,运行ifconfig br0 x.x.x.x netmask x.x.x.x,使用你刚才记下的设置。
6.创建一个名为vbox0的固定宿主接口(所有用这种方式创建的宿主接口都必须命名为vbox加数字的形式)并把它添加到以上创建的网桥中,命令:
VBoxAddIF vbox0 vboxuser br0
把vboxuser替换成将要使用这个接口的用户的名字。
(注意:VboxAddIF位于/opt/VirtualBox-VIRTUALBOX的版本号/VBoxAddIF)
另外,你还可以通过/etc/rc.conf来创建一个桥接的网络连接。
让虚拟机使用无线网络来上网
前面的设置方法对无线网络并不适用. 请使用parprouted的方法来实现.
- Install parprouted and iproute
-
# ln -s /usr/sbin/ip /sbin/ip
- Make sure IP fowarding is enabled:
# sysctl net.ipv4.ip_forward=1
, and/or edit /etc/sysctl.conf -
# VBoxTunctl -b -u <user>
, to create the tap device -
# ip link set tap0 up; ip addr add 192.168.0.X/24 dev tap0
, needs to be a manually set IP on the same network your wireless device is. -
# parprouted wlan0 tap0
让虚拟机使用USB
(需要PUEL版本)
首先,要在虚拟机上使用USB,你必须在/etc/fstab里添加一行:
none /proc/bus/usb usbfs devgid=85,devmode=664 0 0
其中85是被允许访问USB设备的用户组的id。把它换成你的vboxusers组的id。你可以这样来获取该id:
grep vboxusers /etc/group
如果你不介意可能的安全漏洞,就把devmode由664改成666。
重新挂载/proc/bus/usb:
mount -o remount /proc/bus/usb/
重启动Virtualbox,点击虚拟机设置的USB标签,选择你的电脑开机时可用的设备。如果你打算使用刚插上的设备(假设虚拟机是开机状态),在虚拟机的窗口找到devices -> USB Devices -> 然后选择你打算插到虚拟机上的设备。
安装Guest Additions
对于 VirtualBox (OSE) version 1.6.2 =>, 参见:
VirtualBox-HowTo
Guest Additions提供文件夹共享功能以及更好的显卡驱动(2.1版本以上提供3D加速)和鼠标驱动。你将能无缝运行虚拟机(全屏和窗口运行随窗口自动切换,鼠标自动捕捉到和自动释放掉,还可以打开双向的剪贴板。)
启动虚拟机之后,到菜单里选择Devices->Install Guest Additions...点击之后VirtualBox会往当前的CD-ROM中加载一个ISO镜像, 看起来就像什么都没有发生一样;)
然后在虚拟系统中以root身份按照以下步骤(如果虚拟系统是windows的话,会自动弹出窗口提示,按提示运行即可,下面的是针对虚拟机是linux的情况):
# mount /mnt/cdrom
对于i686(32 bit)系统:
# sh /media/cdrom/VBoxLinuxAdditions-x86.run
对于x86-64(64 bit)系统:
# sh /media/cdrom/VBoxLinuxAdditions-amd64.run
系统将创建和安装内核模块,安装Xorg驱动并创建初始脚本。很可能会有关于初始脚本、run levels的错误信息,忽略它们即可。你将会在/etc/rc.d中找到rc.vboxadd和 rc.vboxvfs(还有/etc/rc.d/rc.local,这个可以删掉)。若要在启动时加载Guest Additions,只需把它们加入/etc/rc.conf的DAEMONS列,比如:
DAEMONS=(syslog-ng network netfs crond alsa rc.vboxadd rc.vboxvfs)
如果不通过这种方式,可以按照下面的方法进行:
# pacman -S virtualbox-additions
或者
# pacman -S virtualbox-ose-additions
之后你会得到一个ISO文件,将这个文件当作loop设备装载。不过首先要保证载入了loop内核模块:
# modprobe loop # mount /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso /media/cdrom -o loop
之后执行 VBoxLinuxAdditions.run。在将rc.vbox加入到DAEMONS前,检查/etc/rc.local是不是已经有了安装程序添加的用于启动vboxadd的daemons.
注意:如果你安装了Xorg,请检查/etc/X11/xorg.conf,看显卡驱动是否为vboxvideo。如果出现找不到鼠标的现象,把鼠标驱动由“mouse”改成“vboxmouse“。
宿主机与虚拟机间的共享文件夹
对于 VirtualBox (OSE) version 1.6.2 =>, 请参见:
VirtualBox-HowTo
在虚拟机设置中,找到shared folders标签,添加你想共享的文件夹。
- 注意:要使用这一功能,你需要安装Guest Additions。
在Windows虚拟系统中,自VirtualBox 1.5.0起,共享文件夹在Windows Explorer中是可见的。打开Windows Explorer到以下位置寻找:
My Networking Places --> Entire Network --> VirtualBox Shared Folders
另外,用Windows的命令行,你也可以这样:
net use x: \\vboxsvr\sharename
其中vboxsvr是固定的名称,把"x:"换成你想用来共享的盘符,sharename换成在VBoxManage中指定的文件夹名称
在Linux虚拟系统中,使用如下命令:
mount -t vboxsf [-o OPTIONS] sharename mountpoint
把sharename换成在VBoxManage中指定的文件夹名称,mountpoint换成你想挂载到的路径(例如/mnt/share)。如果这个目录不存在,挂载前先创建它。
除了mount命令提供的标准选项之外,还有如下选项可用: iocharset CHARSET 设定I/O操作中所用的字符集(默认是utf8),以及 convertcp CHARSET 指定共享文件夹名所用的字符集(默认是utf8)。
在虚拟机中使用音频
在虚拟机设置的audio标签中选择对应驱动(alsa,OSS或者PulseAudio)。如果声音和真机出现冲突,可以使用另外的两种驱动(必须真机中已经安装了它们)
设置虚拟机的内存的显存
你可以在settings -> general中修改默认值。
为虚拟机设转置CDROM
你可以在settings -> CD/DVD-ROM中修改默认值。
勾选“mount cd/dvd drive”并在其后的选项中选择一个。
注意:' 如果检测不到光驱,确保守护程序HAL已经被启动. 可以使用下面的命令来启动:
# /etc/rc.d/hal start
启动VirtualBox
要启动Virtualbox,只需在终端运行以下命令:
$ VirtualBox
或者在KDE/GNOME/XFCE菜单中,选择<系统> => <Sun Virtualbox>
维护
重建vboxdrv模块
每当内核kernel版本发生变化后(由于升级、重编译等原因),你都得要重建VirtualBox内核模块。如果是在AUR中的virtualbox_bin或者早于2.1的版本,可以如下命令:
# vbox_build_module
此二进制文件位于以下位置之一: /sbin, /bin, or /usr/bin。
在版本2.1+,则是通过以下命令来更新核心模块:
# /etc/rc.d/rc.vboxdrv setup
在重建模块后,别忘了加载它:
# modprobe vboxdrv
压缩磁盘影像
参见How to compact a VirtualBox virtual disk image (VDI)。国内用户也许需要翻墙访问。