VirtualBox

From CBLFS
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Download Source: http://www.virtualbox.org/download/4.2.16/VirtualBox-OSE-4.2.16.tar.bz2
Download Guest Additions: http://virtualbox.org/download/4.2.16/VBoxGuestAdditions_4.2.16.iso

Introduction to VirtualBox

VirtualBox is a general-purpose full virtualizer for x86 hardware. Targeted at server, desktop and embedded use, it is now the only professional-quality virtualization solution that is also Open Source Software.

Project Homepage: http://www.virtualbox.org/wiki/VirtualBox

Dependencies

VirtualBox only supports x86 and x86_64.

Required

Optional

Creating the vboxusers Group

groupadd -g 29 vboxusers

Users that are going to use VirtualBox should be added to this group.

Non-Multilib

Compile VirtualBox:

sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" $(grep -lr /usr/X11R6 *) &&
./configure --with-xerces="-lpthread -lxerces-c" \
    --with-qt-dir=$QTDIR &&
source env.sh &&
kmk

Build the kernel module:

cd out/linux.*/release/bin/src &&
make

Install the kernel module:

make install

Install VirtualBox:

cd .. &&
install -m755 -d -v /opt/VirtualBox &&
cp -av * /opt/VirtualBox

If you downloaded the Guest Additions ISO install that with the following command:

install -m644 -v ../../../../../VBoxGuestAdditions_4.2.16.iso \
    /opt/VirtualBox/additions/VBoxGuestAdditions.iso

Multilib

ToDo

Configuring

The kernel module needs to be loaded for VirtualBox to function. Make sure it gets loaded on boot:

echo "vboxdrv" >> /etc/sysconfig/modules

Also lets create a udev rule so that /dev/vboxdev can be accessed by the users in the vboxusers group.

cat > /etc/udev/rules.d/90-vboxdev.rules << "EOF"
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
EOF

Create a helper script that will start VBoxSVC and then execute the specified client:

cat > /opt/VirtualBox/VBox.sh << "EOF"
#!/bin/sh

INSTALL_PATH="/opt/VirtualBox"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH+:}${INSTALL_PATH}"

if [ ! -c /dev/vboxdrv ]; then
  echo "/dev/vboxdrv does not exist. Load the kernel module then try again."
  exit 1
fi
if [ ! -r /dev/vboxdrv -o ! -w /dev/vboxdrv ]; then
  echo "User $(whoami) can not read and/or write to /dev/vboxdrv."
  exit 1
fi

SERVER_GET_PID="eval SERVER_PID=\$(ps -U $(whoami) | grep VBoxSVC | awk '{ print \$1 }')"

$SERVER_GET_PID
if [ "$1" = "shutdown" -a -n "$SERVER_PID" ]; then
  kill -TERM $SERVER_PID
  exit 0
fi

if [ ! -x "$INSTALL_PATH/VBoxSVC" ]; then
  echo "$INSTALL_PATH/VBoxSVC does not exist! Can not continue."
  exit 1
fi

APP=$(which $0)
APP=${APP##/*/}

if [ ! -x "$INSTALL_PATH/$APP" ]; then
  echo "$INSTALL_PATH/$APP does not exist!"
  exit 1
fi
case "$APP" in
  VirtualBox|VBoxManage|VBoxSDL|VBoxVRDP)
    EXEC_APP="$INSTALL_PATH/$APP"
  ;;
  *)
    echo "Unknown application - $APP"
  ;;
esac

if [ -z "$SERVER_PID" ]; then
   rm -rf /tmp/.vbox-$(whoami)-ipc
   "$INSTALL_PATH/VBoxSVC" --daemonize
fi

$SERVER_GET_PID
if [ -z "$SERVER_PID" ]; then
  echo "VBoxSVC failed to start. Can not continue"
  exit 1
fi

exec "$EXEC_APP" "$@"
EOF

A script similar to the one above is shipped with the binary version.

Link the binaries we want to run to the script:

for file in VirtualBox VBoxManage VBoxSDL VBoxVRDP; do
  [ -f "/opt/VirtualBox/$file" ] && ln -sfv "../../opt/VirtualBox/VBox.sh" "/usr/bin/$file"
done

Create a desktop file:

cat > /usr/share/applications/VirtualBox.desktop << "EOF"
[Desktop Entry]
Encoding=UTF-8
Version=4.2.16
Name=InnoTek VirtualBox
GenericName=Virtual Machine
Type=Application
Comment=Run several virtual systems on a single host computer
Exec=VirtualBox
TryExec=VirtualBox
Path=
Icon=VBox.png
Categories=Application;Emulator;System
EOF

Finally grab the pixmap http://cblfs.cross-lfs.org/images/6/61/VBox.png and put it in /usr/share/pixmaps.