[Lunar-commits] <moonbase> virtualbox-module: new module.

Zachary McGrew zmcgrew at lunar-linux.org
Fri Feb 20 00:12:12 CET 2009


commit bc156e38415df6360ee41dd455ec67e72c1e5caf
Author: Zachary McGrew <zmcgrew at lunar-linux.org>
Date:   Thu Feb 19 15:12:12 2009 -0800

    virtualbox-module: new module.
    
    this is the kernel module needed by virtualbox.
---
 kernel/virtualbox-module/BUILD             |    6 +
 kernel/virtualbox-module/DEPENDS           |    1 +
 kernel/virtualbox-module/DETAILS           |   12 +
 kernel/virtualbox-module/init.d/vboxdrv    |  227 ++++++++++++++++
 kernel/virtualbox-module/init.d/vboxnet    |  400 ++++++++++++++++++++++++++++
 kernel/virtualbox-module/init.d/virtualbox |   43 +++
 6 files changed, 689 insertions(+), 0 deletions(-)

diff --git a/kernel/virtualbox-module/BUILD b/kernel/virtualbox-module/BUILD
new file mode 100644
index 0000000..9749ad8
--- /dev/null
+++ b/kernel/virtualbox-module/BUILD
@@ -0,0 +1,6 @@
+(
+
+  # Build and install kernel module
+  KERN_DIR=/usr/src/linux default_make
+
+) > $C_FIFO 2>&1
diff --git a/kernel/virtualbox-module/DEPENDS b/kernel/virtualbox-module/DEPENDS
new file mode 100644
index 0000000..a84d248
--- /dev/null
+++ b/kernel/virtualbox-module/DEPENDS
@@ -0,0 +1 @@
+depends virtualbox
diff --git a/kernel/virtualbox-module/DETAILS b/kernel/virtualbox-module/DETAILS
new file mode 100644
index 0000000..abdb225
--- /dev/null
+++ b/kernel/virtualbox-module/DETAILS
@@ -0,0 +1,12 @@
+          MODULE=virtualbox-module
+         VERSION=`module_version virtualbox`
+          SOURCE=$MODULE-$VERSION.tar.bz2
+SOURCE_DIRECTORY=$BUILD_DIRECTORY/src/
+        WEB_SITE=http://virtualbox.org
+         ENTERED=20090202
+         UPDATED=20090202
+           SHORT="Kernel module for VirtualBox"
+
+cat << EOF
+Sources to the kernel level portion of VirtualBox
+EOF
diff --git a/kernel/virtualbox-module/init.d/vboxdrv b/kernel/virtualbox-module/init.d/vboxdrv
new file mode 100755
index 0000000..054daa9
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/vboxdrv
@@ -0,0 +1,227 @@
+#! /bin/sh
+# innotek VirtualBox
+# Linux kernel module init script
+
+#
+#  Copyright (C) 2006-2007 innotek GmbH
+# 
+#  This file is part of VirtualBox Open Source Edition (OSE), as
+#  available from http://www.virtualbox.org. This file is free software;
+#  you can redistribute it and/or modify it under the terms of the GNU
+#  General Public License as published by the Free Software Foundation,
+#  in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
+#  distribution. VirtualBox OSE is distributed in the hope that it will
+#  be useful, but WITHOUT ANY WARRANTY of any kind.
+
+# chkconfig: 35 30 60
+# description: VirtualBox Linux kernel module
+#
+### BEGIN INIT INFO
+# Provides:       vboxdrv
+# Required-Start: $syslog
+# Required-Stop:
+# Default-Start:  3 5
+# Default-Stop:
+# Description:    VirtualBox Linux kernel module
+### END INIT INFO
+
+PATH=$PATH:/bin:/sbin:/usr/sbin
+CONFIG="/etc/vbox/vbox.cfg"
+
+if [ -f /etc/redhat-release ]; then
+    system=redhat
+elif [ -f /etc/SuSE-release ]; then
+    system=suse
+elif [ -f /etc/gentoo-release ]; then
+    system=gentoo
+else
+    system=other
+fi
+
+if [ "$system" = "redhat" ]; then
+    . /etc/init.d/functions
+    fail_msg() {
+        echo_failure
+        echo
+    }
+
+    succ_msg() {
+        echo_success
+        echo
+    }
+
+    begin() {
+        echo -n "$1"
+    }
+fi
+
+if [ "$system" = "suse" ]; then
+    . /etc/rc.status
+    fail_msg() {
+        rc_failed 1
+        rc_status -v
+    }
+
+    succ_msg() {
+        rc_reset
+        rc_status -v
+    }
+
+    begin() {
+        echo -n "$1"
+    }
+fi
+
+if [ "$system" = "gentoo" ]; then
+    . /sbin/functions.sh
+    fail_msg() {
+        eend 1
+    }
+
+    succ_msg() {
+        eend $?
+    }
+
+    begin() {
+        ebegin $1
+    }
+
+    if [ "`which $0`" = "/sbin/rc" ]; then
+        shift
+    fi
+fi
+
+if [ "$system" = "other" ]; then
+    fail_msg() {
+        echo " ...fail!"
+    }
+
+    succ_msg() {
+        echo " ...done."
+    }
+
+    begin() {
+        echo -n $1
+    }
+fi
+
+
+kdir=/lib/modules/`uname -r`/misc
+dev=/dev/vboxdrv
+modname=vboxdrv
+groupname=vboxusers
+
+fail() {
+    if [ "$system" = "gentoo" ]; then
+        eerror $1
+        exit 1
+    fi
+    fail_msg
+    echo "($1)"
+    exit 1
+}
+
+running() {
+    lsmod | grep -q $modname[^_-]
+}
+
+start() {
+    begin "Starting VirtualBox kernel module "
+    test -f "$kdir/$modname.o" -o -f "$kdir/$modname.ko" || {
+        fail "Kernel module not found"
+    }
+    running || {
+        rm -f $dev || {
+            fail "Cannot remove $dev"
+        }
+
+        modprobe $modname || {
+            fail "modprobe $modname failed"
+        }
+
+        sleep 1
+    }
+    if [ ! -c $dev ]; then
+        maj=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
+        if [ ! -z "$maj" ]; then
+            min=0
+        else
+            min=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
+            if [ ! -z "$min" ]; then
+                maj=10
+            fi
+        fi
+        test -z "$maj" && {
+            rmmod $modname
+            fail "Cannot locate the VirtualBox device"
+        }
+
+        mknod -m 0664 $dev c $maj $min || {
+            rmmod $modname
+            fail "Cannot create device $dev with major $maj and minor $min"
+        }
+    fi
+
+    chown :$groupname $dev || {
+        rmmod $modname
+        fail "Cannot change owner $groupname for device $dev"
+    }
+
+    succ_msg
+    return 0
+}
+
+stop() {
+    begin "Stopping VirtualBox kernel module "
+    if running; then
+        rmmod $modname || fail "Cannot unload module $modname"
+        rm -f $dev || fail "Cannot unlink $dev"
+    fi
+    succ_msg
+    return 0
+}
+
+restart() {
+    stop && start
+    return 0
+}
+
+setup() {
+    . "$CONFIG"
+    stop
+    begin "Recompiling VirtualBox kernel module "
+    lin -c virtualbox-module
+    succ_msg
+    start
+}
+
+dmnstatus() {
+    if running; then
+        echo "VirtualBox kernel module is loaded."
+    else
+        echo "VirtualBox kernel module is not loaded."
+    fi
+}
+
+case "$1" in
+start)
+    start
+    ;;
+stop)
+    stop
+    ;;
+restart)
+    restart
+    ;;
+setup)
+    setup
+    ;;
+status)
+    dmnstatus
+    ;;
+*)
+    echo "Usage: $0 {start|stop|restart|status|setup}"
+    exit 1
+esac
+
+exit
diff --git a/kernel/virtualbox-module/init.d/vboxnet b/kernel/virtualbox-module/init.d/vboxnet
new file mode 100755
index 0000000..85af235
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/vboxnet
@@ -0,0 +1,400 @@
+#! /bin/sh
+# innotek VirtualBox
+# Linux static host networking interface initialization
+#
+
+#
+#  Copyright (C) 2007 innotek GmbH
+# 
+#  This file is part of VirtualBox Open Source Edition (OSE), as
+#  available from http://www.virtualbox.org. This file is free software;
+#  you can redistribute it and/or modify it under the terms of the GNU
+#  General Public License as published by the Free Software Foundation,
+#  in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
+#  distribution. VirtualBox OSE is distributed in the hope that it will
+#  be useful, but WITHOUT ANY WARRANTY of any kind.
+
+# chkconfig: 35 30 60
+# description: VirtualBox permanent host networking setup
+#
+### BEGIN INIT INFO
+# Provides:       vboxnet
+# Required-Start: $network
+# Required-Stop:
+# Default-Start:  3 5
+# Default-Stop:
+# Description:    VirtualBox permanent host networking setup
+### END INIT INFO
+
+PATH=$PATH:/bin:/sbin:/usr/sbin
+CONFIG="/etc/vbox/interfaces"
+VARDIR="/var/run/VirtualBox"
+VARFILE="/var/run/VirtualBox/vboxnet"
+TAPDEV="/dev/net/tun"
+
+if [ -f /etc/redhat-release ]; then
+    system=redhat
+elif [ -f /etc/SuSE-release ]; then
+    system=suse
+elif [ -f /etc/gentoo-release ]; then
+    system=gentoo
+else
+    system=other
+fi
+
+if [ "$system" = "redhat" ]; then
+    . /etc/init.d/functions
+    fail_msg() {
+        echo_failure
+        echo
+    }
+
+    succ_msg() {
+        echo_success
+        echo
+    }
+
+    begin() {
+        echo -n "$1"
+    }
+fi
+
+if [ "$system" = "suse" ]; then
+    . /etc/rc.status
+    fail_msg() {
+        rc_failed 1
+        rc_status -v
+    }
+
+    succ_msg() {
+        rc_reset
+        rc_status -v
+    }
+
+    begin() {
+        echo -n "$1"
+    }
+fi
+
+if [ "$system" = "gentoo" ]; then
+    . /sbin/functions.sh
+    fail_msg() {
+        eend 1
+    }
+
+    succ_msg() {
+        eend $?
+    }
+
+    begin() {
+        ebegin $1
+    }
+
+    if [ "`which $0`" = "/sbin/rc" ]; then
+        shift
+    fi
+fi
+
+if [ "$system" = "other" ]; then
+    fail_msg() {
+        echo " ...fail!"
+    }
+
+    succ_msg() {
+        echo " ...done."
+    }
+
+    begin() {
+        echo -n $1
+    }
+fi
+
+fail() {
+    if [ "$system" = "gentoo" ]; then
+        eerror $1
+        exit 1
+    fi
+    fail_msg
+    echo "($1)"
+    exit 1
+}
+
+running() {
+    test -f "$VARFILE"
+}
+
+valid_ifname() {
+    if expr match "$1" "vbox[0-9][0-9]*$" > /dev/null 2>&1
+    then
+      return 0
+    else
+      return 1
+    fi
+}
+
+# Create all permanent TAP devices registered on the system, add them to a
+# bridge if required and keep a record of proceedings in the file
+# /var/run/VirtualBox/vboxnet.  If this file already exists, assume that the
+# script has already been started and do nothing.
+start_network() {
+    begin "Starting VirtualBox host networking"
+    # If the service is already running, return successfully.
+    if [ -f "$VARFILE" ]
+    then
+      succ_msg
+      return 0
+    fi
+    # Fail if we can't create our runtime record file
+    if [ ! -d "$VARDIR" ]
+    then
+      if ! mkdir "$VARDIR" 2> /dev/null
+      then
+        fail_msg
+        return 1
+      fi
+    fi
+    if ! touch "$VARFILE" 2> /dev/null
+    then
+      fail_msg
+      return 1
+    fi
+    # If there is no configuration file, report success
+    if [ ! -f "$CONFIG" ]
+    then
+      succ_msg
+      return 0
+    fi
+    # Fail if we can't read our configuration
+    if [ ! -r "$CONFIG" ]
+    then
+      fail_msg
+      return 1
+    fi
+    # Fail if we don't have tunctl
+    if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+    then
+      fail_msg
+      return 1
+    fi
+    succ_msg
+    # Read the configuration file entries line by line and create the
+    # interfaces
+    while read line
+    do
+      set ""$line
+      # If the line is a comment then ignore it
+      if ((! expr match "$1" "#" > /dev/null) && (! test -z "$1"))
+      then
+        # Check that the line is correctly formed (an interface name plus one
+        # or two non-comment entries, possibly followed by a comment).
+        if ((! expr match "$2" "#" > /dev/null) &&
+            (test -z "$4" || expr match "$4" "#" > /dev/null) &&
+            (valid_ifname "$1"))
+        then
+          # Try to create the interface
+          if VBoxTunctl -t "$1" -u "$2" > /dev/null 2>&1
+          then
+            # On SUSE Linux Enterprise Server, the interface does not
+            # appear immediately, so we loop trying to bring it up.
+            i=1
+            while [ $i -le 10 ]
+            do
+              ifconfig "$1" up 2> /dev/null
+              if ifconfig | grep "$1" > /dev/null 2>&1
+              then
+                # Add the interface to a bridge if one was specified
+                if [ ! -z "$3" ]
+                then
+                  if brctl addif "$3" "$1" 2> /dev/null
+                  then
+                    echo "$1 $2 $3" > "$VARFILE"
+                  else
+                    echo "$1 $2" > "$VARFILE"
+                    echo "Warning - failed to add interface $1 to the bridge $3"
+                  fi
+                else
+                  echo "$1 $2" > $VARFILE
+                fi
+                i=20
+              else
+                i=`expr $i + 1`
+                sleep .1
+              fi
+            done
+            if [ $i -ne 20 ]
+            then
+              echo "Warning - failed to bring up the interface $1"
+            fi
+          else
+            echo "Warning - failed to create the interface $1 for the user $2"
+          fi
+        else
+          echo "Warning - invalid line in $CONFIG:"
+          echo "  $line"
+        fi
+      fi
+    done < "$CONFIG"
+    # Set /dev/net/tun to belong to the group vboxusers if it exists and does
+    # yet belong to a group.
+    if ls -g "$TAPDEV" 2>/dev/null | grep root
+    then
+      chgrp vboxusers "$TAPDEV"
+      chmod 0660 "$TAPDEV"
+    fi
+    return 0
+}
+
+# Shut down VirtualBox host networking and remove all permanent TAP
+# interfaces.  This action will fail if some interfaces could not be removed.
+stop_network() {
+    begin "Shutting down VirtualBox host networking"
+    # If there is no runtime record file, assume that the service is not
+    # running.
+    if [ ! -f "$VARFILE" ]
+    then
+      succ_msg
+      return 0
+    fi
+    # Fail if we can't read our runtime record file or write to the
+    # folder it is located in
+    if [ ! -r "$VARFILE" -o ! -w "$VARDIR" ]
+    then
+      fail_msg
+      return 1
+    fi
+    # Fail if we don't have tunctl
+    if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+    then
+      fail_msg
+      return 1
+    fi
+    # Read the runtime record file entries line by line and delete the
+    # interfaces.  The format of the runtime record file is not checked for
+    # errors.
+    while read line
+    do
+      set ""$line
+      # Remove the interface from a bridge if it is part of one
+      if [ ! -z "$3" ]
+      then
+        brctl delif "$3" "$1" 2> /dev/null
+      fi
+      # Remove the interface.  Roll back everything and fail if this is not
+      # possible
+      if (! ifconfig "$1" down 2> /dev/null ||
+          ! VBoxTunctl -d "$1" > /dev/null 2>&1)
+      then
+        while read line
+        do
+          set ""$line
+          VBoxTunctl -t "$1" -u "$2" > /dev/null 2>&1
+          ifconfig "$1" up 2> /dev/null
+          if [ ! -z "$3" ]
+          then
+            brctl addif "$3" "$1"
+          fi
+        done < "$VARFILE"
+        fail_msg
+        return 1
+      fi
+    done < "$VARFILE"
+    rm -f "$VARFILE" 2> /dev/null
+    succ_msg
+    return 0
+}
+
+# Shut down VirtualBox host networking and remove all permanent TAP
+# interfaces.  This action will succeed even if not all interfaces could be
+# removed.  It is only intended for exceptional circumstances such as
+# uninstalling VirtualBox.
+force_stop_network() {
+    begin "Shutting down VirtualBox host networking"
+    # If there is no runtime record file, assume that the service is not
+    # running.
+    if [ ! -f "$VARFILE" ]
+    then
+      succ_msg
+      return 0
+    fi
+    # Fail if we can't read our runtime record file or write to the
+    # folder it is located in
+    if [ ! -r "$VARFILE" -o ! -w "$VARDIR" ]
+    then
+      fail_msg
+      return 1
+    fi
+    # Fail if we don't have tunctl
+    if ! VBoxTunctl -h 2>&1 | grep VBoxTunctl > /dev/null
+    then
+      fail_msg
+      return 1
+    fi
+    # Read the runtime record file entries line by line and delete the
+    # interfaces.  The format of the runtime record file is not checked for
+    # errors.
+    while read line
+    do
+      set ""$line
+      # Remove the interface from a bridge if it is part of one
+      if [ ! -z "$3" ]
+      then
+        brctl delif "$3" "$1" 2> /dev/null
+      fi
+      # Remove the interface.
+      ifconfig "$1" down 2> /dev/null
+      VBoxTunctl -d "$1" > /dev/null 2>&1
+    done < "$VARFILE"
+    rm -f "$VARFILE" 2> /dev/null
+    succ_msg
+    return 0
+}
+
+start() {
+    start_network
+}
+
+stop() {
+    stop_network
+}
+
+force_stop() {
+    force_stop_network
+}
+
+restart() {
+    stop_network && start_network
+}
+
+status() {
+    if running; then
+        echo "VirtualBox host networking is loaded."
+    else
+        echo "VirtualBox host networking is not loaded."
+    fi
+}
+
+case "$1" in
+start)
+    start
+    ;;
+stop)
+    stop
+    ;;
+restart)
+    restart
+    ;;
+force-reload)
+    restart
+    ;;
+force-stop)
+    force_stop
+    ;;
+status)
+    status
+    ;;
+*)
+    echo "Usage: `basename $0` {start|stop|restart|force-reload|status}"
+    exit 1
+esac
+
+exit
diff --git a/kernel/virtualbox-module/init.d/virtualbox b/kernel/virtualbox-module/init.d/virtualbox
new file mode 100755
index 0000000..7371fba
--- /dev/null
+++ b/kernel/virtualbox-module/init.d/virtualbox
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Startup script for VirtualBox
+#
+# chkconfig:   345 50 50
+# description: Initializes VirtualBox
+# short:       VirtualBox
+
+load_kernel_module () {
+  modprobe vboxdrv
+}
+
+unload_kernel_module () {
+  rmmod vboxdrv
+}
+
+set_permissions () {
+  chgrp vboxusers /dev/vboxdrv &&
+  chmod g+rwx /dev/vboxdrv
+}
+
+start () {
+  echo -n "Starting VirtualBox: "
+  load_kernel_module && set_permissions
+  if [ $? == 0 ]; then
+    echo -e $RESULT_OK
+  else
+    echo -e $RESULT_FAIL
+  fi
+}
+
+stop () {
+  echo -n "Stopping VirtualBox: "
+  unload_kernel_module
+  echo -e $RESULT_OK
+}
+
+restart () {
+  stop
+  start
+}
+
+. /lib/lsb/init-functions


More information about the Lunar-commits mailing list