Search:
Debian Wiki

- VirtualBox

Translation(s): Español | /Discussion

| VirtualBox is an x86 emulator developed by innotek (bought by Sun) comparable to VMWare. It has a version called VirtualBox Open Source Edition (OSE) which is freely available as Open Source Software under the terms of the GNU General Public License (GPL). Its a relatively new program and still has some minor issues, but in general it is reliable, stable and, above all, very fast. It has been used successfully to do installation tests with Debian Installer. This page contains some how-to, tips and tricks that can be useful when setting up and using VirtualBox

- Contents

  1. Installation
  2. Experience
  3. Errors
  4. Tips & tricks
  5. External Links

## Installation

Currently (2008/01/01), VirtualBox is not supported natively by DebianEtch, the 4.0 version of Debian. To install it, you can use different methods:

- Using Debian/Etch's Backports repository

- Using DebianTesting repository

### Debian/Etch-backports

- Configure Debian/Etch backports

- Install these packages: virtualbox-ose virtualbox-ose-source linux-source linux-headers

- Compile virtualbox kernel module (as root)

    # cd /usr/src
    # tar xvjf virtualbox-ose.tar.bz2
    # cd modules/virtualbox-ose
    # make
    # make install
    # modprobe vboxdrv
    # lsmod | grep vbox
    vboxdrv                55344  0

- Or simply use module-assistant (as root)

    # module-assistant auto-install virtualbox-ose
    # modprobe vboxdrv
    # lsmod | grep vbox
    vboxdrv                55344  0

- Start VirtualBox:

In KDE, go to menu KDE > System > VirtualBox OSE

- or

In Gnome, goto menu Gnome > Applications > System tools > VirtualBox OSE

### Debian/Testing (lenny)

Testing repository contains some precompiled kernel module. So you don't need to compile it like previous method. Except that, it's the same mechanism. Be carreful, using testing repository could break your system. Note that virtualbox need to update libc6 and linux-image-2.6

## Experience

Legend :

- = OK

- = Failed

Who | Kernel | Disribution | Package Version | Status
-- SalokineTerata 2008-01-01 19:52:09 | 2.6.22-6~bpo40+1 | Debian/Etch-backports | 1.5.2-dfsg2-4~bpo40+1 |

## Errors

### 32-bit userland with x64_64 kernel

It is know bug that VirtualBox does not work in such scenarios: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=456391

However VirtualBox version 2.0 promises support for this, but it is not yet packaged in Debian.

### -1909 VERR VM DRIVER NOT ACCESSIBLE

Solution: Add your current user in the group vboxusers.

- Under KDE:

  - `K > Configuration Center > System Administration > User Management`

  - Select your user and edit it

  - Go to Groups page

  - Select vboxusers group and validate

- Reconnect your session
- Under GNOME:

  - System > Administration > Users and Groups

  - Click on "Manage groups"

  - Select the vboxusers group and click "Properties"

  - Check your username in the list and click "Ok"
  - Logout and login again
- On the commandline

  - log as user root either by su or sudo (su [return] - <give root password> [return] OR sudo su [return])

  - Use the following command: adduser <youruser> vboxusers

  - Logout and login again

You can verify if your are really member of this group with this command line:

    # id MY_USER
    uid=1000(MY_USER) gid=1000(MY_USER) groupes=1000(MY_USER),8(mail),...127(vboxusers)

## Tips & tricks

### Switching consoles

The normal way to switch consoles in Linux is to use the `ctrl-alt-Fx` key combination. This does not work for a VirtualBox virtual machine (VM); it will switch consoles for the host system instead.

You should use `<Host Key>-Fx` instead, where `<Host Key>` is the key defined in `File->Preferences->Input`.

This also works for `ctrl-alt-del` and `ctrl-alt-backspace`

This is documented in the VirtualBox user manual in the section "Keyboard and mouse support in virtual machines", subsection "Typing special characters".

(An alternative method to switch between text consoles is to use `alt-left` and `alt-right`, but that does not work for graphical consoles like XOrg or DirectFB.)

### Setting up bridged networking for VirtualBox (VirtualBox < 2.1.0)

By default VirtualBox uses NAT for the network interfaces of virtual machines and use an internal DHCP server to obtain an IP address. This works well but the disadvantage is that the machine will not have an IP address visible outside the VM and so you cannot connect to it from the host system or from other systems.

By attaching the VM's interface to "Host Interface" and creating a bridge on the host system, the VM can be made visible on the local network. This also allows to do fun stuff like netbooting the VM (boot from LAN using PXE). It is comparable to the "bridged networking" option in VMWare.

NB To use a wireless host device you need one that has support for Master mode (eg. it can be used as an access point, afaik only the Atheros and Prism drivers has this support)

#### Preparation

First install the package `bridge-utils`.

Next, change the network configuration of the host system so that the network interface becomes part of a bridge. Note that this requires restarting the network, so be careful when doing this on a remote system!

