Difference between revisions of "VirtualBox"

From CBLFS
Jump to navigationJump to search
(Configuring)
Line 114: Line 114:
 
  INSTALL_PATH="/opt/VirtualBox"
 
  INSTALL_PATH="/opt/VirtualBox"
 
  export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH+:}${INSTALL_PATH}"
 
  export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH+:}${INSTALL_PATH}"
 +
 +
export USER=$(whoami)
 
   
 
   
 
  if [ ! -c /dev/vboxdrv ]; then
 
  if [ ! -c /dev/vboxdrv ]; then
  echo "/dev/vboxdrv does not exist. Load the kernel module then try again."
+
echo "/dev/vboxdrv does not exist. Load the kernel module then try again."
  exit 1
+
exit 1
 
  fi
 
  fi
 
  if [ ! -r /dev/vboxdrv -o ! -w /dev/vboxdrv ]; then
 
  if [ ! -r /dev/vboxdrv -o ! -w /dev/vboxdrv ]; then
  echo "User $(whoami) can not read and/or write to /dev/vboxdrv."
+
echo "User $USER can not read and/or write to /dev/vboxdrv."
  exit 1
+
exit 1
 
  fi
 
  fi
 
   
 
   
  SERVER_GET_PID="eval SERVER_PID=\$(ps -U $(whoami) | grep VBoxSVC | awk '{ print \$1 }')"
+
echo "/dev/vboxdrv exists and $USER can access it."
 +
 +
  SERVER_GET_PID="eval SERVER_PID=$(ps -U $USER | grep VBoxSVC | awk '{ print $1 }')"
 
   
 
   
 
  $SERVER_GET_PID
 
  $SERVER_GET_PID
 
  if [ "$1" = "shutdown" -a -n "$SERVER_PID" ]; then
 
  if [ "$1" = "shutdown" -a -n "$SERVER_PID" ]; then
  kill -TERM $SERVER_PID
+
echo "Terminating VBoxSVC with PID $SERVER_PID."
  exit 0
+
kill -TERM $SERVER_PID
 +
exit 0
 
  fi
 
  fi
 
   
 
   
 
  if [ ! -x "$INSTALL_PATH/VBoxSVC" ]; then
 
  if [ ! -x "$INSTALL_PATH/VBoxSVC" ]; then
  echo "$INSTALL_PATH/VBoxSVC does not exist! Can not continue."
+
echo "$INSTALL_PATH/VBoxSVC does not exist! Can not continue."
  exit 1
+
exit 1
 
  fi
 
  fi
 
   
 
   
Line 141: Line 146:
 
   
 
   
 
  if [ ! -x "$INSTALL_PATH/$APP" ]; then
 
  if [ ! -x "$INSTALL_PATH/$APP" ]; then
  echo "$INSTALL_PATH/$APP does not exist!"
+
echo "$INSTALL_PATH/$APP does not exist!"
  exit 1
+
exit 1
 
  fi
 
  fi
 
  case "$APP" in
 
  case "$APP" in
  VirtualBox|VBoxManage|VBoxSDL|VBoxVRDP)
+
VirtualBox|VBoxManage|VBoxSDL|VBoxVRDP)
    EXEC_APP="$INSTALL_PATH/$APP"
+
EXEC_APP="$INSTALL_PATH/$APP"
  ;;
+
;;
  *)
+
*)
    echo "Unknown application - $APP"
+
echo "Unknown application - $APP."
  ;;
+
;;
 
  esac
 
  esac
 
   
 
   
 
  if [ -z "$SERVER_PID" ]; then
 
  if [ -z "$SERVER_PID" ]; then
    rm -rf /tmp/.vbox-$(whoami)-ipc
+
rm -rf /tmp/.vbox-$USER-ipc
    "$INSTALL_PATH/VBoxSVC" --daemonize
+
echo "Starting VBoxSVC for $USER."
 +
"$INSTALL_PATH/VBoxSVC" --daemonize
 
  fi
 
  fi
 
   
 
   
 
  $SERVER_GET_PID
 
  $SERVER_GET_PID
 
  if [ -z "$SERVER_PID" ]; then
 
  if [ -z "$SERVER_PID" ]; then
  echo "VBoxSVC failed to start. Can not continue"
+
echo "VBoxSVC failed to start! Can not continue"
  exit 1
+
exit 1
 
  fi
 
  fi
 
   
 
   
 +
echo "VBoxSVC is running for user $USER with PID $SERVER_PID."
 +
 +
echo "Starting $EXEC_APP."
 
  exec "$EXEC_APP" "$@"
 
  exec "$EXEC_APP" "$@"
 
  EOF
 
  EOF

Revision as of 07:47, 15 September 2007

Download Source: http://www.virtualbox.org/download/4.2.16/VirtualBox-4.2.16_OSE.tar.bz2
Download Guest Additions: http://virtualbox.org/download/4.2.16/VBoxGuestAdditions_4.2.16_OSE.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

  • GCC-3.3 (Requred for command 'kmk' while compiling)

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_OSE.iso \
    /opt/VirtualBox/additions/VBoxGuestAdditions_OSE.iso

Multilib

64Bit

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_OSE.iso \
    /opt/VirtualBox/additions/VBoxGuestAdditions_OSE.iso

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}"

export USER=$(whoami)

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 $USER can not read and/or write to /dev/vboxdrv."
exit 1
fi

echo "/dev/vboxdrv exists and $USER can access it."

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

$SERVER_GET_PID
if [ "$1" = "shutdown" -a -n "$SERVER_PID" ]; then
echo "Terminating VBoxSVC with PID $SERVER_PID."
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-$USER-ipc
echo "Starting VBoxSVC for $USER."
"$INSTALL_PATH/VBoxSVC" --daemonize
fi

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

echo "VBoxSVC is running for user $USER with PID $SERVER_PID."

echo "Starting $EXEC_APP."
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=/opt/VirtualBox/VBox.png
Categories=Application;Emulator;System
EOF