VirtualBox
From ArchWiki
| i18n |
|---|
| English |
| Italiano |
| 简体中文 |
| Русский |
| Español |
| Português |
What is VirtualBox
VirtualBox is a virtual pc emulator like vmware. It has many of the features vmware has, as well as some of its own. It is in constant development and new features are implemented all the time. eg. version 2.2 introduced OpenGL 3D acceleration support for Linux and Solaris guests. It has a nice GUI interface (Qt and/or SDL) or command line tools for managing virtual machines. Headless operation is also supported.
Editions
VirtualBox is available in two editions: VirtualBox (OSE) and VirtualBox (Personal Use and Evaluation License (PUEL))
VirtualBox (OSE)
VirtualBox (OSE) is the open source version of VirtualBox, which can be found in the community repository. It lacks some features such as USB device support and the built-in RDP server.
VirtualBox (PUEL)
VirtualBox PUEL is a binary-only version (free for personal use). There are several available from the AUR, but the most popular PKGBUILD was written and is maintained by thotypous. You can download it from the AUR at this link or directly from the VirtualBox website. The PUEL edition offers the following advantages:
- Remote Display Protocol (RDP) Server - a complete RDP server on top of the virtual hardware, allowing users to connect to a virtual machine remotely using any RDP compatible client
- USB support - a virtual USB controller which allows USB 1.1 and USB 2.0 devices to be passed through to virtual machines
- USB over RDP - a combination of the RDP server and USB support, allowing users to make USB devices available to virtual machines running remotely
- iSCSI initiator - a builtin iSCSI initiator making it possible to use iSCSI targets as virtual disks without the guest requiring support for iSCSI
Installation
Install VirtualBox (OSE)
VirtualBox (OSE) is available from the community repository:
# pacman -S virtualbox-ose
This will select by default virtualbox-ose and virtualbox-modules packages. Once installed, a desktop entry can be located in Applications → System Tools → VirtualBox OSE
Now, add the desired username to the vboxusers group:
# gpasswd -a USERNAME vboxusers
Lastly, edit /etc/rc.conf as root and add vboxdrv to the MODULES array in order to load the VirtualBox drivers at startup. For example:
MODULES=(loop vboxdrv fuse ...)
To load the module manually, run the following in a terminal as root:
# modprobe vboxdrv
Install VirtualBox PUEL (virtualbox_bin)
VirtualBox PUEL is available from the AUR: virtualbox_bin.
Download the tarball from the AUR: virtualbox_bin page, unpack, run makepkg, and then as root:
# pacman -U PACKAGE-NAME.pkg.tar.gz
However, there's an alternative way to install the virtualbox_bin package:
Firstly, add as root the followings into /etc/pacman.conf:
[archlinuxfr] Server = http://repo.archlinux.fr/i686
or
[archlinuxfr] Server = http://repo.archlinux.fr/x86_64
depending on your CPU's architecture.
Then you can install it successfully via:
# pacman -Sy virtualbox_bin
Now, add the desired username to the vboxusers group:
# gpasswd -a USERNAME vboxusers
Lastly, edit /etc/rc.conf as root and add vboxdrv to the MODULES array in order to load the VirtualBox drivers at startup. For example:
MODULES=(loop vboxdrv fuse ...)
To load the module manually, run the following in a terminal as root:
# modprobe vboxdrv
Install required QT libraries
Currently, VirtualBox relies on qt4 for its graphical interface. If you require a GUI, ensure you have qt4 installed:
# pacman -S qt
Install VirtualBox 2.1 (another alternative)
VirtualBox.run install can be done using the All Distributions package from the Linux section of the VirtualBox Website.
Make sure the Qt 4.3.0 and SDL 1.2.7 or higher packages are installed:
# pacman -Sy qt sdl
Download the appropriate architecture file i386/AMD64. In a terminal window, browse to the download folder and as root run:
# sh VirtualBox-2.XXXX-Linux_ARCH.run
This will install the package to the /opt/VirtualBox-2.XXX folder.
After installation, a desktop entry can be located in Applications → System Tools → Sun xVM VirtualBox
Now, add the desired username to the vboxusers group:
# gpasswd -a USERNAME vboxusers
Lastly, edit /etc/rc.conf as root and add vboxdrv to the MODULES array in order to load the VirtualBox drivers at startup.
Start the VirtualBox GUI either with the command:
# VirtualBox
or using the Applications desktop entry. In version 2.1.x, an installation wizard should start and take you through the process of setting up a virtual machine. Otherwise, use the help menu to get started. Continue reading to see the more advanced options and setups...
Configuration
After we have installed VirtualBox on our system and added ourselves in the vboxusers group we can start configuring our system in order to make all the features of VirtualBox available to us.Create a new virtual machine using the wizard provided by the GUI and then click settings in order to edit the virtual machine settings.
Keyboard and mouse between the host and the guest
- To capture the keyboard and mouse, click the mouse inside the Virtual Machine display.
- To uncapture, press Ctrl-Alt-Delete.
If Xorg freezes mouse and keyboard you will have to disable the new hot plugging feature of Xorg 1.5 by adding in /etc/X11/xorg.conf:
Section "ServerLayout"
. . .
Option "AutoAddDevices" "False"
. . .
EndSection
This is needed for Linux guests in a Mac OS X or Windows host. Also needed for Linux hosts (tested with Arch64 host and Arch64 guest).
Also, mouse pointer integration doesn't work out of the box. To fix it, make sure you have the following sections in your 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
When generating your xorg.conf with "X -configure", you'll end up with an InputDevice section that uses the mouse driver. After installing the Guest Additions, you should replace mouse with vboxmouse and then restart X or reboot your VM.
Getting network in the guest machine to work
First let's get network working in the guest machine. Click the network tab. The not attached option means you'll have "Network cable unplugged" or similar error in the guest computer.
Using NAT network
This is the simplest way to get network. Select NAT network and it should be ready to use. Then, the guest operating system can be automatically configured by using DHCP.
The NAT IP address on the first card is 10.0.2.0, 10.0.3.0 on the second and so on.
Also in VirtualBox 2.2.0+ NAT network DHCP clients will not configure your nameserver (DNS server for windows guests) you will have to manually configure the nameserver(DNS server)
Using host interface networking (the VirtualBox way)
Since VirtuaBox 2.1.0 it has a native support for host interface networking. Just add vboxnetflt to your MODULES section in rc.conf and choose Host Interface Networking (or Bridged adapter in 2.2) in the virtual machine configuration.
Note by Dharivs: DHCP broadcasting doesn't seem to work properly under this way. Set up your guest networking with static IP assignment.
Using host interface networking (the Arch way)
You are going to just edit these files and reboot:
- /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
First add the bridge module to your MODULES line
MODULES=( <your other modules> bridge)
Then, in your NETWORKING section, make the following changes:
br0="dhcp" # Maybe you have some static configuration... I use DHCP. INTERFACES=(eth0 br0)
Note by gpan:
/etc/rc.conf
First add the vboxdrv (and vboxnetflt in case of 2.1.0 version) module to your MODULES line:
MODULES=( <your other modules> vboxdrv vboxnetflt )
Next, you should edit your /etc/udev/rules.d/60-vboxdrv.rules and type:
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
Save it and exit.
Then open terminal and type:
# pacman -S bridge-utils uml_utilities
Create a new bridge with this command:
# brctl addbr br0
/etc/vbox/interfaces
(You can set up more interfaces if you want. Sky is the limit!):
vbox0 your_user br0 # Be sure that your user is in the vboxusers group.
Reboot and enjoy!
Using host interface networking (generic)
This way is a bit harder, but it allows you to see the VirtualMachine as a "real" computer on your local network. You need to get bridge-utils
# pacman -S bridge-utils uml_utilities
Note by Sp1d3rmxn:
- You also need to have the TUN module loaded... in rc.conf add "tun" (without the quotes) to your MODULES section. For testing this out right now without rebooting you can load the module from the command line by "modprobe tun".
- Then you MUST set these permissions otherwise you'll never get VBox to init the interface. The command is "chmod 666 /dev/net/tun" (without the quotes).
- Now proceed with the rest as it's written below.
Note by Dharivs
- As said by Sp1d3rmxn, we must set these permissions, but, instead of using the
- command, we can set them in /etc/udev/rules.d/60-vboxdrv.rules, which will set them
- on boot:
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660" KERNEL=="tun", OWNER="root", GROUP="vboxusers", MODE="0660"
1. Create a new bridge with this command:
# brctl addbr br0
2. If you are not using DHCP, run ifconfig and note down the network configuration of your existing network interface (e.g. eth0), which we will need to copy to the bridge in a minute.
3. Switch your physical network adapter to "promiscuous" mode so that it will accept Ethernet frames for MAC addresses other than its own (replace eth0 with your network interface):
# ifconfig eth0 0.0.0.0 promisc
4. Add your network adapter to the bridge:
# brctl addif br0 eth0
5. Transfer the network configuration previously used with your physical ethernet adapter to the new bridge. If you are using DHCP, this should work:
# dhclient br0
Note by Sp1d3rmxn:
- Use "dhcpcd -t 30 -h yourhostname br0 &" instead of the above
Otherwise, run "ifconfig br0 x.x.x.x netmask x.x.x.x" and use the values that you noted down previously.
6. To create a permanent host interface called vbox0 (all host interfaces created in this way must be called vbox followed by a number) and add it to the network bridge created above, use the following command:
VBoxAddIF vbox0 vboxuser br0
Replace vboxuser with the name of the user who is supposed to be able to use the new interface.
Alternatively, you can setup VirtualBox networking through your /etc/rc.conf to enable a bridged connection.
Using host interface networking with a wireless device
Bridging as described above won't work with a wireless device. Using parprouted however it can be accomplished.
- 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
Getting USB to work in the guest machine
(Only available in the PUEL edition)
First in order to make USB available for use to the virtual machine you must add this line to your /etc/fstab:
none /proc/bus/usb usbfs auto,busgid=108,busmode=0775,devgid=108,devmode=0664 0 0
108 is is the id of the group which should be allowed to access USB-devices. Change it to the id of your vboxusers group. You can get the id by running:
$ grep vboxusers /etc/group
If you don't mind a security hole change devmode from 664 to 666.
Remount /proc/bus/usb:
# mount -o remount /proc/bus/usb/
Restart Virtualbox and click the USB tab in the settings of the virtual machine and select which devices are available to your pc on boot. If you wish your virtual machine to use device that you have just plugged in (assuming the virtual machine has booted already), go to the VirtualMachine screen go to Devices → USB Devices and select the device you wish to plug in the virtual PC.
Installing Guest Additions
For VirtualBox (OSE) version 1.6.2 =>, read:
VirtualBox-HowTo
The Guest Additions make the shared folders feature available, as well as better video (3D available in version 2.1+) and mouse drivers. You will have mouse integration, thus no need to release the mouse after using it in the guest and one can also enable a bidirectional clipboard.
After you booted the virtual machine, go to menu Devices → Install Guest Additions... Once you've clicked it, VirtualBox loads an ISO into the current CD-ROM, so you won't see anything happen yet ;).
You will require gcc and make if you don't already have them so install them typing the following as root:
# pacman -S gcc make
Then do the following as root:
# mount /media/cdrom
for i686 systems (32 bit):
# sh /media/cdrom/VBoxLinuxAdditions-x86.run
for x86-64 systems (64 bit):
# sh /media/cdrom/VBoxLinuxAdditions-amd64.run
It will build and install the kernel modules, install the Xorg drivers and create init scripts. It will most probably print out errors about init scripts and run levels and what not. Ignore them. You will find rc.vboxadd in /etc/rc.d which will load them on demand. To have the Guest Additions loaded at boot time, just add those to the DAEMONS array in /etc/rc.conf eg.:
DAEMONS=(syslog-ng network netfs crond alsa rc.vboxadd)
Another option is to install one of these packages:
# pacman -S virtualbox-additions
or
# pacman -S virtualbox-ose-additions
You will then have an ISO to mount as a loop device. Remember to load the loop kernel module before:
# modprobe loop # mount /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso /media/cdrom -o loop
Then execute VBoxLinuxAdditions.run as before. Before adding rc.vboxadd to DAEMONS check /etc/rc.local for commands to load the vboxadd daemons put by the installation script.
Windows Guests
After installing Windows (XP etc.) on your virtual machine, simply select Devices → Install Guest Additions...
This will mount the iso image and windows should then automatically launch the guest additions installer. Follow the instructions to the end.
Sharing folders between the host and the guest
For VirtualBox (OSE) version 1.6.2 =>, read VirtualBox-HowTo.
In the settings of the virtual machine go to shared folders tab and add the folders you want to share.
- NOTE: You need to install Guest Additions in order to use this feature.
In a Linux host, Devices → Install Guest Additions Yes (when asked to download the CD image) Mount (when asked to register and mount)
In a Linux host, create one folder for sharing files.
In a Windows guest, starting with VirtualBox 1.5.0, shared folders are browseable and are therefore visible in Windows Explorer. Open Windows Explorer and look for it under My Networking Places → Entire Network → VirtualBox Shared Folders.
Alternatively, on the Windows command line, you can also use the following:
net use x: \\VBOXSVR\sharename
While VBOXSVR is a fixed name, replace x: with the drive letter that you want to use for the share, and sharename with the share name specified with VBoxManage.
In a Linux guest, use the following command:
# mount -t vboxsf [-o OPTIONS] sharename mountpoint
Replace sharename with the share name specified with VBoxManage, and mountpoint with the path where you want the share to be mounted (e.g. /mnt/share). The usual mount rules apply, that is, create this directory first if it does not exist yet.
Beyond the standard options supplied by the mount command, the following are available:
iocharset=CHARSET
to set the character set used for I/O operations (utf8 by default) and
convertcp=CHARSET
to specify the character set used for the shared folder name (utf8 by default).
Getting audio to work in the guest machine
In the machine settings, go to the audio tab and select the correct driver according to your sound system (ALSA, OSS or PulseAudio).
Setting up the RAM and Video Memory for the virtual PC
You can change the default values by going to Settings → General.
Setting up CD-ROM for the Virtual PC
You can change the default values by going to Settings → CD/DVD-ROM.
Check mount CD/DVD drive and select one of the following options.
Note: If no CD-ROM drive is detected, make sure the HAL daemon is running. To start it, run the following command as root:
# /etc/rc.d/hal start
Enabling D3D acceleration in Windows Guests
Recent versions of Virtualbox have support for accelerating OpenGL inside guests. This can be enabled with a simple checkbox in the machine's settings, right below where video ram is set, and installing the Virtualbox guest additions. However, most Windows games use Direct3D (part of DirectX), not OpenGL, and are thus not helped by this method. However, it is possible to gain accelerated Direct3D in your Windows guests by borrowing the d3d libraries from Wine, which translate d3d calls into OpenGL, which is then accelerated.
After enabling OpenGL acceleration as described above, go to http://www.nongnu.org/wined3d/ in your Windows guest and grab the "Latest version (Installer):". Reboot the guest into safe mode (press F8 before the Windows screen appears but after the Virtualbox screen disappears), and install wined3d, accepting the defaults during the install. (You may check the box for DirectX 10 support if you like, dont touch anything else.) Reboot back to normal mode and you should have accelerated Direct3D.
Start VirtualBox
To start Virtualbox, run the following command in a terminal:
$ VirtualBox
Or in KDE menu, select: <System><Sun Virtualbox>
Virtualized OS Setup
Virtualbox needs to be setup to virtualize another operating system.
Test a LiveCD/DVD
Click the 'New' button to create a new virtual environment. Name it appropriately and select Operating System type and version. Select base memory size (note: most operating systems will need at least 512MB to function properly). Create a new hard disk image (a hard disk image is a file that will contain the operating system's filesystem and files).
When the new image has been created, click 'Settings', then CD/DVD-ROM, check 'Mount CD/DVD Drive' then select an ISO image.
Maintenance
Rebuild the vboxdrv Module
Note that any time your kernel version changes (due to upgrade, recompile, etc.) you must also rebuild the VirtualBox kernel. To do this, on virtualbox_bin from AUR or on versions earlier than 2.1, run the following command:
# vbox_build_module
This binary will be located in one of the following locations: /sbin, /bin, or /usr/bin.
On versions 2.1+, update the kernel module by running the following command:
# /etc/rc.d/rc.vboxdrv setup
After rebuilding the module, don't forget to load it with
# modprobe vboxdrv
Compact a Disk Image
See How to compact a VirtualBox virtual disk image (VDI)
Windows Xp and Nokia phones
To get working Windows XP and Nokia phones with Pc Suite mode, Virtualbox needs two simple steps:
1. Add a rule to udev with /etc/udev/rules.d/40-permissions.rules:
LABEL="usb_serial_start"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
GROUP="usbfs", MODE="0660", GROUP="dialout"
LABEL="usb_serial_end"
2. Create the group usbfs and add its user to it
$ sudo groupadd usbfs $ sudo usermod -a -G usbfs $USER
After a logout, connect a Nokia phone with PC Suite mode and start Windows XP to test new rule.
Migrating From Another VM
The qemu-img program can be used to convert images from one format to another, or add compression or encryption to an image.
# pacman -S qemu
Converting from QEMU images
To convert a QEMU image for use with VirtualBox, first convert it to raw format, then use VirtualBox's conversion utility to convert and compact it in its native format.
$ qemu-img convert -O raw test.qcow2 test.raw $ VBoxManage modifyvdi /full/path/to/test.vdi compact
Converting from VMware images
Do
$ qemu-img convert image.vmdk image.bin $ VBoxManage convertdd image.bin image.vdi
This may not be needed anymore with recent virtualbox versions (to be confirmed)
Tips and Tricks
Sending a CTRL+ALT+F1 to the Guest
If your guest O/S is a Linux distro, and you want to open a new tty text shell or exit X via typing Ctrl+Alt+F1, you can easily send this command to the guest O/S simply by hitting your 'Host Key' (usually the Ctrl in the Right side of your keyboard) + F1 or F2, etc.
Speeding up HDD Access for the Guest
Enabling the SATA(AHCI) controller within Virtualbox can speed up Host disk operations. This is available though Settings>Hard Disks in current versions of Virtual Box.