Change the file `/etc/network/interfaces` to look something like this:

    # The loopback network interface
    auto lo
    iface lo inet loopback
    # An entry for eth0 is no longer needed
    #auto eth0
    #iface eth0 inet dhcp
    # Create the bridge (with the regular IP address of the host)
    auto br0
    iface br0 inet dhcp
            bridge_ports eth0
            bridge_fd 2.5

In this example the bridge gets its IP address and configuration from DHCP. For static configuration see
`/usr/share/doc/bridge-utils/README.Debian.gz`

If you don't find the information for static configuration there, try:

    # man bridge-utils-interfaces

Restart the networking of the host system using:

    # /etc/init.d/networking restart

After this `brctl show` should show the bridge and `ifconfig` should show the bridge has the host's IP address.

It is also necessary for your user to own the device `/dev/net/tun`

Run the following command to change the owner of that device:

    # chown <username> /dev/net/tun

#### Configuring the VirtualBox VM

There are different ways the TAP interface for the VM can be created:

- statically (before VirtualBox is even started)

- on demand (when a VM is being started)

See also the chapter on "Virtual networking" in the VirtualBox user manual.

##### Static interfaces

In this case you only need to "define" an interface for use by a particular user once. All defined interfaces are "remembered" in the file `/etc/vbox/interfaces` and recreated by the VirtualBox init script every time the host system is booted.

Example to create an interface for a user:

    # VBoxAddIF vbox0 <username> br0

You can of course create multiple interfaces per users, but all interfaces should have unique names.

To configure the VM to use static bridged networking, go to the "network" page of the VM's settings and change the following fields:

- Attached to: `Host Interface`

- Interface Name: `vbox0`

- Setup Application: <empty>

- Terminate Application: <empty>

##### Dynamic interfaces (on demand)

The example below shows the second method. This example will allow you to use multiple VM's, but the script assumes that each interface will be named in the form "vbox*". You may need to adapt the script to match your needs. Note that the script assumes you can execute the needed commands using sudo. A snippet of a sudoers file is included below as an example.

    #!/bin/sh
    set -e
    BRIDGE="br0"
    case "${1}" in
            "up" )
                    # Get the last vbox interface that was created or "" if none
                    TAP=$(cat /proc/net/dev | grep vbox | tail -n 1 | cut -d":" -f1 | sed 's/\s*vbox\(\.*\)/\1/')
                    # If there was no previous interface then set to -1 (this is so the += works)
                    [ "${TAP}" = "" ] && TAP=-1
                    # Increment TAP
                    let "TAP+=1"
                    # prepend vbox onto the TAP no
                    TAP="vbox${TAP}"
                    # Create the new TAP device
                    sudo VBoxTunctl -b -u $(whoami) -t ${TAP}
                    # Bring up the TAP (without an ip)
                    sudo ifconfig ${TAP} up
                    # Add the TAP to the Bridge
                    sudo brctl addif ${BRIDGE} ${TAP}
                    # Echo the name of the TAP so VirtualBox knows which one to use
                    # on lenny the echo must be commented for virtuabox to work correctly
                    echo ${TAP}
                    ;;
            "down" )
                    # VirtualBox tells us which TAP it used
                    TAP=${3}
                    # Bring the TAP down
                    sudo ifconfig ${TAP} down
                    # Remove the TAP
                    sudo VBoxTunctl -d ${TAP} > /dev/null 2>&1
                    ;;
    esac

Save the script, for example as `~/.VirtualBox/bridge_setup`. The script can be tested by running it from the command line. If successful, `brctl show` should show interface `vbox*` (where * will be a number) added to the bridge.

Here is a snippet of a sudoers file to help (replace username and hostname with the appropriate values):

    Cmnd_Alias      VIRTUALBOX = /usr/bin/VBoxTunctl, /sbin/ifconfig vbox* up, /sbin/ifconfig vbox* down, /usr/sbin/brctl addif br0 vbox*
    username     ALL=(ALL) PASSWD: ALL
    username     hostname = NOPASSWD: VIRTUALBOX

To configure the VM to use dynamic bridged networking, go to the "network" page of the VM's settings and change the following fields:

- Attached to: `Host Interface`

- Interface Name: <empty>

- Setup Application: `~/.VirtualBox/bridge_setup up`

- Terminate Application: `~/.VirtualBox/bridge_setup down`

When the VM is started after that, the interface should be created automatically and the VM can be used just like it was a system connected directly to your local network.

### How to remotely start virtual machines using vnc

Remote:

- log onto your remote box
- install tightvncserver
- launch it (you don't need a display), pick a password
- determine which port it is using, a way to do so:
  - netstat -tap | grep vnc
  - Let's say it's 5901
- unlog from there since the server forked in the background

Local:

- install xtightvncviewer
- create a ssh tunnel to your box:
  - ssh -L 5901:localhost:5901 you@remote
- use it: (note there are two colons)
  - xtightvncviewer localhost::5901

- then VBoxManage startvm $yourvm &

- and start as many virtual machines as wanted.

## External Links

- http://www.virtualbox.org/download/UserManual.pdf Official User Manual

- Alternative SystemVirtualization tools.

VirtualBox (last edited 2008-12-29 13:24:45 by MichaelMeskes)